Ответ
Ассоциация — это связь между двумя классами, при которой объекты одного класса знают об объектах другого и могут с ними взаимодействовать. Она реализует отношение "имеет" (has-a) и предпочтительнее наследования, когда нет строгой иерархии "является" (is-a).
Основные виды и случаи применения:
| Тип связи | Описание | Когда использовать | Пример на Java |
|---|---|---|---|
| Агрегация | Слабая связь, часть может существовать независимо от целого. | Когда жизненный цикл объектов не связан. | University имеет Professor. Университет может существовать без конкретного профессора. |
| Композиция | Сильная связь, часть не может существовать без целого. | Когда объект-часть является неотъемлемой составляющей объекта-целого. | Car имеет Engine. Двигатель не имеет смысла без автомобиля. |
Пример кода (Композиция):
class Car {
private Engine engine; // Композиция: Engine создается и уничтожается с Car
public Car() {
this.engine = new Engine(); // Создание внутри класса-владельца
}
}
class Engine { /* ... */ }
Почему это важно: Ассоциация (особенно композиция) повышает гибкость и переиспользуемость кода по сравнению с наследованием, уменьшает связность и следует принципу "предпочитайте композицию наследованию".