You are on page 1of 19

Herana vs

Composio
Qual devo usar?
Composio e Herana
So dois mecanismos para reutilizar funcionalidade;

Alguns anos atrs 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;


Composio e Herana

Hoje, considera-se que a composio muito superior herana na


maioria dos casos;

A herana deve ser utilizada em alguns (relativamente poucos) contextos.


Um exemplo de composio
Use composio para estender as responsabilidades pela delegao de
trabalho a outros objetos;
Um exemplo no domnio de endereos:
Uma empresa tem um endereo (digamos s um);

Uma empresa "tem" um endereo;

Podemos deixar o objeto empresa responsvel pelo objeto endereo e temos agregao
composta (composio)
Um exemplo de composio
Um exemplo de herana
Atributos, conexes a objetos e mtodos comuns vo na superclasse
(classe de generalizao);
Adicionamos mais dessas coisas nas subclasses (classes de
especializao);
Trs situaes comuns para a herana (figura abaixo):
Uma transao um momento notvel ou intervalo de tempo.
Mais um exemplo de herana

Exemplo no domnio de
reserva e compra de
passagens de avio
Benefcios da herana

Captura o que comum e o isola daquilo que diferente


A herana vista diretamente no cdigo
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;


Cenrio:
Pessoas envolvidas na aviao;
Problema:
uma pessoa pode mudar
de papel a assumir
combinaes de papis;
Fazer papis mltiplos
requer 7 combinaes
(subclasses).
Solucionando o problema
com composio
uma pessoa e vrios
papis possveis
Estamos estendendo a funcionalidade de Pessoa de vrias formas, mas
sem usar herana;
Observe que tambm podemos inverter a composio (uma pessoa tem
um ou mais papis)
Aqui, estamos usando delegao:
Dois objetos esto envolvidos em atender um pedido (por exemplo 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;


Aqui, estamos usando delegao:
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 no estando amarrado em tempo de compilao;

A grande desvantagem que um software muito dinmico e parametrizado mais


difcil de entender do que software mais esttico.
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);
Gera menos acoplamento do que a herana;
5 regras para o uso de herana (Coad)
O objeto " um tipo especial de" e no "um papel assumido por";
O objeto nunca tem que mudar para outra classe;
A subclasse estende a superclasse mas no faz override ou anulao de
variveis e/ou mtodos;
No uma subclasse de uma classe "utilitria";
Para classes do domnio do problema, a subclasse expressa tipos
especiais de papis, transaes ou dispositivos.
Exemplo da aplicao das regras
Considere Agente, Tripulao e Passageiro como subclasses de Pessoa

Regra 1: (tipo especial): no passa. Um Passageiro no um tipo especial de


Pessoa: um papel assumido por uma Pessoa

Regra 2: (mutao): no passa. Um Agente pode se transformar em Passageiro


com tempo

Regra 3: (s estende): ok.

Regra 4: ok.

Regra 5: no passa. Passageiro est sendo modelado como tipo especial de Pessoa
e no como tipo especial de papel
Outro exemplo: transaes
Reserva e Compra podem herdar de Transao?

Regra 1 (tipo especial):


Regra 2 (mutao):
Regra 3 (s estende):
Regra 4 (no estende classe utilitria):
Regra 5 (tipo especial de
papel/transao/dispositivo):

You might also like