Polimorfismo é um dos pilares fundamentais da programação orientada a objetos (POO) e refere-se à capacidade dos objetos de diferentes classes responderem ao mesmo método de maneiras específicas para cada classe. Este conceito permite que um método tenha implementações diferentes dependendo do objeto que o chama, promovendo assim a flexibilidade e reutilização de código.
Exemplos Práticos de Polimorfismo
Vamos explorar alguns exemplos práticos que ilustram a utilização do polimorfismo em Python.
Exemplo 1: Formas Geométricas
Imaginemos que estamos a criar um programa para gerir diferentes formas geométricas. Teremos uma classe base Forma
com um método chamado area
, e teremos classes derivadas Circulo
e Retangulo
que implementam este método de formas diferentes.
import math
class Forma:
def area(self):
pass
class Circulo(Forma):
def __init__(self, raio):
self.raio = raio
def area(self):
return math.pi * self.raio ** 2
class Retangulo(Forma):
def __init__(self, largura, altura):
self.largura = largura
self.altura = altura
def area(self):
return self.largura * self.altura
def mostrar_area(formas):
for forma in formas:
print(f'A área é: {forma.area()}')
formas = [Circulo(5), Retangulo(3, 4)]
mostrar_area(formas)
Neste exemplo, as classes Circulo
e Retangulo
derivam da classe base Forma
, mas implementam o método area
de formas diferentes, refletindo o cálculo de área específico de cada forma. A função mostrar_area
demonstra o polimorfismo ao chamar o método area
de cada instância de Forma
, independentemente de ser um Circulo
ou um Retangulo
.
Exemplo 2: Animais
Consideremos agora um programa para gerir diferentes tipos de animais. Teremos uma classe base Animal
com um método falar
, e classes derivadas Cao
e Gato
que implementam este método de maneiras específicas.
class Animal:
def falar(self):
pass
class Cao(Animal):
def falar(self):
return "Au Au"
class Gato(Animal):
def falar(self):
return "Miau"
def fazer_os_animais_falar(animais):
for animal in animais:
print(f'O animal diz: {animal.falar()}')
animais = [Cao(), Gato()]
fazer_os_animais_falar(animais)
Neste exemplo, as classes Cao
e Gato
implementam o método falar
da sua própria maneira. A função fazer_os_animais_falar
ilustra o polimorfismo ao chamar o método falar
de qualquer instância de Animal
, demonstrando como diferentes objetos podem responder de maneiras distintas ao mesmo método.
Exemplo 3: Veículos
Vamos agora explorar um cenário em que temos diferentes tipos de veículos. Teremos uma classe base Veiculo
com um método mover
, e classes derivadas Carro
e Bicicleta
que implementam este método de formas distintas.
class Veiculo:
def mover(self):
pass
class Carro(Veiculo):
def mover(self):
return "O carro está a mover-se na estrada"
class Bicicleta(Veiculo):
def mover(self):
return "A bicicleta está a mover-se na ciclovia"
def mover_veiculos(veiculos):
for veiculo in veiculos:
print(veiculo.mover())
veiculos = [Carro(), Bicicleta()]
mover_veiculos(veiculos)
Neste exemplo, as classes Carro
e Bicicleta
implementam o método mover
de maneiras específicas para cada tipo de veículo. A função mover_veiculos
exibe o polimorfismo ao invocar o método mover
para cada instância de Veiculo
, mostrando como diferentes veículos podem mover-se de maneiras diferentes.
Resumo
Neste capítulo, explorámos o conceito de polimorfismo e como ele pode ser aplicado em Python através de exemplos práticos. Vimos como o polimorfismo permite a utilização de métodos de maneira genérica, enquanto cada implementação específica depende da classe do objeto. Esta característica da POO promove a flexibilidade e a reutilização do código.
Quiz
- O que é polimorfismo na programação orientada a objetos?
- Como o polimorfismo aumenta a flexibilidade do código?
- Escreva um exemplo de código onde uma classe base e duas classes derivadas usem um método comum de maneiras diferentes.
- Considere as classes
Veiculo
,Carro
eBicicleta
. Explique como o métodomover
pode ser polimórfico. - Qual é a principal vantagem de usar polimorfismo em projetos de software?