Scheme:メタオブジェクトプロトコル
メタオブジェクトプロトコル(MOP)はCommon Lispのオブジェクトシステムに 採り入れられた概念。Kiczales他の The Art of the Metaobject Protocol が元祖。 Schemeには標準ではついていないが、MOPを使えるように したオブジェクトシステムの実装はいくつかある。
- Tiny CLOS
Kiczales自身による、CLOSのMOPの簡易版のSchemeによる実装。非常にシンプルで、 MOPそのものの原理を知るにも良い。また非常にポータブルなため、 さまざまなScheme処理系で走らせることができる。
- STklos
Tiny CLOSを拡張し、またクリティカルな部分を処理系内部で実装することにより 効率を上げている。MOPを使って、GUIツールキット (現在の実装はGtk、 以前のバージョンはTk) を綺麗にSchemeのオブジェクトシステムにマップしている。
- Goops
Guileのオブジェクトシステム。STklosを元に拡張している。
- Gauche
STklosを元に拡張している。
そもそも、MOPって何?
オブジェクトシステムの強みのひとつは、フレームワークをベースクラスで 作っておいて、継承やメソッドオーバロード、あるいはコンポジションによって アプリケーションにフレームワークを適応してゆけるということだよね。 それを、「オブジェクト指向言語そのもの」に適用したのがMOPだ。
MOPでは、クラスやメソッドと言ったオブジェクトシステムの基本要素が そのオブジェクトシステム自身を使って定義されている。 で、例えばクラスが定義される時にはどういうメソッドがどういう順番で 呼ばれ、それらは何をすることを望まれているかというのが明文化されている。 適宜それらのメソッドをオーバロードしてやることで、 書こうとしているアプリケーションの問題領域に適するようにオブジェクトシステムの 振舞いを変更することができるのだ。
MOP入門編
- Scheme:MOP:クラス定義?