Ответ
Агрегация — это тип ассоциации между классами, представляющий отношение «has-a» (имеет), где один класс (целое) содержит ссылку на другой класс (часть), но часть может существовать независимо от целого. Это отношение слабее, чем композиция.
Пример на Java:
// Класс-часть
class Engine {
public void start() {
System.out.println("Engine started");
}
}
// Класс-целое
class Car {
private Engine engine; // Агрегация: Car имеет Engine
// Engine передаётся извне и может существовать отдельно
public Car(Engine engine) {
this.engine = engine;
}
public void startCar() {
engine.start();
}
}
// Использование
Engine myEngine = new Engine();
Car myCar = new Car(myEngine); // Engine создан независимо
myCar.startCar();
Ключевые отличия от композиции:
- Агрегация: Часть имеет независимый жизненный цикл. Уничтожение целого не влечёт уничтожение части.
- Композиция: Часть не может существовать без целого (например,
Roomне может существовать безBuilding). Часть создаётся и уничтожается вместе с целым.