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):
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:
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)
Muito bom! Tava procurando uma boa explicação disso pra typescript porque tô aprendendo agora, parabéns
Obrigado , fico feliz que gostou :)