🚀 Capítulo 12: A Força das Interfaces

NOTE

Este capítulo utiliza a temática de Star Wars para explicar as Classes Abstratas (Interfaces) em Python usando o módulo abc. Aprenda a criar contratos que suas classes devem seguir!


🎯 Objetivo da Aula

Compreender o conceito de Classes Abstratas em Python, aprendendo a usar o módulo abc para criar métodos abstratos que servem como um “contrato” obrigatório para as classes filhas.

🏢 O Cenário Prático (Seu Desafio)

Na Ordem Jedi, existem regras estritas que todos os cavaleiros devem seguir. Não importa se você é o Yoda, o Luke ou o Obi-Wan: todo Cavaleiro Jedi deve saber usar a Força e deve saber empunhar um sabre de luz. O mestre apenas define a regra, mas cada Jedi executa do seu próprio jeito!

No Python, não temos a palavra-chave interface como no Java ou PHP. Nós usamos as Classes Abstratas.

  • Uma classe abstrata é um modelo que não pode ser criado diretamente (não podemos criar um “Jedi genérico”).
  • Ela serve apenas para dizer quais métodos as classes filhas são obrigadas a criar. Seu desafio é ditar as regras da Força!

🧠 Fundamentos: A Teoria Traduzida

🌌 1. O Módulo abc:

Para criar uma classe abstrata, precisamos importar o módulo abc (Abstract Base Classes) que já vem no Python.

from abc import ABC, abstractmethod
 
 
class CavaleiroJedi(ABC):
 
    @abstractmethod
    def usar_forca(self):
        pass
 
    @abstractmethod
    def lutar(self):
        pass
  • O @abstractmethod avisa o Python que quem herdar essa classe precisa escrever o código dessas funções!

📖 Exemplo Guiado: O Treinamento Jedi

Vamos criar uma classe que herda de CavaleiroJedi. Se não criarmos os métodos obrigatórios, o Python dará um erro!

from abc import ABC, abstractmethod
 
 
class CavaleiroJedi(ABC):
 
    @abstractmethod
    def usar_forca(self):
        pass
 
 
class Luke(CavaleiroJedi):
 
    def usar_forca(self):
        print("Luke usou a Força para mover as pedras!")
 
 
# Funciona! Criamos o método obrigatório.
jedi = Luke()
jedi.usar_forca()

🛠️ Prática Obrigatória 1: Criando a Regra

  1. Escreva uma classe abstrata chamada Nave (herdando de ABC) que tenha um método abstrato decorado com @abstractmethod chamado voar.

🛠️ Prática Obrigatória 2: O Erro

  1. O que acontece no Python se você tentar criar um objeto diretamente de uma classe abstrata (exemplo: nave = Nave())?

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

Neste curso, você entregará suas atividades enviando o código para o seu repositório no GitHub usando o aplicativo GitHub Desktop. Siga o passo a passo detalhado:

  1. Verifique a estrutura: Certifique-se de que sua estrutura de pastas final está idêntica à mostrada abaixo.
  2. Abra o GitHub Desktop: Certifique-se de que o repositório do seu curso está selecionado no canto superior esquerdo.
  3. Visualize as alterações: Na aba Changes (à esquerda), você verá todos os arquivos que criou ou modificou nesta aula.
  4. Faça o Commit:
    • No campo Summary (na parte inferior esquerda), digite uma mensagem curta descrevendo o que fez, ex: Finaliza atividades do Capítulo.
    • Clique no botão azul Commit to main (ou o nome da sua branch).
  5. Envie para a Nuvem (Push): No topo da tela, clique no botão Push origin. Isso enviará seu código do seu computador para o seu perfil no GitHub.
  6. ⚠️ IMPORTANTE (Repositório Público): Para que o professor consiga corrigir, o seu repositório no GitHub DEVE SER PÚBLICO. Repositórios privados não podem ser visualizados por quem não foi convidado.
  7. Como entregar no Microsoft Teams:
    • Copie o link do seu repositório no GitHub (ex: https://github.com/seu-usuario/seu-repositorio).
    • Abra a tarefa correspondente no Microsoft Teams.
    • Clique no botão Adicionar trabalho (ou Add work).
    • Selecione a opção Link no menu lateral.
    • Cole o link do GitHub no campo “Endereço Web” e digite um texto (ex: Meu Repositório) no campo “Texto a ser exibido”.
    • Clique em Anexar.
    • MUITO IMPORTANTE: Clique no botão Entregar (ou Turn in) no canto superior direito para concluir o envio!

📂 Estrutura de Pastas

spec_backend_com_python_e_fastapi/
├── capitulos/
│   └── capitulo_12_star_wars.md

💡 Checkpoint de Lógica

As classes abstratas são ótimas para grandes projetos em equipe. Elas garantem que nenhum programador esqueça de criar os métodos essenciais que o sistema precisa para funcionar!

🔥 Desafio de Fixação (Opcional)

Pesquise sobre o conceito de Duck Typing em Python e como ele permite usar objetos sem que eles necessariamente precisem herdar da mesma classe abstrata (Dica: “Se anda como um pato e faz quack como um pato…”).

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

from abc import ABC, abstractmethod
 
 
class Nave(ABC):
 
    @abstractmethod
    def voar(self):
        pass

Gabarito da Prática 2:

  1. O Python vai dar um erro do tipo TypeError, dizendo que não é possível instanciar a classe abstrata com métodos abstratos.

Capitulo Anterior | Proximo Capitulo