オブジェクト関連の意味

korakurider2005-05-21

http://d.hatena.ne.jp/propella/20050520/p1 より。
define:as: って確かによく意味がわからないんですが、 http://tweak.impara.de/TECHNOLOGY/Tutorials/BankAccountTutorial/ を読む限り、Tweakのオブジェクトモデルでは「1級市民」の重要コンセプトに思われたので、なんとかAndreasの頭の中を想像してみようと、ここ数日CObjectとかCPlayerといった基底クラスのコードを読んでいます。以下今の時点での「俺理解」のメモですが、妄想みたいなものですのであまり信じないでください。
(参考文献:http://tweak.impara.de/TECHNOLOGY/Whitepapers/PlayersandCostumes/
Tweakは、実行時にユーザが部品を動的に組み立てて大きなものをつくれる仕組みを用意しようとしています。部品組み立ての階層構造は、以下の2種類があります。

  • ビジュアルとしてのCostumeの入れ子関係: CPlayer>>add:
  • 機能的な意味でのオブジェクトの所有関係: CObject>>define:as:

※クラスブラウザからリストを取り出しても、リストとブラウザ本体が連動するのは、オブジェクトの関連にこの2系統があることを如実に示している例かと誤解したのです(Morphicのブラウザでも同じように動くことを知らなかったので --;)
define:as: で登録しても、普通のフィールドとして登録しても、最終的には CObject内部のプロパティとして格納されます。しかし前者はユーザプラガブルな部品関係を格納する仕組みとして、フレームワークで特別に扱われています。

  • define:as:で登録した場合、有向リンク(親→子)を表現する CComponentBindingというオブジェクトがプロパティに格納されます。通常のオブジェクト参照と異なり、子供側から親側を認識する手段を持ちます。(子供側の #componentHomeプロパティに自分を指す CComponentBindingを覚えている)
  • define:as:でつける名前は、本来はRole名です。高機能のGUIビルダで、互換性がある部品をそのロールにプラグインするような使い方を想定。
  • 部品をつかんだ時、これらの機能を使って"親's 子"というラベルをハロに表示します。