Композиция - это целое / частичное отношение.Распространенным способом кодирования композиционных отношений является создание объекта части в конструкторе составного (целого) объекта.Пример в 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, чтобы не иметь ссылки на объект part в методе, вызывающем метод add, как в классе Car:
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.Объекты детали должны управляться только композитом.Что Вы думаете об этом ?Спасибо миру!