スタティックインスタンス変数

訳せば静的インスタンス変数でしょうか。これもインスタンス変数の一つで、原則としてプライベートであり、[下位]クラスのメソッドから操作されます。普通のインスタンス変数との違いは、スタティックインスタンス変数は、クラスに属しているということです。普通のインスタンス変数は、そのクラスのインスタンスに属していますから、オブジェクト毎に同じ構造で複製されますが、一つのスタティックインスタンス変数はクラスで一つです。つまり、そのクラスに属するオブジェクト全体が共有する変数ということになります。一つのオブジェクトから値を変えれば、同じクラスの他のオブジェクトから参照される値も変わります。

インスタンス変数がスタティックであることは"STATIC{"と、"}"で囲って示します。
:CLASS  MYCLASS  super{ OBJECT }
STATIC{
  VAR  StaticIvar1
  VAR  StaticIvar2
}
VAR  NormalIvar
  .........

Mopsではクラスメソッドという概念は利用されていないので、スタティックインスタンス変数にも、普通のメソッドからアクセスすることになります。さらに、スタティックインスタンス変数もまた継承され、下位クラスのメソッドからもアクセスできます。しかも、上位-下位クラス間でも、スタティックインスタンス変数は共通です。ですから、あるクラスに属するというよりも、それを宣言したクラスの下流にあるクラス全体に属しています。ですから、インスタンス変数というよりも、どちらかといえば、"名前空間/アクセス可能域が制限できる大域変数"のようなものと考えることができるように思われます。



関連項目:






最終更新:2018年12月22日 18:15