Junior — Middle
Rendelsz a öröklődés vagy a kompozíció használata felé rendszerek tervezésekor?
sobes.tech MI
Válasz az MI-től
A rendszerek tervezésekor általában a kompozíciót részesítik előnyben az öröklés helyett.
Miért?
- Az öröklés merev hierarchiát hoz létre, ami problémákhoz vezethet a változtatások és a kód bonyolódása során.
- A kompozíció lehetővé teszi, hogy objektumokat komponensekből hozzunk létre, így a rendszer rugalmasabb és bővíthetőbb lesz.
Például ahelyett, hogy egy "Madár" osztályt hoznánk létre és belőle "RepülőMadár" és "FutóMadár" öröklene, jobb, ha egy "Madár" osztályt hozunk létre, amely viselkedési objektumokat tartalmaz (pl. repülés, futás). Így dinamikusan változtathatjuk a viselkedést anélkül, hogy megváltoztatnánk a hierarchiát.
Az iOS-ben gyakran használnak protokollokat és delegáltakat, ami a kompozíció egyik formája.
Swift példával:
protocol Flyable {
func fly()
}
class Bird {
var flyingAbility: Flyable?
func performFly() {
flyingAbility?.fly()
}
}
class CanFly: Flyable {
func fly() {
print("Repülök")
}
}
class CannotFly: Flyable {
func fly() {
print("Nem tudok repülni")
}
}
let sparrow = Bird()
sparrow.flyingAbility = CanFly()
sparrow.performFly() // Repülök
let penguin = Bird()
penguin.flyingAbility = CannotFly()
penguin.performFly() // Nem tudok repülni
Így a kompozíció nagyobb rugalmasságot nyújt és egyszerűsíti a kód karbantartását.