Junior — Middle
Tendes a usar herança ou composição ao projetar sistemas?
sobes.tech IA
Resposta da IA
Ao projetar sistemas, geralmente dá-se preferência à composição em vez de herança.
Porquê?
- A herança cria uma hierarquia rígida que pode levar a problemas ao fazer alterações e ao complicar o código.
- A composição permite criar objetos a partir de componentes, tornando o sistema mais flexível e extensível.
Por exemplo, em vez de criar uma classe "Pássaro" e herdar dela "PássaroVoador" e "PássaroQueCorre", é melhor criar uma classe "Pássaro" que contenha objetos de comportamento (por exemplo, voar, correr). Assim, pode-se mudar dinamicamente o comportamento sem alterar a hierarquia.
No iOS, costuma-se usar protocolos e delegados, o que é uma forma de composição.
Exemplo em Swift:
protocol Flyable {
func fly()
}
class Bird {
var flyingAbility: Flyable?
func performFly() {
flyingAbility?.fly()
}
}
class CanFly: Flyable {
func fly() {
print("Estou a voar")
}
}
class CannotFly: Flyable {
func fly() {
print("Não posso voar")
}
}
let sparrow = Bird()
sparrow.flyingAbility = CanFly()
sparrow.performFly() // Estou a voar
let penguin = Bird()
penguin.flyingAbility = CannotFly()
penguin.performFly() // Não posso voar
Desta forma, a composição oferece maior flexibilidade e simplifica a manutenção do código.