Polimorfismo

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:

  1. 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.
  2. 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
  3. 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.
  4. 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.
<< Herança Índice Tratamento de dados de vá... >>