Sobes.tech
Junior — Middle

Rendelsz a öröklődés vagy a kompozíció használata felé rendszerek tervezésekor?

sobes.tech MI

Válasz az MI-től

A rendszerek tervezésekor általában a kompozíciót részesítik előnyben az öröklés helyett.

Miért?

  • Az öröklés merev hierarchiát hoz létre, ami problémákhoz vezethet a változtatások és a kód bonyolódása során.
  • A kompozíció lehetővé teszi, hogy objektumokat komponensekből hozzunk létre, így a rendszer rugalmasabb és bővíthetőbb lesz.

Például ahelyett, hogy egy "Madár" osztályt hoznánk létre és belőle "RepülőMadár" és "FutóMadár" öröklene, jobb, ha egy "Madár" osztályt hozunk létre, amely viselkedési objektumokat tartalmaz (pl. repülés, futás). Így dinamikusan változtathatjuk a viselkedést anélkül, hogy megváltoztatnánk a hierarchiát.

Az iOS-ben gyakran használnak protokollokat és delegáltakat, ami a kompozíció egyik formája.

Swift példával:

protocol Flyable {
    func fly()
}

class Bird {
    var flyingAbility: Flyable?
    func performFly() {
        flyingAbility?.fly()
    }
}

class CanFly: Flyable {
    func fly() {
        print("Repülök")
    }
}

class CannotFly: Flyable {
    func fly() {
        print("Nem tudok repülni")
    }
}

let sparrow = Bird()
sparrow.flyingAbility = CanFly()
sparrow.performFly() // Repülök

let penguin = Bird()
penguin.flyingAbility = CannotFly()
penguin.performFly() // Nem tudok repülni

Így a kompozíció nagyobb rugalmasságot nyújt és egyszerűsíti a kód karbantartását.