★用語比較
MopsとC++で使われている用語の比較です。Mopsにはクラス変数、クラスメソッド(C++の静的メンバ変数、静的メンバ関数)に相当するものがありません。
Mops
C++
クラス
クラス
インスタンス
インスタンス
メソッド
メンバ関数
なし
静的メンバ関数
インスタンス変数
メンバ変数
なし
静的メンバ変数
テンポラリオブジェクト
あるいはローカル変数auto変数
サブクラス
派生クラス
スーパークラス
基底クラス
★クラス定義方法
Object-Oriented Virtual SeminarにあったC++によるこのリストをみて同様な内容のMopsによるサンプルリストをつくりました。ここにあります。両リストを比較して見てください。
ポイントとしては、Mopsは
- クラスの定義は:classで始まり、;classで終わる。
- クラス定義とクラス実装は分離できない。(Javaに似ている。)
- メソッドの定義は:mで始まり、;mで終わる。
- CLASSINIT:メソッドがC++のコンストラクタに相当している。
- デストラクタに相当するものはない。
- メソッドへのパラメタはForthのワードと同じくスタックを介して渡される。
パラメタの数や型に関するチェックは行われず、スタックに乗っているのが値なのかポインタなのかパラメタの数がいくつなのかはメソッド側の取り扱いに任されている。柔軟な反面、安全性は低いといえる。
- メソッドの呼び出しは msg: object という形でおこなう。パラメタはメソッドを呼ぶ前にスタックに積んでおく。たとえば、 x y z msg: object という形になる。
- 自分自身のオブジェクトを表わすにはselfという表記を用いる。 msg: selfのように使用する。
- スーパークラスのメソッドを呼ぶにはsuperという表記を用いる。msg: superのように使用する。
- 多重継承はスーパークラスを並べて書くことによって定義する。たとえば、
:class CCC super{ AAA BBB } ;class
の様に表記するとCCCはAAAとBBBの二つのスーパークラスを持つようになる。スーパークラス間にはメッセージを受け取る上での優先関係が存在し、定義のときに左側に書かれたスーパークラスほど優先順位が高い。
したがって、AAAとBBBがおなじxxx:というメソッドを持つ場合、AAAのxxx:というメソッドが呼び出される。BBBに対してのxxx:メソッドを呼びたいときは、
xxx: super> BBB
という表記を用いることで可能になる。などがあります。
戻る