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.