4

構成と集計について読んでいます。2 つの異なる関係タイプの基本を理解していると思います。ただし、コードで実際にどのように見えるかはまだ不明です。

new OtherObject()複合オブジェクトがある場合、それは、定義されている複合オブジェクトの外側には絶対に書かないということですか? タイプの参照を複合オブジェクトに渡すことはありませんOtherObject。内部で維持されますか?

参照を渡すすべてのケースで、構成ではなく集計を扱っているというのは正しいですか? 両者の境界線はどこに向かうのか?作品の一部であるオブジェクトとそうでないオブジェクトについて話すことが許可されている場合のルールがわかりません。

4

2 に答える 2

4

構成は強い関連性です。

集約は弱い関連です。

集約は関連の特殊なケースです。オブジェクト間の方向的な関連付け。オブジェクトが別のオブジェクトを「持つ」場合、それらの間に集約があります。それらの間の方向は、どのオブジェクトが他のオブジェクトを含むかを指定しました。

合成は集計の特殊なケースです。より具体的には、制限された集合体を合成と呼びます。オブジェクトが他のオブジェクトを含む場合、含まれるオブジェクトがコンテナー オブジェクトの存在なしでは存在できない場合、それは合成と呼ばれます。

コンポジションはb、含まれるオブジェクトが含まれるオブジェクトの存続期間を担当する関連付けaです。すでに作成されたオブジェクトの参照aを別のオブジェクトbに渡すとb、 は のライフサイクルを制御できなくなります。aつまり、aがなくても存在できますb

class A {
   B b ;
   A(B b ) { this.b = b; }
 }

ここで の存在はbに依存していませんaA、 のオブジェクトを含んでいますB集計

class A {
 B b ;
 A() { b = new B();}
}

ここbは のオブジェクトの存在に依存しますA。のオブジェクトAがない場合、どちらのオブジェクトもありませんB構成。

于 2013-07-04T10:54:32.140 に答える
0

以下を検討してください

構成例です。B は、A なしでは存在できないように A に関連付けられています。

      Class A{
         B b = new B();
       }

クラスのオブジェクトを作成するとAB も作成され、A が破棄されると B も破棄されます。

Aggregationの例を考えてみましょう。B は A に関連付けられていますが、A がなくても存在できます

      Class A{
         C c = new C();
         B b = c.someMethodThatReturnsExistingBObject();
      }

      class C{
         B b = new B();
         public B someMethodThatReturnsExistingBObject(){
             return b;
         }
       }

次に、これは外部参照を持つオブジェクトを返します。つまり、まだこのクラスの外に存在します。したがって、Aオブジェクトが破壊されても、Bオブジェクトは外でも生き続けます.

参照を渡すすべてのケースで、構成ではなく集計を扱っているというのは正しいですか?

はい、構成の意味は、オブジェクトの外的存在がないということだからです。aggregation参照を渡すとすぐに、参照を渡すときに、外部から渡されたために外部から存在する外部オブジェクトを渡すためと見なされます。

于 2013-07-04T10:58:48.847 に答える