Junior — Middle
Клоняш се към използването на наследяване или композиция при проектирането на системи?
sobes.tech AI
Отговор от AI
При проектирането на системи обикновено се предпочита композицията пред наследяването.
Защо?
- Наследяването създава строга йерархия, която може да доведе до проблеми при промени и усложняване на кода.
- Композицията позволява създаването на обекти от компоненти, което прави системата по-гъвкава и разширяема.
Например, вместо да създавате клас "Птица" и да наследявате от него "ЛетящаПтица" и "БягащаПтица", по-добре е да създадете клас "Птица", който съдържа обекти за поведение (например, летене, бягане). Така можете динамично да променяте поведението без да променяте йерархията.
В iOS често се използват протоколи и делегати, което е форма на композиция.
Пример на Swift:
protocol Flyable {
func fly()
}
class Bird {
var flyingAbility: Flyable?
func performFly() {
flyingAbility?.fly()
}
}
class CanFly: Flyable {
func fly() {
print("Аз летя")
}
}
class CannotFly: Flyable {
func fly() {
print("Не мога да летя")
}
}
let sparrow = Bird()
sparrow.flyingAbility = CanFly()
sparrow.performFly() // Аз летя
let penguin = Bird()
penguin.flyingAbility = CannotFly()
penguin.performFly() // Не мога да летя
Този подход предоставя по-голяма гъвкавост и улеснява поддръжката на кода.