Я читал книги, пытаясь понять различные аспекты агрегации и композиции. Однако я наткнулся на момент, когда мне показалось, что агрегация может усилить слабую связь, но также может нарушить инкапсуляцию.
Улучшите слабую связь.
public class Car{
private Engine engine;
Car(Engine e){
this.engine=e;
}
}
В приведенном выше примере любая реализация класса Engine может быть создана и помещена в объект Car во время создания, а поскольку экземпляр Engine может жить без автомобиля, это идеальный пример агрегации. (этот пример может быть не лучшим примером из реальной жизни, но я думаю, что я выразил свою точку зрения)
Теперь клиентский код имеет полный контроль над объектом Engine, поэтому он может изменить несколько состояний объекта Engine, переданного в Car, а реализация Car нарушит инкапсуляцию, поскольку его объект или состояние (которое является Engine) больше не имеет правильная целостность в Автомобиле.
правильно ли я понимаю?