Capítulo 12: Herança e Polimorfismo 🦸‍♂️⚡

Neste capítulo, vamos aprender como uma classe pode herdar características de outra (Herança) e como objetos de classes diferentes podem responder ao mesmo método de formas diferentes (Polimorfismo), com o tema Liga da Justiça (DC)!


📖 O que é Herança e Polimorfismo?

  • Herança: Permite que uma classe (Filha) herde atributos e métodos de outra classe (Pai). Evita repetição de código.
  • Polimorfismo: Significa “muitas formas”. É a capacidade de um método ter comportamentos diferentes dependendo do objeto que o chama.

Veja o diagrama de herança da nossa Liga da Justiça:

classDiagram
    class Heroi {
        +nome
        +poder
        +usar_poder()
    }
    class Batman {
        +usar_poder()
    }
    class Superman {
        +usar_poder()
    }
    Heroi <|-- Batman
    Heroi <|-- Superman

📖 Exemplo Guiado: Super-Heróis

Vamos criar uma classe pai Heroi e duas classes filhas: Voador e Terrestre.

  1. Crie o arquivo liga_justica.py na pasta src/:
# Classe Pai
class Heroi:
    def __init__(self, nome, poder):
        self.nome = nome
        self.poder = poder
 
    def usar_poder(self):
        print(f"{self.nome} está usando seu poder!")
 
# Classe Filho (Herda de Heroi)
class Batman(Heroi):
    def __init__(self):
        super().__init__("Batman", "Inteligência e Gadgets")
 
    # Polimorfismo (sobrescrevendo o método)
    def usar_poder(self):
        print(f"Batman usa seu cinto de utilidades e ataca com o Batrangue!")
 
class Superman(Heroi):
    def __init__(self):
        super().__init__("Superman", "Super Força e Visão de Calor")
 
    def usar_poder(self):
        print(f"Superman voa e usa sua visão de calor!")
 
# Testando
b = Batman()
s = Superman()
 
b.usar_poder()
s.usar_poder()

🕹️ Como Executar e Testar no VS Code

  1. Abra o arquivo liga_justica.py.
  2. Clique no botão Run Python File.

Resultado Esperado:

Batman usa seu cinto de utilidades e ataca com o Batrangue!
Superman voa e usa sua visão de calor!

🛠️ Prática Obrigatória 1: Velocistas

Crie uma classe Velocista que herda de Heroi. Adicione um método específico chamado correr() que exiba uma mensagem dizendo que o herói está correndo na velocidade da luz (ex: para o Flash).


🛠️ Prática Obrigatória 2: Lanterna Verde

Crie uma classe LanternaVerde que herda de Heroi. Sobrescreva o método usar_poder() para dizer que ele está criando um construto verde com o anel.


🔑 Gabarito de Código

Prática 1: velocistas.py

class Heroi:
    def __init__(self, nome):
        self.nome = nome
 
class Velocista(Heroi):
    def correr(self):
        print(f"{self.nome} está correndo na velocidade da luz!")
 
flash = Velocista("Flash")
flash.correr()

Prática 2: lanterna_verde.py

class Heroi:
    def __init__(self, nome):
        self.nome = nome
    def usar_poder(self):
        pass
 
class LanternaVerde(Heroi):
    def __init__(self):
        super().__init__("Lanterna Verde")
    
    def usar_poder(self):
        print(f"{self.nome} cria um construto verde gigante com o anel!")
 
hal = LanternaVerde()
hal.usar_poder()

📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

(Siga o mesmo padrão do Capítulo 01)


Capitulo Anterior | Proximo Capitulo