Sobes.tech
Junior — Middle

Ești înclinat să folosești moștenirea sau compoziția la proiectarea sistemelor?

sobes.tech AI

Răspuns de la AI

În proiectarea sistemelor, de obicei, se preferă compoziția în locul moștenirii.

De ce?

  • Moștenirea creează o ierarhie rigidă, care poate duce la probleme în timpul modificărilor și complicării codului.
  • Compoziția permite crearea de obiecte din componente, făcând sistemul mai flexibil și extensibil.

De exemplu, în loc să creați o clasă "Pasăre" și să moșteniți de la ea "PasăreZburătoare" și "PasăreCareAleargă", este mai bine să creați o clasă "Pasăre" care conține obiecte de comportament (de exemplu, zbor, alergare). Astfel, puteți schimba comportamentul dinamic fără a modifica ierarhia.

În iOS, se folosesc adesea protocoale și delegați, ceea ce reprezintă o formă de compoziție.

Exemplu în Swift:

protocol Flyable {
    func fly()
}

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

class CanFly: Flyable {
    func fly() {
        print("Eu zbor")
    }
}

class CannotFly: Flyable {
    func fly() {
        print("Nu pot zbura")
    }
}

let sparrow = Bird()
sparrow.flyingAbility = CanFly()
sparrow.performFly() // Eu zbor

let penguin = Bird()
penguin.flyingAbility = CannotFly()
penguin.performFly() // Nu pot zbura

Astfel, compoziția oferă o flexibilitate mai mare și simplifică întreținerea codului.