Назад к вопросам
Junior
116
questionbank

В чем заключается разница между композицией и агрегацией?

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 Заполненный ромб на стороне целого Пустой ромб на стороне целого