Fala, meu cod3r e minha cod3r. Como estamos? Espero que bem, pois hoje vou abordar talvez o principal pilar da orientação a objetos: o polimorfismo.

Vamos entender que problema essa ferramenta resolve, explicar suas características e mostrar tudo isso em código. Vou usar C++, mas se você não conhece a linguagem, não há problema, foque nos conceitos. Vamos lá!

O que é o polimorfismo?

Primeiramente, o que é polimorfismo? A própria palavra já diz muito: o prefixo grego “poli” nos remete a algo que tem vários de alguma coisa, uma pessoa poliglota fala várias línguas, por exemplo.

No caso do polimorfismo não é diferente, pois algo polimórfico assume diferentes formas. Ou seja, polimorfismo é uma mesma coisa que assumir várias formas. E por que isso seria importante na programação? Porque com o paradigma orientado a objetos, podemos ter classes assumindo diferentes funcionalidades enquanto compartilham de uma classe mãe ou interface em comum.

Tudo bem até aqui? Então agora vamos ver em código!

Criando a classe mãe Animal

A classe a seguir, na figura 1, representa um animal qualquer. O que todo animal faz? Um som. Assim, vejamos como ficaria:

figura1
figura1

Já que todo animal faz um som, o método, se chamado de um objeto da classe mãe fazerSom() vai retornar uma mensagem genérica.

Criando as classes filha

A seguir, as classes na figura 2, representam as classes filha da classe Animal. Aqui eu criei 3 tipos específicos de animais: Galinha, Cachorro e Gato.

figura 2

Por serem filhas, elas herdam os métodos da mãe. Faz sentido, não? Porém, cada animal desse faz um som diferente, então simplesmente reescrevemos o método fazerSom() para diferentes animais.

Testando o código

figura 3

Por último, na figura 3 testamos nosso código. Foram instanciados objetos de todas as classes criadas. No entanto, o método comum a todos retorna um som diferente para cada um desses objetos. Isso, então, é polimorfismo. Mais especificamente nesse exemplo, um método polimórfico.

Por que polimorfismo é bom?

Mas por que fazer uso dessa abordagem? Ela deixa o código mais modular e mantenível, além de diminuir bruscamente a quantidade de operadores condicionais.

Imagina ter que fazer um if toda vez que fôssemos chamar o método fazerSom()? Quanto mais animais, mais difícil ficaria e, claro, mais suscetível a bugs. Por isso, essa ferramenta talvez seja o principal pilar desse paradigma.

Conclusão

Essa é uma explicação básica para iniciantes no tema, portanto, se tiverem dúvidas ou quiserem dar alguma sugestão de temas de orientação a objetos, deixem nos comentários. Espero que tenha ajudado de alguma forma.

Até mais!