Sobes.tech
Junior — Middle

Ben je geneigd om overerving of compositie te gebruiken bij het ontwerpen van systemen?

sobes.tech AI

Antwoord van AI

Bij het ontwerpen van systemen wordt meestal de voorkeur gegeven aan compositie boven erfelijkheid.

Waarom?

  • Erfelijkheid creëert een strikte hiërarchie die problemen kan veroorzaken bij wijzigingen en het complexer maken van de code.
  • Compositie stelt je in staat om objecten te maken uit componenten, waardoor het systeem flexibeler en uitbreidbaarder wordt.

Bijvoorbeeld, in plaats van een klasse "Vogel" te maken en hiervan "VliegendeVogel" en "LopendeVogel" te erven, is het beter om een klasse "Vogel" te maken die gedragsobjecten bevat (bijvoorbeeld vliegen, rennen). Zo kan je gedrag dynamisch veranderen zonder de hiërarchie te wijzigen.

In iOS worden vaak protocollen en delegates gebruikt, wat een vorm van compositie is.

Voorbeeld in Swift:

protocol Flyable {
    func fly()
}

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

class CanFly: Flyable {
    func fly() {
        print("Ik vlieg")
    }
}

class CannotFly: Flyable {
    func fly() {
        print("Ik kan niet vliegen")
    }
}

let sparrow = Bird()
sparrow.flyingAbility = CanFly()
sparrow.performFly() // Ik vlieg

let penguin = Bird()
penguin.flyingAbility = CannotFly()
penguin.performFly() // Ik kan niet vliegen

Op deze manier biedt compositie meer flexibiliteit en vereenvoudigt het onderhoud van de code.