Prof. Rodrigo Vilar rvilar@gmail.com Herana versus Composio So dois mecanismos para reutilizar funcionalidade Composio estende as responsabilidades de uma classe pela delegao de trabalho para outro objeto Herana estende atributos e mtodos de uma classe Herana versus Composio Herana era considerada a ferramenta bsica de extenso e reuso de funcionalidade Hoje, considera-se que a composio muito superior herana na maioria dos casos o Mas herana deve ser utilizada em alguns contextos Composio - Exemplo Domnio de endereos o Uma empresa tem um endereo o Podemos deixar o objeto empresa responsvel pelo objeto endereo Herana - Exemplo Atributos, conexes a objetos e mtodos comuns esto na superclasse (classe de generalizao) Os outros atributos, conexes e mtodos so adicionados nas subclasses (classes de especializao) Ex: Domnio de reserva e compra de passagens de avio Herana - Vantagens Captura o que comum (Superclasse) e o isola daquilo que diferente (Subclasses) A herana vista diretamente no cdigo Herana - Desvantagens O encapsulamento entre superclasses e subclasses fraco o Alto acoplamento o Mudanas na superclasse podem afetar todas as subclasses The weak base-class problem o Viola o padro Baixo Acoplamento Herana - Desvantagens Herana um relacionamento esttico o s vezes um objeto precisa ser de uma classe diferente em momentos diferentes o Com herana, a estrutura est parafusada no cdigo e no pode sofrer alteraes facilmente em tempo de execuo Herana - Desvantagens Exemplo: pessoas envolvidas na aviao o Uma pessoa pode assumir mais de um papel o Herana dificulta esse tipo de funcionalidade Resolvendo o problema com Composio Uma Pessoa com vrios Papeis possveis Delegao Quando dois objetos esto envolvidos em atender um pedido o Por exemplo, setNome() Delegao sempre pode ser usada para substituir herana Em vez de tripulao ser uma pessoa, ele tem uma pessoa Delegao A grande vantagem da delegao que o comportamento pode ser escolhido em tempo de execuo e vez de estar amarrado em tempo de compilao A grande desvantagem que um software muito dinmico e parametrizado mais difcil de entender do que software mais esttico Cinco regras para o uso de Herana 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 papeis, transaes ou dispositivos Exerccio Aplicar as cinco regras no exemplo de Tripulao, Passageiro e Agente Aplicar as cinco regras no cenrio de reserva e compra de passagens: