netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2004-08-31 古い日記からの変換データ [長年日記] ▲
_ [論文]安全なメタクラスの結合 ▲
ICSMの発表資料作りで一時的に煮詰まってきたので,気分転換に論文を探して読むことにする.
Noury M. N. Bouraqadi, Thomas Ledoux, Fred Rivard:Safe Metaclass Programming.Proceedings of OOPSLA 98, pp.84-96,Vancouver, B.C., October, 1998.
メタクラスを使って継承階層を作るときには,クラス間の継承関係と,対応するメタクラス間の継承関係がきちんと保たれないと困る,とかいう互換性問題があるらしい.
ところが,特定のクラスにだけ属性を付与しようとすると(たとえばあるクラスのインスタンス生成を禁止するAbstract を付加すると)その属性が継承されてしまって困ったことになる.
そこで,互換性を維持するためのメタクラスと,クラスごとの属性を付与していく「属性メタクラス」を区分し,実際のクラスたちは属性メタクラスのインスタンスとする.
MetaA ←(inherit)← "MetaA + Singleton" ←(instance)← Aといったようになる.間の "MetaA + Singleton" のところが付与する属性の数に応じて継承階層数が増えていく.
著者らは2003とかにも原稿を書いていて,このあたりの継承階層をMix-inとして実装するつもりのよう.クラスのプログラマが,サービスとして提供されているメタクラスをMix-inとして導入するイメージみたい.
Non-orthogonalな属性(Value-Conflict)については単に継承元のメソッドを呼ぶようにして振舞いましょうといった程度のことしか書いていなかった.あとは開発者がMix-inする段階などで順番など何らかのコントロールをする,ということになりそう.このあたりの話は他にも文献をあたってみないといけない.
結合の安全性という話とは直接は関係ないが,この論文の著者らは,属性メタクラスのクラス(メタ-メタクラス)をベースに使われる場面ごとに属性メタクラスがインスタンス化されるという考え方をしている.この辺はアスペクトのインスタンス化の話に何か結びつくかも?結合対象はあくまでクラス単位だけれど.