>1)インターフェース継承による多重継承によりWINDOWを表す方法
>2)集約によりWINDOWをもつ方法
>の2つでは、若干違いがあると思います。
>クラスのクライアント側から見た場合、2)の場合、あくまでも外面は
>TREE_NODEであり、WINDOWではない訳です。
ちょっと今まで出た案を整理しますね。
案1)多重継承。WINDOWがSCREEN_OBJECTとTREE_NODEを多重継承する。
案2)インタフェースと委譲を使う。WINDOWはSCREEN_OBJECTを継承し、
TREE_NODEインタフェースを実装する。
TREE_NODEの実装はTREE_NODE_IMPLクラスにあって、WINDOWは
TREE_NODE_IMPLへの参照を保持し、add_child()などのメソッドを
そっちに委譲する。
案3)コレクションクラスTREEを作り、そのTREE_NODEがWINDOWへの
参照を保持するようにする。
案3)は、私がうっかりこれでいいかと思っちゃった案ですが、WINDOWの場合は
ダメです。たとえばWINDOWのrepaint()メソッドが呼び出されたとき、
WINDOWは自分の子を再帰的にrepaint()しなければなりません。
つまり、「外から見て木構造に見える」のではダメで、
WINDOW自身が自分の子を知っていないといけないわけで、
TREE_NODEからWINDOWに参照を持つような構造では困ります。
案2)ですが、この方法で、外から見れば多重継承と実質同じことができますが、
考えてみれば、外から見て、WINDOWがTREE_NODEに見えて嬉しいことは
なさそうなので、わざわざinterfaceを使う必要はなさそうです。
つまり委譲だけでよいと。で、何に委譲するかですが、TREE_NODE_IMPLなんぞ
作らなくても、ArrayListで良いような…
こう考えると、このケースでも多重継承は不要ですねえ。
>ところで、知っていたら教えてほしいのですが、PerlとCのリンク方法で
>詳しいページとか書籍とかあったら教えてほしいです。
>つまりCのメモリ上にPerlで処理したデータを取得したいのです
>(外部ファイルとか、ソケットなどを使わずに)。
Perlは詳しくないですが、PerlからCを呼ぶことぐらいはできるはずなので、
ラクダ本第2版を今見てみました。perlxstutというキーワードが出てきたので
Googleして見つかったのがこちらです。
http://www.kt.rim.or.jp/~kbk/perl5.005/perlxstut.html