Especialização em Sistemas com Python & POO com Type Hints • Capítulo 10


🗺️ Mapa Conceitual do Tópico

classDiagram
    class ProvedorAutenticacaoProtocol {
        <<Protocol>>
        +nome_provedor: str
        +autenticar(credenciais)* tuple
    }

    class ProvedorOAuth2 {
        +nome_provedor: str
        +autenticar(credenciais) tuple
    }

    class ProvedorLdap {
        +nome_provedor: str
        +autenticar(credenciais) tuple
    }

    ProvedorOAuth2 ..|> ProvedorAutenticacaoProtocol : Duck Typing Estático
    ProvedorLdap ..|> ProvedorAutenticacaoProtocol : Duck Typing Estático

📜 1. Interfaces Estruturais com typing.Protocol (PEP 544)

Diferente da herança nominal (abc.ABC), o typing.Protocol adota a tipagem estrutural (Duck Typing Estático): uma classe satisfaz a interface automaticamente caso implemente a assinatura exigida, sem precisar herdar explicitamente do protocolo.

  • @runtime_checkable: Permite checagens em tempo de execução via isinstance(obj, MeuProtocolo).

💻 Exemplo Prático e Tipado

"""
exemplo_10_interfaces_e_protocols.py - Duck Typing Estático com typing.Protocol
"""

from typing import Any, Protocol, runtime_checkable


@runtime_checkable
class NotificadorProtocol(Protocol):
    def enviar(self, destinatario: str, mensagem: str) -> bool:
        ...


class ServicoEmail:
    def enviar(self, destinatario: str, mensagem: str) -> bool:
        print(f"[EMAIL] Enviado para {destinatario}: {mensagem}")
        return True


class ServicoSms:
    def enviar(self, destinatario: str, mensagem: str) -> bool:
        print(f"[SMS] Enviado para {destinatario}: {mensagem}")
        return True


def disparar_alerta(canal: NotificadorProtocol, destino: str, msg: str) -> None:
    if isinstance(canal, NotificadorProtocol):
        canal.enviar(destino, msg)


if __name__ == "__main__":
    disparar_alerta(ServicoEmail(), "admin@corp.com", "Servidor reiniciado")
    disparar_alerta(ServicoSms(), "+5511999998888", "Alerta de segurança")

🔗 Recursos Pedagógicos do Capítulo 10

Recurso Didático Finalidade Link de Acesso
📊 Slides de Aula Apresentação visual interativa com Dark Mode e suporte a teclado Ver Slides
🧠 Quiz Formativo Teste interativo de fixação com feedback imediato por alternativa Fazer Quiz
💻 Exemplos de Código Demonstrações funcionais com Type Hints e saída no console Ver Exemplos
🧩 Exercícios em 4 Níveis Lista progressiva de fixação com gabarito em bloco colapsável Resolver Exercícios

🧬 Capítulo Anterior 📚 Sumário de Tópicos 🛡️ Próximo Capítulo