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.