Sobes.tech
Junior — Middle

Uprednostňujete použitie dedičstva alebo kompozície pri navrhovaní systémov?

sobes.tech AI

Odpoveď od AI

Pri projektovaní systémov sa zvyčajne uprednostňuje kompozícia pred dedičstvom.

Prečo?

  • Dedičstvo vytvára pevnú hierarchiu, ktorá môže viesť k problémom pri zmenách a zložitosti kódu.
  • Kompozícia umožňuje vytvárať objekty z komponentov, čo robí systém flexibilnejším a rozšíriteľnejším.

Napríklad namiesto vytvorenia triedy "Vták" a dedenia z nej "LietajúciVták" a "BežiaciVták" je lepšie vytvoriť triedu "Vták", ktorá obsahuje objekty správania (napríklad, lietať, behať). Takto môžete dynamicky meniť správanie bez zmeny hierarchie.

V iOS sa často používajú protokoly a delegáti, čo je forma kompozície.

Príklad v Swift:

protocol Flyable {
    func fly()
}

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

class CanFly: Flyable {
    func fly() {
        print("Ja lietam")
    }
}

class CannotFly: Flyable {
    func fly() {
        print("Nemôžem lietať")
    }
}

let sparrow = Bird()
sparrow.flyingAbility = CanFly()
sparrow.performFly() // Ja lietam

let penguin = Bird()
penguin.flyingAbility = CannotFly()
penguin.performFly() // Nemôžem lietať

Týmto spôsobom, kompozícia poskytuje väčšiu flexibilitu a zjednodušuje údržbu kódu.