JS-0703 - JavaScript Completo ES6 - Extends

JS-0703 - JavaScript Completo ES6 - Extends
Publicado em 12/05/2021 20h22
Visualizações: 1070

Subclasses e herança para criação de objetos

Uma classe pode estender outra classe, permitindo que funções, partes e responsabilidades sejam distribuídos por diferentes pontos da aplicação e que objetos possam ser criados de variadas formas. Neste ponto vale uma leitura no livro "Padrões de Projetos: Soluções Reutilizáveis de Software Orientados a Objetos" por Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides (famoso GOF - Gang of Four).

Quando ocorre a extensão de classes, uma classe que estenda outra, se tornando "classe filha" ou "subclasse", poderá reutilizar métodos e propriedades da classe "pai", desde que estejam acessíveis. O JS em si já é implementado desta forma, permitindo a herança através do protótipo das classes.

Programando com esta percepção, classes podem ficar responsáveis pela construção de determinado objeto ou parte de um outro objeto composto de forma específica, mais genérica, de acordo com seu propósito, e ser utilizado de forma dinâmica, com uma definição mais clara de escopo, facilidade de evolução e manutenção.

Ainda que um projeto tenha mais arquivos (diversas classes com poucas linhas de código) a performance tem uma melhora significativa, devido ao processo de instanciação de objetos ser realizado de forma organizada e controlada.

Estes métodos e atributos, ainda que sejam herdados, poderão ser sobrescritos e manipulados (polimorfismo), sem manipular a classe estendida. A classe que herda, poderá herdar mais de uma classe, ter seus métodos próprios e ser utilizada normalmente de forma mais especializada.

Entrando em algo mais filosófico, o mundo pode ser interpretado como orientado a objeto, sendo as classes grande parte de tudo! Somos um objeto composto de muitas extensões de classes e também somos partes de objetos maiores, assim como uma partícula!

A palavra-chave para a estensão é extends.

Exemplificando de forma bem básica, será criado uma classe "Animalis" (em latim para ser algo mais filosófico), uma classe "Hominum" e um objeto "populus":

JS-0703 - JavaScript Completo ES6 - Extends

Observando o objeto abaixo, é possível visualizar a cadeia de classes que compõem o objeto, os pontos de acesso (prototype) e visibilidade das propriedades.

JS-0703 - JavaScript Completo ES6 - Extends
JS-0703 - JavaScript Completo ES6 - Extends

Para sobrescrever um método, basta que o método da classe filha tenha o mesmo nome do método da classe estendida, pois a prioridade passa a ser o método da classe que instancia diretamente o objeto:

JS-0703 - JavaScript Completo ES6 - Extends

É possível utilizar a palavra-chave super especificando o método da classe pai em uma classe filha em qualquer ponto da classe:

JS-0703 - JavaScript Completo ES6 - Extends

Esse recurso pode ser utilizado quando se deseja sobrescrever um método mas aproveitando algo que ele implementa.

Podemos utilizar também o super para estendermos o método constructor utilizando a propriedade definida na classe pai e propriedades do construtor próprios da classe filha. Sempre que houver um construtor na filha, que utilize também propriedades do pai sem sobrescrever o construtor, deve ser utilizada a extensão, passando a propriedade do pai em seu construtor:

JS-0703 - JavaScript Completo ES6 - Extends

Veja também:

Confira mais artigos relacionados

Este website utiliza cookies próprios e de terceiros a fim de personalizar o conteúdo, melhorar a experiência do usuário, fornecer funções de mídias sociais e analisar o tráfego. Para continuar navegando você deve concordar com nossa Política de Privacidade

Sim, eu aceito. Não, eu não aceito.