🚀 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
@abstractmethodavisa 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
- Escreva uma classe abstrata chamada
Nave(herdando deABC) que tenha um método abstrato decorado com@abstractmethodchamadovoar.
🛠️ Prática Obrigatória 2: O Erro
- 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:
- Verifique a estrutura: Certifique-se de que sua estrutura de pastas final está idêntica à mostrada abaixo.
- Abra o GitHub Desktop: Certifique-se de que o repositório do seu curso está selecionado no canto superior esquerdo.
- Visualize as alterações: Na aba Changes (à esquerda), você verá todos os arquivos que criou ou modificou nesta aula.
- 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).
- No campo Summary (na parte inferior esquerda), digite uma mensagem curta descrevendo o que fez, ex:
- 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.
- ⚠️ 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.
- 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!
- Copie o link do seu repositório no GitHub (ex:
📂 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):
passGabarito da Prática 2:
- O Python vai dar um erro do tipo
TypeError, dizendo que não é possível instanciar a classe abstrata com métodos abstratos.