Se você pode dirigir um carro suburbano de 4 portas, também pode dirigir uma caminhonete. Se você dirigiu um carro com motor a combustão, também pode dirigir um carro elétrico.

A forma e o tamanho dos veículos de passageiros podem ser diferentes de um para o outro. O motor que move esses veículos também pode ser completamente diferente. Mas isso não importa para o motorista.

Você apenas entra, aperta o cinto, dá partida no veículo, engata a marcha e dirige. Isso porque carros, caminhões e vans são polimórfico.

Polimorfismo: Dividindo-o

Vejamos a palavra polimorfismo. Você pode dividir em poli, metamorfose, e ismo.

Poli significa muitos, como polígono significa muitos ângulos. Quando usado como substantivo, um metamorfose é uma variante de uma espécie. E ismo pode significar sistema.

Portanto, polimorfismo significa simplesmente um sistema de muitas variações. Isso ainda não diz muito sobre como ele é usado na programação. Essa é a próxima.

Se ele anda como um pato... Por que objetos polimórficos são incríveis

instagram viewer

Ao criar uma classe em seu código que herda de outra classe, você está vinculando a nova classe a um contrato. O contrato estabelece que todas as variáveis ​​e funções do pai também estarão no filho.

Cada veículo tem um volante, pedais de aceleração e freio e uma seta. Você não precisa abrir o capô para dirigir um carro. Tudo o que importa é que seja um carro.

A mesma coisa se aplica a classes que herdam de outras classes. Aqui está um exemplo em TypeScript:


class Vehicle {
_engine privado: string;
_tires privados: número;
construtor (motor: string = "combustão", pneus: número = 4) {
this._motor = motor;
this._tires = pneus;
}
acelerar (velocidade: número) {
console.log ("acelerando a uma velocidade de" + velocidade);
}
freio (pressão: número) {
console.log ("aplicando" + pressão + "pressão");
}
Vire à esquerda() {
console.log ("virar à esquerda");
}
Vire à direita() {
console.log ("virar à direita");
}
}
classe Car extends Vehicle {
}
classe Tesla extends Car {
construtor () {
super ("elétrico");
}
}

Neste exemplo, há um Veículo aula. O Carro classe herda do Veículo aula. E Tesla herda de Carro. Agora vamos criar alguns objetos e examiná-los.

let myCoupe: Car = new Vehicle ();
console.log (meuCoupe);
console.log (myCoupe.constructor.name);
deixe mySedan: Veículo = novo Tesla ();
console.log (mySedan);
console.log (mySedan.constructor.name);
myCoupe.turnLeft ();
mySedan.turnLeft ();

Você pode ver que nós declaramos myCoupe ser um Carro e mySedan ser um Veículo. Então instanciamos myCoupe como um novo Veículo e mySedan como um novo Tesla. Se vocês visite a sandbox do TypeScript e execute o código, você verá que funciona sem erros. E se comporta como você esperaria, com base no contrato.

Em outras palavras, todos os veículos podem virar à esquerda porque herdaram do Veículo aula. O compilador sabe que todo filho de Veículo concordou com o contrato. Portanto, ele assume que está tudo bem, não importa em quais classes os objetos foram digitados ou instanciados.

Isso às vezes é chamado de "digitação de pato". O compilador assume que, se ele anda como um pato e fala como um pato, pode muito bem ser um pato. Assim, o compilador não se preocupa com os detalhes e apenas trata o objeto como um pato.

O polimorfismo torna seu código à prova de balas

Outra vantagem do contrato de polimorfismo é a garantia de que seu código funcionará. Se você digitou fortemente todas as suas variáveis ​​e o que cada função retorna, você sabe que todos os filhos sempre corresponderão a variáveis, funções e tipos.

Isso significa que você pode adicionar e alterar o código em suas classes sem quebrar seu programa. Cada objeto que faz referência a um Veículo objeto sempre obterá dados e funcionalidades que atendam às expectativas, não importa o quanto Carro mudanças.

O código dentro da função pode não apresentar os resultados corretos. Mas esse é um tipo diferente de problema. Contanto que a função siga o contrato e retorne o tipo de variável esperado, não resultará em um erro de quebra de código.

O polimorfismo é enorme e aqui estão mais 10 princípios de programação que você deve saber.

Praticar polimorfismo

  • Use o link da sandbox acima para criar um Barco aula.
  • Instancie um novo objeto de barco de tal forma que seja um Veículo digite, mas ainda se parece com um barco.
  • Certifique-se de que o barco ainda se comporte como um veículo.

Um exemplo final de polimorfismo

O polimorfismo pode ser um conceito difícil de entender inicialmente. Mas, depois de obtê-lo, você deu um grande passo para entender o que realmente significa a programação orientada a objetos. O conceito ainda pode parecer teórico, no entanto. Portanto, aqui está um exemplo sólido do mundo real para ajudá-lo a ver como ele é útil.

Imagine que você está construindo um aplicativo da web que se conecta a um banco de dados MySQL. Em seguida, o chefe decide mudar para um banco de dados PostgreSQL. Isso significa que você tem que reescrever todas as suas chamadas de banco de dados?

Não, não importa. Se seu aplicativo usa um Acesso de dados classe com subclasses que realmente mexem com os dados, você está com sorte. O Acesso de dados A classe define como seu aplicativo interage com os dados, não como ele interage com o banco de dados.

Você tem subclasses como MySQLAccess e PostgresQLAccess que fazem todo o trabalho sujo. Mas se seu aplicativo tiver apenas Acesso de dados objetos, você pode trocar bancos de dados sem reescrever uma única linha do código do aplicativo.

CompartilhadoTweetE-mail
Como Organizar Seu Código Orientado a Objetos com Herança

Ter a programação orientada a objetos correta significa que você precisa saber sobre herança e como ela pode simplificar a codificação e reduzir erros.

Leia a seguir

Tópicos relacionados
  • Programação
  • Programação
  • Programação Orientada a Objetos
Sobre o autor
Lee Nathan (19 artigos publicados)

Lee é um nômade em tempo integral e um polímata com muitas paixões e interesses. Algumas dessas paixões giram em torno da produtividade, do desenvolvimento pessoal e da escrita.

Mais de Lee Nathan

Assine a nossa newsletter

Junte-se ao nosso boletim informativo para dicas de tecnologia, análises, e-books grátis e ofertas exclusivas!

Clique aqui para se inscrever