DEV Community

Cover image for Entendendo Herança e Composição
Igor Oliveira
Igor Oliveira

Posted on

Entendendo Herança e Composição

A programação orientada a objetos é uma parte importante e muitas vezes necessária na formação de um programador. Um dos conceitos fundamentais dessa abordagem é a herança, que nos permite reutilizar código em nossos projetos, dentre outras coisas. No entanto, além da herança, existe outro conceito básico que pode ajudar no desenvolvimento de aplicações, a composição. Mas qual a diferença entre herança e composição? A diferença está na forma como uma classe interage com outras classes dentro do código.

A herança é um mecanismo em POO onde uma classe herda propriedades e métodos e outra classe permitindo a criação de hierarquia de classes, onde uma classe filho (subclasse) é derivada de uma classe mais geral, ou classe pai (Superclasse):

Exemplo de herança

No exemplo acima, a classe 'Gato' herda todos os atributos e métodos da classe 'Animal' além de possuir seu próprio atributo e método chamado "raça".

Pro outro lado, a composição é um mecanismo em POO que cria uma relação do tipo 'tem-um' com outra classe:

Image Exemplo de composicao

No exemplo acima, temos uma classe chamada 'Motor' e logo em seguida uma classe chamada 'Carro'. O que é importante notar aqui é que a classe 'Carro' não estende a classe 'Motor', mas sim cria uma instância da mesma para ser um de seus membros. Assim, a classe 'Carro' terá seus próprios métodos e também poderá acessar os métodos da classe 'Motor' por meio dessa instância criada.

Entre os exemplos do uso de herança, podemos citar:

  • A reutilização de código através de uma classe já existente.
  • A criação de uma classe genérica que pode ser usada como base para outras classes.
  • Definir uma hierarquia de classes dentro do código.

Já os exemplos de uso da composição, podemos citar:

  • A criação de objetos complexos através de objetos mais simples.
  • A possibilidade de combinar funcionalidades de classes diferentes em um único objeto.
  • Permitir a reutilização de código sem a necessidade de criar hierarquias de classes.

A principal diferença entre herança e composição é que a herança é uma relação do tipo "é-um", enquanto a composição é uma relação do tipo "tem-um". Em outras palavras, na herança, uma classe é um tipo de outra classe (ex: Gato é um tipo de Animal), enquanto na composição, uma classe possui objetos de outras classes (ex: Carro tem um Motor).

Top comments (2)

Collapse
 
nivandosoares profile image
Nivando Soares

Muito bom! Tava procurando uma boa explicação disso pra typescript porque tô aprendendo agora, parabéns

Collapse
 
oliverigor27 profile image
Igor Oliveira

Obrigado , fico feliz que gostou :)