Exemplos de Polimorfismo

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

  1. O que é polimorfismo na programação orientada a objetos?
  2. Como o polimorfismo aumenta a flexibilidade do código?
  3. Escreva um exemplo de código onde uma classe base e duas classes derivadas usem um método comum de maneiras diferentes.
  4. Considere as classes Veiculo, Carro e Bicicleta. Explique como o método mover pode ser polimórfico.
  5. Qual é a principal vantagem de usar polimorfismo em projetos de software?
<< Polimorfismo em Python Índice Projeto Prático: Sistema... >>