カプセル化の使用について

オブジェクト指向の流儀に従って要領よく設計されているオブジェクトは、機能を内蔵 (カプセル化) した "ブラックボックス" と見なすことができます。そのようなオブジェクトは、プログラマがプロパティ、メソッド、およびイベント (プログラミングインターフェイス) さえ知っていれば操作することができます。オブジェクトがどのように実装されているかを詳しく知っている必要はありません。このようなアプローチにより、プログラマは抽象的な視点で考え、複雑なシステムを構築する上で必要なフレームワークを作成することができます。

ActionScript 2.0 におけるカプセル化の意義の 1 つに、メンバーアクセスの制御があります。実装の詳細は公開されず、オブジェクト外のコードからは見えないようになっています。したがって、オブジェクトの外側のコードは、実装の細部にアクセスするのではなく、強制的にオブジェクトのプログラミングインターフェイスとのやり取りを実行します。このアプローチには、いくつかの重要な利点があります。たとえば、オブジェクトの作成者は、プログラミングインターフェイスが変わらない限り、オブジェクトの外側のコードに手を加えることなく、オブジェクトの実装を変更できます。

Flash でのカプセル化の例として、たとえば、すべてのメンバー変数とクラス変数をプライベートに設定して、クラスを実装したユーザーがこれらの変数にアクセスするときに、getter メソッドと setter メソッドを使用するようにします。この方法でカプセル化すると、将来、変数の構造を変更する必要が生じた場合でも、クラスの変数へのアクセス方法を変更することなく、getter 関数と setter 関数の動作を変更するだけで済みます。

次のコードでは、前述の例の Person クラスを変更して、そのインスタンスメンバーをプライベートに設定し、プライベートインスタンスメンバーの getter メソッドと setter メソッドを定義する方法を示します。

class Person {
    private var __userName:String;
    private var __age:Number;
    public function get userName():String {
        return this.__userName;
    }
    public function set userName(value:String):Void {
        this.__userName = value;
    }
    public function get age():Number {
        return this.__age;
    }
    public function set age(value:Number):Void {
        this.__age = value;
    }
}

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000787.html