Sobes.tech
Junior — Middle

Mis vahe on agregatsiooni ja kompositsiooni suhetel objektorienteeritud programmeerimises?

sobes.tech AI

Vastus AI-lt

Objektide vahelised suhted on kaks tüüpi: agregatsioon ja kompositsioon, mis kirjeldavad, kuidas objektid on omavahel seotud.

  • Agregatsioon: see on "omab" (has-a) suhe, kus üks objekt sisaldab teist, kuid sisemise objekti elutsükkel ei sõltu konteinerist. Sisemine objekt võib eksisteerida iseseisvalt.

  • Kompositsioon: tugevam agregatsiooni vorm, kus sisemine objekt kuulub täielikult konteinerile ja ei eksisteeri eraldi. Kui konteiner hävib, siis hävib ka sisemine objekt.

Näide:

class Engine {}

// Agregatsioon: Car omab Engine, kuid Engine võib eksisteerida eraldi
class Car {
    var engine: Engine?
}

// Kompositsioon: House koosneb Rooms, mis ei eksisteeri ilma majata
class Room {}

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

Kompositsioonis on objektid tihedalt seotud ja neid hallatakse koos, samas kui agregatsioonis on side nõrgem.