Какое отношение между классами будет?
Композиция, это один класс является частью другого, например двигатель не может существовать без машины, так как класс машина создает себе экземпляр двигателя самостоятельно например в конструкторе.
public class Car{
private Engine engine;
public Car(){
engine = new Engine();
}
}
Агрегация это когда один класс содержит другой класс, например двигатель передается в конструктор автомобиля и уже может существовать без автомобиля, даже если он будет уничтожен.
public class Car{
private Engine engine;
public Car(Engine engine){
this.engine = engine;
}
}
То тогда вопрос, если я создаю абстрактный класс Engine и два наследника EclctricMotor и FuelEngine и добавляю его поле в класс Car, а в конструкторе создаю экземпляр его наследника, скажем FuelEngine(по сути композиция) и создаю сеттер на двигатель(что уже по сути агрегация), то какое отношение будет иметь класс автомобиль по отношению к классу двигатель? Ведь он получается содержит и композицию и агрегацию ?♂️
public class Car{
private Engine engine;
public Car(){
engine = new Engine();
}
public setEngine(Engine engine){
this.engine = engine;
}
}
P.S. На диаграмме отобразил интерфейс engine. Но в данном случае это роли не играет
Ответы (2 шт):
"Композиция", "агрегация" - бессмысленные ярлыки.
Автомобиль содержит двигатель - вот их отношение.
Это одно и тоже, просто взгляд снутри и снаружи. Композиция это собрание как бы независимых деталей в одно целое. И целое агрегированные из деталей. По сути это поля объекта и как они проинициализированы и используются объекту ровно, это важно только пользователю
