Entendendo o conceito de herança e composição
Veja neste artigo dois dos conceitos mais importantes da modelagem de sistemas orientados a objetos: herança e composição. Muitas vezes, estes dois tipos de relacionamentos são confundidos e tratados como sinônimos.
Introdução
Um conceito que pode ser facilmente confundido por um programador iniciante é o conceito de composição e herança. Muitas vezes acontece de iniciantes apontarem os dois como a mesma coisa, mas ao longo deste artigo veremos que isso não é verdade.
Herança
De modo simplificado, herança é "uma classe (classe filha) que tem os mesmos atributos de outra (classe mãe), mais alguns atributos distintos". Alguns exemplos podem ser vistos abaixo:
Exemplo 1:
Uma classe Cliente que é a classe principal e duas classes filhas da mesma, "Pessoa Física" e "Pessoa jurídica". Neste exemplo, as duas classes podem ser entendidas como um cliente, mas cada uma com alguns atributos a mais.
Figura 1: Diagrama de herança entre classes
Exemplo 2:
Uma classe mãe chamada Automovel tem as seguintes classes filhas: CarroCorrida, CarroAntigo e CarroEsportivo.
Todas as classes filhas podem ser vistas como um Automovel, diferenciando-se umas das outras por apenas alguns atributos adicionais ou não, mas sempre tendo algo em comum, neste caso, a classe mãe Automóvel e seus atributos.
Existe uma pergunta simples para verificar se a relação entre a classe A com a classe B é de herança. Basta fazer a seguinte pergunta a si mesmo: "A classe A é uma classe B?".
Exemplos:
- Um CarroAntigo é um Automovel? SIM – Logo, pode-se usar Herança.
- Uma Casa é um Automovel? NÃO – Logo, não se pode usar Herança.
Composição
Composição é bem mais simples de entender que a herança e acontece quando uma determinada classe A está contida em outra determinada classe B.
Exemplo 1:
No primeiro exemplo existem duas classes distintas a primeira é a classe Carro e a segunda é a classe Motor. Imagine que toda classe Carro tenha uma classe Motor, neste exemplo há uma relação entre Carro e Motor de composição, pois o motor está contido na classe Carro.
Figura 2: Diagrama de composição entre classes
Exemplo 2:
Neste exemplo Livro e Autor são duas classes distintas, onde cada objeto da classe Livro possui um objeto da classe Autor. Neste caso existirá uma relação de composição, pois a classe Autor faz parte da classe Livro.
Figura 3: Diagrama de composição entre classes
Uma pergunta para verificar se uma determinada classe A tem uma relação de composição com uma classe B. Basta fazer a seguinte pergunta: "A classe A está contida na classe B?".
Caso a resposta seja positiva existe uma relação de composição entre as duas classes. Abaixo é possível visualizar alguns exemplos:
- Um Livro tem Autor? - SIM – Logo, se usa a composição.
- Um Automovel tem um CarroAntigo ? - NÂO – Logo, não se usa a composição.
- Um Automovel tem Porta ? - SIM – Logo, pode se usar a composição.
Conclusão
Como foi possível ver ao longo deste artigo a diferença entre herança e composição é bem simples e pode ser resolvida com apenas algumas perguntas simples. Para herança a pergunta é "Classe A é uma classe B" e para composição a pergunta é "A classe A está contida na classe B".
Artigos relacionados
-
Artigo
-
Vídeo
-
Vídeo
-
DevCast
-
DevCast