Sobes.tech
Junior — Middle

Kuo skiriasi agregacijos ir kompozicijos ryšiai objektinio programavimo kontekste?

sobes.tech AI

Atsakymas iš AI

Objektų tarpusavio ryšiai yra dviejų tipų: agregacija ir kompozicija, kurie apibūdina, kaip objektai yra susiję.

  • Agregacija: tai "turi" (has-a) ryšys, kai vienas objektas apima kitą, tačiau įdėto objekto gyvavimo ciklas nepriklauso nuo konteinerio. Įdėtas objektas gali egzistuoti savarankiškai.

  • Kompozicija: stipresnė agregacijos forma, kai įdėtas objektas visiškai priklauso konteineriui ir neegzistuoja atskirai. Jei konteineris sunaikinamas, sunaikinamas ir įdėtas objektas.

Pavyzdys:

class Engine {}

// Agregacija: Car turi Engine, bet Engine gali egzistuoti atskirai
class Car {
    var engine: Engine?
}

// Kompozicija: House sudarytas iš Rooms, kurie neegzistuoja be namo
class Room {}

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

Kompozicijoje objektai glaudžiai susiję ir valdoma kartu, o agregacijoje ryšys yra silpnesnis.