Sobes.tech
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.