Что такое агрегация в ООП? Приведите пример на Java.

«Что такое агрегация в ООП? Приведите пример на Java.» — вопрос из категории ООП, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Агрегация — это тип ассоциации в ООП, представляющий отношение «has-a» (имеет), где один объект (целое) содержит ссылку на другой объект (часть), но оба могут существовать независимо. Жизненный цикл части не зависит от жизненного цикла целого.

Пример на Java:

// Класс «часть»
class Engine {
    public void start() {
        System.out.println("Engine started.");
    }
}

// Класс «целое», использующий агрегацию
class Car {
    // Агрегация: Car содержит ссылку на Engine
    private Engine engine;

    // Engine передается извне, что подчеркивает независимость
    public Car(Engine engine) {
        this.engine = engine;
    }

    public void startCar() {
        engine.start();
        System.out.println("Car started.");
    }
}

public class Main {
    public static void main(String[] args) {
        // Engine создается независимо от Car
        Engine engine = new Engine();
        // Engine передается в Car при создании
        Car car = new Car(engine);
        car.startCar();
        // Объект engine продолжит существовать, даже если car будет удален
    }
}

Ключевое отличие от композиции: При композиции часть создается и уничтожается вместе с целым. В агрегации часть может быть создана отдельно и передана целому, что обеспечивает более слабую связность и возможность повторного использования.