Sobes.tech
Назад к вопросам
Junior — Middle
72

В чем отличия между отношениями агрегации и композиции в объектно-ориентированном программировании?

Ответ от нейросети

sobes.tech AI

Агрегация и композиция — это два типа отношений между объектами в ООП, которые описывают, как объекты связаны друг с другом.

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

  • Композиция — более сильная форма агрегации, где вложенный объект полностью принадлежит контейнеру и не существует отдельно. Если контейнер уничтожается, то и вложенный объект тоже.

Пример:

class Engine {}

// Агрегация: Car имеет Engine, но Engine может существовать отдельно
class Car {
    var engine: Engine?
}

// Композиция: House состоит из Rooms, комнаты не существуют без дома
class Room {}

class House {
    var rooms: [Room] = []
    init() {
        rooms = [Room(), Room()]
    }
}

В композиции объекты тесно связаны и управляются вместе, в агрегации связь слабее.