Sobes.tech
Junior — Middle

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

sobes.tech AI

Отговор от 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()]
    }
}

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