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.

Diagrama de herança entre classes

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.

Diagrama de composição entre classes

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.

Diagrama de composição entre classes

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".