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.