O polimorfismo é um conceito fundamental na programação orientada a objetos (POO), presente de forma robusta em Python. A palavra "polimorfismo" deriva do grego: "poli" significa "muitos" e "morfismo" significa "formas". Em termos simples, polimorfismo refere-se à capacidade de diferentes classes de responderem de maneira diferente à mesma funcionalidade (método).
Entendendo o Polimorfismo em Python
No contexto de Python, polimorfismo permite que uma interface tenha múltiplas implementações. Isto é, diferentes classes podem implementar métodos com o mesmo nome, mas as ações específicas desses métodos podem variar conforme a classe.
Vamos ver um exemplo prático para compreender melhor.
Exemplo Prático: Animais e Sons
Imaginemos que estamos a criar um programa que envolve diferentes tipos de animais que podem emitir sons. Vamos definir uma classe base Animal
e duas classes derivadas Cao
e Gato
.
Primeiro, criamos a classe base Animal
.
class Animal:
def som(self):
pass
Nas sub-classes, Cao
e Gato
, implementamos o método som
de maneira específica para cada animal.
class Cao(Animal):
def som(self):
return "Woof!"
class Gato(Animal):
def som(self):
return "Miau!"
Agora, podemos exemplificar como o polimorfismo funciona ao utilizar a mesma interface para diferentes tipos de objetos.
def ouvir_som(animal):
print(animal.som())
cao = Cao()
gato = Gato()
ouvir_som(cao) # Isto imprime: Woof!
ouvir_som(gato) # Isto imprime: Miau!
Neste exemplo, o método ouvir_som
utiliza o conceito de polimorfismo para chamar o método som
dos objetos cao
e gato
. Embora ambos os objetos respondam à mesma mensagem (som
), eles fazem-no de formas diferentes, de acordo com a implementação específica de cada classe.
Polimorfismo com Métodos de Classe
O polimorfismo aumenta as capacidades do nosso código. Ele permite, por exemplo, que adicionemos novas classes sem alterar o código que utiliza a classe base. Vamos imaginar que queremos adicionar outro animal, um Passaro
.
class Passaro(Animal):
def som(self):
return "Piu piu!"
Podemos então adicionar este novo animal ao nosso programa sem modificar a função ouvir_som
.
passaro = Passaro()
ouvir_som(passaro) # Isto imprime: Piu piu!
Polimorfismo e Herança
Além disso, o polimorfismo funciona em conjunto com a herança, facilitando a leitura e manutenção do código. Como as sub-classes de Animal
herdam o método som
, podemos modificar ou estender o comportamento destes métodos, mantendo o nosso código principal limpo e organizado.
Resumo
Neste capítulo, explorámos o conceito de polimorfismo na programação orientada a objetos com Python. Vimos como diferentes classes podem implementar métodos com o mesmo nome e interfaces, permitindo que objetos comportem-se de maneira diversa consoante a sua classe específica. Polimorfismo é essencial para criar código extensível e fácil de manter.
Quiz
Para testar a sua compreensão do polimorfismo, responda às perguntas abaixo:
-
O que é polimorfismo na programação orientada a objetos?
- A) A capacidade de um método ter múltiplos nomes.
- B) A capacidade de diferentes classes implementarem métodos com o mesmo nome de maneiras diferentes.
- C) A capacidade de uma classe herdar métodos de outra classe.
- D) Uma técnica para otimizar a execução de código.
-
Considere o seguinte código. Qual será a saída?
class Veiculo: def tipo(self): return "Veículo" class Carro(Veiculo): def tipo(self): return "Carro" class Bicicleta(Veiculo): def tipo(self): return "Bicicleta" def identificar_veiculo(veiculo): print(veiculo.tipo()) carro = Carro() bicicleta = Bicicleta() identificar_veiculo(carro) # Saída? identificar_veiculo(bicicleta) # Saída?
- A) Veículo, Veículo
- B) Carro, Bicicleta
- C) Veículo, Carro
- D) Carro, Veículo
-
Como o polimorfismo pode beneficiar a manutenção do código?
- A) Permite a criação de métodos complexos.
- B) Facilita a adição de novas funcionalidades sem modificar o código existente.
- C) Garante que todas as classes tenham só um método.
- D) Faz o código executar mais rapidamente.
-
Qual a relação entre herança e polimorfismo?
- A) Polimorfismo não pode ser usado se houver herança.
- B) Polimorfismo é um tipo de herança.
- C) Herança permite que sub-classes usem métodos comuns, enquanto polimorfismo permite que esses métodos sejam implementados de formas diferentes em cada sub-classe.
- D) Não há relação entre herança e polimorfismo.