🧩 Exercícios: Herança, Polimorfismo, Classes Abstratas (abc.ABC) e MRO
Spec Sistemas Com Python • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 Nível 1: Fundamentos
Problema 09.1 — Classes Abstratas com abc.ABC e @abstractmethod
Contexto: Classes Abstratas com abc.ABC e @abstractmethod no contexto de Herança, Polimorfismo, Classes Abstratas (abc.ABC) e MRO.
Requisitos de Execução:
- Declarar contrato base abstrato forçando a implementação de métodos nas classes derivadas.
Resultado Esperado
Compilador impede instanciação de classes abstratas sem todos os métodos implementados.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_09_1_SeuNome - Envie na tarefa:
Atividade Cap 09 - Herança, Polimorfismo, Classes Abstratas (abc.ABC) e MRO
🔑 Gabarito de Código & Solução Comentada
from abc import ABC, abstractmethod
class Notificador(ABC):
@abstractmethod
def enviar(self, mensagem: str) -> None:
pass
class EmailNotificador(Notificador):
def enviar(self, mensagem: str) -> None:
print(f"[EMAIL] {mensagem}")
n: Notificador = EmailNotificador()
n.enviar("Servidor online.")
🔍 Nível 2: Prática
Problema 09.2 — Herança Múltipla e Resolução de Ordem de Métodos (MRO)
Contexto: Herança Múltipla e Resolução de Ordem de Métodos (MRO) no contexto de Herança, Polimorfismo, Classes Abstratas (abc.ABC) e MRO.
Requisitos de Execução:
- Inspecionar o
Classe.__mro__para entender o algoritmo C3 Linearization em diamante.
Resultado Esperado
Árvore de herança em diamante resolvida deterministicamente pelo MRO.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_09_2_SeuNome - Envie na tarefa:
Atividade Cap 09 - Herança, Polimorfismo, Classes Abstratas (abc.ABC) e MRO
🔑 Gabarito de Código & Solução Comentada
class Base:
def acao(self) -> str: return "Base"
class MixinA(Base):
def acao(self) -> str: return f"MixinA -> {super().acao()}"
class MixinB(Base):
def acao(self) -> str: return f"MixinB -> {super().acao()}"
class ServicoFinal(MixinA, MixinB):
pass
s = ServicoFinal()
print(f"Cadeia MRO: {s.acao()}")
⚡ Nível 3: Integração
Problema 09.3 — Uso Seguro de super() com Passagem Cooperativa de Argumentos
Contexto: Uso Seguro de super() com Passagem Cooperativa de Argumentos no contexto de Herança, Polimorfismo, Classes Abstratas (abc.ABC) e MRO.
Requisitos de Execução:
- Encadeie chamadas de construtores em herança múltipla utilizando
super().__init__(**kwargs).
Resultado Esperado
Inicialização cooperativa de classes executada com sucesso.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_09_3_SeuNome - Envie na tarefa:
Atividade Cap 09 - Herança, Polimorfismo, Classes Abstratas (abc.ABC) e MRO
🔑 Gabarito de Código & Solução Comentada
class Logavel:
def __init__(self, **kwargs: object) -> None:
super().__init__(**kwargs)
print("Logavel inicializado.")
class Persistivel:
def __init__(self, **kwargs: object) -> None:
super().__init__(**kwargs)
print("Persistivel inicializado.")
class Entidade(Logavel, Persistivel):
def __init__(self, **kwargs: object) -> None:
super().__init__(**kwargs)
Entidade()
🏆 Nível 4: Desafio Corporativo
Problema 09.4 — Controle de Subclasses com init_subclass (Hooks de Herança)
Contexto: Controle de Subclasses com init_subclass (Hooks de Herança) no contexto de Herança, Polimorfismo, Classes Abstratas (abc.ABC) e MRO.
Requisitos de Execução:
- Validar e registrar automaticamente subclasses no momento de sua declaração sem necessidade de metaclasses.
Resultado Esperado
Subclasses registradas automaticamente no registro corporativo via `__init_subclass__`.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_09_4_SeuNome - Envie na tarefa:
Atividade Cap 09 - Herança, Polimorfismo, Classes Abstratas (abc.ABC) e MRO
🔑 Gabarito de Código & Solução Comentada
REGISTRO_PLUGINS = {}
class PluginBase:
def __init_subclass__(cls, nome_plugin: str, **kwargs: object) -> None:
super().__init_subclass__(**kwargs)
REGISTRO_PLUGINS[nome_plugin] = cls
class AuthPlugin(PluginBase, nome_plugin="AUTH_JWT"):
pass
print(f"Plugins registrados: {list(REGISTRO_PLUGINS.keys())}")
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |