Composição sobre Herança

Definição

Composição sobre herança é um princípio de design que sugere a preferência por montar comportamentos combinando objetos menores (composição), em vez de construir hierarquias complexas de classes com herança.

Em vez de estender uma classe para ganhar funcionalidade, o objeto recebe comportamentos prontos por meio da colaboração com outros objetos.

Por que usar composição

  • Evita hierarquias rígidas e difíceis de manter
  • Aumenta a flexibilidade e reutilização de código
  • Permite combinar funcionalidades de forma mais modular
  • Reduz o acoplamento entre componentes

Composição favorece mudanças e extensões no comportamento sem a necessidade de modificar ou herdar classes existentes.

Exemplo em código (Python)

class Andar:
    def mover(self):
        return "Andando..."

class Voar:
    def mover(self):
        return "Voando..."

class Robo:
    def __init__(self, comportamento):
        self.comportamento = comportamento

    def mover(self):
        return self.comportamento.mover()

robo1 = Robo(Andar())
robo2 = Robo(Voar())

print(robo1.mover())  # Andando...
print(robo2.mover())  # Voando...

Nesse exemplo, o robô recebe seu comportamento por composição. A lógica de mover vem de um objeto passado na criação, sem necessidade de herança.

Comparação com herança

  • Herança estabelece uma relação rígida do tipo “é um”; composição usa relações mais flexíveis, como “tem um” ou “usa um”.
  • Com herança, o comportamento vem da estrutura da classe; com composição, o comportamento é montado a partir de componentes externos.
  • Herança cria acoplamento entre as classes; composição favorece a independência e a modularidade.
  • Herança múltipla pode gerar conflitos e ambiguidade; composição evita esse tipo de problema.

Em muitos casos, a composição é mais adequada para sistemas que precisam ser fáceis de modificar, testar e evoluir.

Relacionados

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com