Você está na página 1de 3

Verso para impresso: Herana versus Composio: qual uti...

www.devmedia.com.br

http://www.devmedia.com.br/articles/viewcomp_forprint.as...

[verso para impresso]

Herana versus Composio: qual utilizar?


Veja o que Herana, o que Composio, quais as vantagens e desvantagens de utilizar cada uma e quando e em que contexto devemos us-las.

Introduo
Primeiramente necessrio entender o que Composio e o que Herana. Composio e Herana so dois mecanismos para reutilizar funcionalidades. A herana sempre foi considerada uma ferramenta bsica de extenso e reuso de funcionalidade e se d estendendo atributos e mtodos de uma classe. Segue abaixo um diagrama de classe exemplificando o uso de Herana.

Figura 1: Exemplo de Herana O diagrama de classe acima seria implementado em Java conforme o cdigo na listagem abaixo: Listagem 1: Exemplo de herana de classes em Java.
public class Animal { } public class Cachorro extends Animal { } public class Gato extends Animal { }

Acima tem-se a definio de Animal que a superclasse e das classes Cachorro e Gato que herdam tudo da classe Animal. Neste exemplo na classe Animal no tem nada, porm se tivesse atributos ou mtodos eles seriam Herdados pelas suas subclasses Cachorro e Gato. Vale salientar que devemos atentar para a visibilidade dos atributos e mtodos no caso da Herana, lembre-se que tudo que privado no herdado, pois pertence unicamente classe detentora. Na herana temos o conceito de uma Classe Pai, Classe Base ou Superclasse (todas essas nomenclaturas denotam a mesma coisa) que a classe que foi herdada pelas subclasses. A Classe Filha ou Subclasse a classe que herda da classe Pai. Outros dois conceitos que temos na Herana a Generalizao onde se obtm similaridades entre classes e dessa forma define-se novas classes. As classes mais genricas so as classes Pai. E a Especializao onde Identifica-se atributos e mtodos no correspondentes entre classes distintas colocando-os na classe filha. Ou seja, quando se tem similaridades entre as classes procura-se generaliz-las levando suas similaridades para a classe pai onde as classes filhas iro herdar essa similaridade. Por outro lado quando temos atributos e mtodos no correspondentes nas classes filhas

1 de 3

09-04-2013 08:34

Verso para impresso: Herana versus Composio: qual uti...

http://www.devmedia.com.br/articles/viewcomp_forprint.as...

colocamos essas no correspondncias nas classes filhas mais especficas que iro usar esses atributos e mtodos. Normalmente na Herana usamos o termo " um". Por exemplo, podemos dizer que um carro UM automvel, portanto temos que um carro herda os atributos e mtodos de um automvel, assim como um caminho tambm UM automvel. Neste exemplo temos uma hierarquia de herana onde um Carro e um Caminho herdam atributos e mtodos comuns entre eles que esto definidos numa superclasse Automovel. Para o exemplo acima a herana tambm vlida pois Cachorro UM Animal e Gato tambm UM Animal. A composio por sua vez estende uma classe pela delegao de trabalho para outro objeto. Na composio ao invs de codificarmos um comportamento estaticamente, como feito com o uso de herana, definimos pequenos comportamentos padro e usamos composio para definir comportamentos mais complexos. Na composio agora podemos mudar a associao entre classes em tempo de execuo, assim um objeto pode assumir mais de um comportamento. O Diagrama de classe abaixo mostra um exemplo de composio onde um Sistema composto de uma Pessoa.

Figura 2: Exemplo de composio O diagrama de classe acima seria implementado em Java conforme o cdigo na listagem abaixo: Listagem 2: Exemplo de composio em Java.
public class Sistema { Pessoa pessoa = new Pessoa(); } public class Pessoa { }

Na composio temos uma instncia da classe existente sendo usada como componente da outra classe. A composio usa o termo TEM UM. Por exemplo, podemos dizer que um carro TEM UM pneu, neste exemplo temos a definio de uma composio.

Benefcios e Problemas da Herana


Um dos benefcios da Herana que ela captura o que comum e o isola daquilo que diferente, alm disso, a herana vista diretamente no cdigo at mesmo devido a sua natureza esttica. Entre os problemas da Herana est o fraco encapsulamento entre classes e subclasses e o forte acoplamento entre elas onde ao mudar uma superclasse pode afetar todas as subclasses alm de violar o princpio bsico de projeto OO em que devemos ter sempre um baixo acoplamento entre as classes. Alm disso, algumas vezes um objeto precisa ser de uma classe diferente em momentos diferentes o que no possvel com a herana, pois o cdigo no pode sofrer alteraes facilmente em tempo de execuo, portanto tem-se que a herana um relacionamento esttico.

Benefcios e Problemas da Composio


A grande vantagem da Composio que o comportamento pode ser escolhido em tempo de execuo em vez de estar amarrado em tempo de compilao. Alm disso, os objetos que foram instanciados e esto contidos na classe que os instanciou so acessados somente atravs de sua interface seguindo assim o

2 de 3

09-04-2013 08:34

Verso para impresso: Herana versus Composio: qual uti...

http://www.devmedia.com.br/articles/viewcomp_forprint.as...

princpio de programar para uma interface e no para uma implementao. A composio tambm apresenta uma menor dependncia de implementaes e temos cada classe focada em apenas uma tarefa seguindo outro principio da responsabilidade nica. Por fim, a composio tambm tem um bom encapsulamento onde os detalhes internos dos objetos instanciados no so visveis. A grande desvantagem que um software muito dinmico e parametrizado mais difcil de entender do que software mais esttico.

Quando usar Composio ou Herana


De forma geral prefira utilizar sempre a Composio em relao Herana, no entanto pode-se definir algumas regras para identificar quando podemos usar a Herana de forma que no tenhamos os problemas que ela acarreta. Utiliza-se a herana se uma instncia de uma classe Filha nunca precisar tornar-se um objeto de outra classe, se a hierarquia de herana representar um relacionamento " um" e no um relacionamento "Tem um", se deseja-se ou precisa-se realizar alteraes globais para as suas classes filhas alterando uma classe Pai, ou ento quando a classe filha estender ao invs de substituir total ou parcialmente as responsabilidades da classe Pai.

Concluso
De forma geral a herana deve ser pouco utilizada. Atualmente a composio considerada muito superior herana na maioria dos casos pois entre as suas principais vantagens a composio permite mudar a associao entre classes em tempo de execuo, os objetos podem assumir mais de um comportamento, os projetos so mais simples e reutilizveis, alm de descartar os problemas envolvendo a herana como o acoplamento entre as classes e outros problemas discutidos. A composio utilizada em diversos Padres de Projetos comprovando assim a sua grande utilidade e uso no desenvolvimento de projetos melhores.

Bibliografia
Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra. Head First Design Patterns. O'Reilly Media, 2004.

por HIGOR MEDEIROS


Higor Medeiros (higorowen@gmail.com) aluno da Universidade do Vale do Rio dos Sinos em Cincia da Computao cursando o 4 semestre, onde tambm trabalha na pesquisa cientfica na rea de inteligncia artificial com Processamento de Linguagem Natural, desde 2004. programador em diversas linguagens, tendo mais experincia em C# onde hoje desenvolve softwares para PLN. www.devmedia.com.br/articles/viewcomp.asp?comp=26145

3 de 3

09-04-2013 08:34