構成は全体/部分の関係です。合成関係をコーディングする一般的な方法は、合成 (全体) オブジェクトのコンストラクターでパーツ オブジェクトを作成することです。Java での例:
public class Car {
private String brand;
private ArrayList<Tire> theFourTires = new ArrayList<Tire>();
public Car(String brand)
{
this.brand = brand;
for (int i = 1; i < 5;i ++)
{
// here the "composition" relationship
theFourTires.add(new Tire());
}
}
どのオブジェクトがパーツになるかを決定したい場合は、add ...メソッドを使用してコンポジットにパーツ オブジェクトを追加できます。このルール (UML 仕様) を尊重する必要があります。パーツ オブジェクトは共有できません (複合オブジェクトを除く別のオブジェクトから参照されます)。したがって、add メソッドを呼び出すときは、Car クラスで次のように、add メソッドを呼び出すメソッドで part オブジェクトを参照しない方がよいと思います。
public void addPart(CarParts aPart)
{
this.parts.add(aPart);
}
別のオブジェクトから add メソッドを呼び出します。
Car c = new Car("Ford Torino");
c.addPart(new Tire());
それ以外の
Tire t = new Tire();
c.addPart(t);
この場合、インスタンスは非常に短い時間であっても t 参照によって共有され、構成関係が集約になるためです。この場合、t オブジェクトのメソッドを呼び出して、part オブジェクトのカプセル化に違反する可能性があります。パーツ オブジェクトは、コンポジットのみで管理する必要があります。これについてあなたはどう思いますか ?ありがとう世界!