[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 1548] 集約とコンポジ ションの実装方法 (Re: Java スレッドプログラミングを読む会第 4 回議事録)



高橋(徹)です。

> 小薮です。
> # 最近なかなかお会いできませんねー > 高橋さん
昨年秋頃の“.NET&C#イニシエーションの会(Javaごはん沖縄)”以来でした
よねぇ。。。
最近、C++とHP-UXに苦しめられています。

> Toru TAKAHASHI <tooru6.takahashi@xxxxxxxxxxxxx> wrote:
> > Javaのプログラムで単なる集約(◇)とコンポジション(◆)の違いを実装
> > するとしたら、後者はインナークラスあたりでしょうか? 
> 
> これは違うでしょう。たとえば生成したインナークラスのインスタンスを
> 外のオブジェクトに渡してしまったら、インナークラスのインスタンスと
> それを含んでいるクラスのインスタンスの生存期間が一致しません。
> Javaでは実装上の区別はつけられないと思っています。
privateなinner classを定義したら、クラス外部からはアクセスされない
ことが実現できると思いますが、いかがでしょう?
public class Composite {
    Part part = new Part();

    private class Part {
            :
    }
}

Compositeクラスに、partをreturnするメソッドを書くと、外部に参照が
漏れてしまうかもしれませんが。。。

> C++の場合、ポインタや参照ではなくインスタンス自体をメンバとして
> 持っているような場合では明示的にコンポジションになると思います。
> 
> 
> class child {
> 	int foo;
> };
> 
> class parent {
> 	// c の生存期間はそれが属するparentのインスタンスと
> 	// 生存期間が一致
> 	child c;
> 
> 	// 下のポインタで管理されるインスタンスはもちろん
> 	// それが属するparentのインスタンスと生存期間は
> 	// かならずしも一致しない
> 	child *p;
> }
class parentがnewされた時点で自動的にchildもnewされるのですよね。
確かにライフサイクルは一致しますねぇ。

======------======------======
Toru Takahashi,  TOSHIBA Corps. KOMUKAI Works
(office)tooru6.takahashi@xxxxxxxxxxxxx
(private)torutk@xxxxxxxxxxx
http://www.alles.or.jp/~torutk/oojava/