インスタンス変数は、オブジェクトの固有データの構成因子です。同じクラスに属するオブジェクトは、同じ構造のインスタンス変数を持ちます。クラス定義の冒頭で、その型を定めます。
インスタンス変数には、原則として、既に定義されているクラスのインスタンスを使います。そして、静的オブジェクトの宣言と同じ構文で、インスタンス変数を宣言します。例えば、
:CLASS MyClass super{ OBJECT }
VAR Variable1
VAR Variable2
.........
;CLASS
のような定義をすれば、クラス"MyClass"に属するオブジェクトは4バイト幅の数値を格納するためのインスタンス変数を二つもつことになります。ここで、VARというのはMopsの既定クラスで、4バイト(32ビット)幅の変数クラスの基本的なものです。C言語ではlong [int]にあたります。既定クラスについては、詳しくは、英語ですが、MopsマニュアルのPart III(Class
Reference)を参照してください。なお、このサイトに、一部(本当にごく一部^^;;)翻訳があります。
これらのインスタンス変数の値は、デフォルトでは、このクラスで定義されるメソッドか、このクラスの下位のクラスで定義されるメソッドからしか、操作することはできません。このようなインスタンス変数は、プライベート(private)であるといいます(C++ではプロテクテッドに当たると思います)。Private インスタンス変数を操作するためのメソッドは、一般に、インターフェイスと呼ばれます。
インスタンス変数もまた、別のクラスに属するオブジェクトですから、メソッド定義の中では、それにメッセージを送ることによって作業を行います。つまり、インスタンス変数が属するクラスで定められたインターフェイスを利用するわけです。
インスタンス変数は、"変数"である必要はありません。例えば、ウィンドウやヴュー、ボタン、といったオブジェクトも、インスタンス変数となり得ます。要は、インスタンス変数は、Mopsのクラスのオブジェクトであれば何でもいい、ということです。
Mopsではインスタンス変数という名前はちょっとややこしくなります。というのは、インスタンス変数は、それ自体、あるクラスのインスタンスです。そして同時に、それをインスタンス変数として宣言したクラスのインスタンスの内部構造を構成する変数の一つでもあるのです。やっぱりややこしいな(文章力の問題ですが)。まあ、名前にはこだわらず、どのように処理すればいいのかが判れば大丈夫だと思います。
関連項目:
最終更新:2020年01月23日 23:20