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:
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.
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
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!