DEV Community

Danilo Maia Florenzano
Danilo Maia Florenzano

Posted on

POO: Herança versus Composição

Como decidir

Usar herança quando precisar de:

  • reaproveitamento de código
  • polimorfismo

Usar composição quando precisar de:

  • reaproveitamento de código

Usar uma interface quando precisar de:

  • polimorfismo

Ou seja, a herança é bem vinda quando, e somente quando, as duas necessidades forem verdade. Do contrario, prefira sempre composição.

É importante ressaltar que a herança pode levar a um acoplamento mais forte entre as classes, o que pode dificultar a manutenção e evolução do código.
A composição, por outro lado, promove um acoplamento mais fraco, permitindo maior flexibilidade e reutilização de componentes. Por isso, muitos autores recomendam a composição como uma abordagem preferencial na Programação Orientada a Objetos.

Exemplo

No exemplo da imagem, a herança não é justificada porque nenhuma das classes herdeiras sobrescreve o método da classe principal (polimorfismo), apenas é reaproveitado o Metodo1() (reaproveitamento de código).
Nesse caso, como apenas um dos requisitos é preenchido, é melhor usar composição.

Exemplo de composição

Há também a abordagem de não usar herança mesmo em casos que preencham os dois requisitos. Pois ambos podem ser satisfeitos através da combinação de interfaces e composição.

Exemplo de composição com interface

Referência

Only Use Inheritance If You Want Both of These - by Christopher Okhravi

Top comments (0)