Ответ
Агрегация — это тип ассоциации "часть-целое" в ООП, который описывает отношение, где один объект (контейнер, целое) содержит ссылку на другой объект (компонент, часть), но их жизненные циклы независимы. Уничтожение контейнера не влечёт за собой уничтожение его частей.
Ключевые характеристики:
- Отношение "has-a" ("имеет").
- Слабая связь: Компонент может существовать отдельно от контейнера и быть частью других агрегатов.
- Передача по ссылке: Контейнер хранит ссылку на внешне созданный объект.
Пример в Java:
// Класс-компонент (часть)
class Engine {
private String model;
public Engine(String model) { this.model = model; }
public void start() { System.out.println(model + " engine started."); }
}
// Класс-контейнер (целое) - Автомобиль АГРЕГИРУЕТ Двигатель
class Car {
private String brand;
private Engine engine; // Агрегация: ссылка на независимый объект
// Двигатель передаётся извне
public Car(String brand, Engine engine) {
this.brand = brand;
this.engine = engine;
}
public void drive() {
engine.start();
System.out.println(brand + " is driving.");
}
}
// Использование
public class Main {
public static void main(String[] args) {
// Двигатель создаётся независимо
Engine v8Engine = new Engine("V8");
// Два автомобиля могут использовать один и тот же двигатель (в реальности - ссылку на него)
Car car1 = new Car("Ford", v8Engine);
Car car2 = new Car("Chevrolet", v8Engine);
car1.drive(); // "V8 engine started. Ford is driving."
// Уничтожение car1 (например, null) НЕ уничтожает v8Engine
}
}
| Отличие от композиции: | Агрегация | Композиция |
|---|---|---|
| Слабая связь. | Сильная связь (часть не существует без целого). | |
| Жизненные циклы независимы. | Жизненный цикл части управляется целым (часть создаётся и уничтожается вместе с целым). | |
| Передача объекта извне. | Создание объекта внутри контейнера. |
Агрегация полезна для моделирования гибких структур, где компоненты могут использоваться повторно.