DEV Community

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

Posted on

6 1

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

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post →

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 :)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay