Você está na página 1de 3

Composio e Herana

Composio e herana so dois mecanismos para reutilizar funcionalidade; Alguns anos atrs (e na cabea de alguns programadores ainda!), a herana era considerada a ferramenta bsica de extenso e reuso de funcionalidade; A composio estende uma classe pela delegao de trabalho para outro objeto a herana estende atributos e mtodos de uma classe; Hoje, considera-se que a composio muito superior herana na maioria dos casos; A herana deve ser utilizada em alguns (relativamente poucos) contextos. Vamos portanto desinflar um pouco a bola da herana ;

Problemas da herana

O encapsulamento entre classes e subclasses fraco (o acoplamento forte) Mudar uma superclasse pode afetar todas as subclasses; Isso viola um dos princpios bsicos de projeto O-O (manter fraco acoplamento). s vezes um objeto precisa ser de uma classe diferente em momentos diferentes Com herana, a estrutura est parafusada no cdigo e no pode sofrer alteraes facilmente em tempo de execuo; A herana um relacionamento esttico que no muda com tempo; Cenrio: pessoas envolvidas na aviao (figura abaixo)

Herana com composio: uma pessoa e vrios papeis possveis


Estamos estendendo a funcionalidade de Pessoa de vrias formas, mas sem usar herana; Pode-se inverter a composio (uma pessoa tem um ou mais papeis); Pense na implicao para a interface de "pessoa"; Aqui, estamos usando delegao: dois objetos esto envolvidos em atender um pedido (digamos setNome) O objeto tripulao (digamos) delega setNome para o objeto pessoa que ele tem por composio; semelhante a uma subclasse delegar uma operao para a superclasse (herdando a operao); Delegao sempre pode ser usada para substituir a herana; Se usssemos herana, o objeto tripulao poderia referenciar a pessoa com this; Com o uso de delegao, tripulao pode passar this para Pessoa e o objeto Pessoa pode referenciar o objeto original se quiser; Em vez de tripulao ser uma pessoa, ele tem uma pessoa; A grande vantagem da delegao que o comportamento pode ser escolhido em tempo de execuo e vez de estar amarrado em tempo de compilao;

O resultado de usar composio

Em vez de codificar um comportamento estaticamente, definimos pequenos comportamentos padro e usamos composio para definir comportamentos mais complexos; De forma geral, a composio melhor do que herana normalmente, pois: Permite mudar a associao entre classes em tempo de execuo; Permite que um objeto assuma mais de um comportamento (ex. papel); Herana acopla as classes demais e engessa o programa

Você também pode gostar