Что такое агрегация в объектно-ориентированном программировании?

«Что такое агрегация в объектно-ориентированном программировании?» — вопрос из категории Базы данных и SQL, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Агрегация — это тип ассоциации между классами, представляющий отношение «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). Часть создаётся и уничтожается вместе с целым.