В чем заключается разница между композицией и агрегацией?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Композиция и агрегация - отношения "часть-целое" между объектами.
-
Композиция: Строгое отношение, где часть не может существовать без целого. Удаление целого также удаляет части. Жизненный цикл зависимой части полностью определяется целым. Пример: Комнаты (части) в Доме (целом). Без Дома комнаты не существуют.
// Пример композиции: class Room { private String name; public Room(String name) { this.name = name; } // ... методы Room } class House { private List<Room> rooms = new ArrayList<>(); // Части создаются и управляются целым public House() { rooms.add(new Room("Living Room")); // Создание части внутри целого rooms.add(new Room("Bedroom")); } // ... методы House } -
Агрегация: Более слабое отношение, где часть может существовать независимо от целого. Удаление целого не обязательно приводит к удалению частей. Части могут быть связаны с несколькими различными целыми объектами. Пример: Автомобиль (целое) и Колеса (части). Колеса могут существовать отдельно от конкретного автомобиля и использоваться на другом.
// Пример агрегации: class Wheel { private int size; public Wheel(int size) { this.size = size; } // ... методы Wheel } class Car { private List<Wheel> wheels = new ArrayList<>(); // Целое содержит ссылки на части public Car(List<Wheel> wheels) { this.wheels = wheels; // Получение частей извне } // ... методы Car } // Пример создания и использования: List<Wheel> myWheels = new ArrayList<>(); myWheels.add(new Wheel(16)); myWheels.add(new Wheel(16)); // ... Car myCar = new Car(myWheels); // Агрегация: колеса могут существовать до и после машины
Основные отличия в таблице:
| Критерий | Композиция | Агрегация |
|---|---|---|
| Зависимость | Строгая: Часть зависит от целого | Слабая: Часть может существовать независимо |
| Жизненный цикл | Часть управляется целым | Часть не обязательно управляется целым |
| Удаление целого | Приводит к удалению частей | Не обязательно приводит к удалению частей |
| Множественные связи | Часть принадлежит только одному целому | Часть может быть связана с несколькими целыми |
| Диаграмма UML | Заполненный ромб на стороне целого | Пустой ромб на стороне целого |