Pular para conteúdo

Aula 05 - Interfaces e Composição 🧩

O Segredo da Flexibilidade em Go


Agenda de Hoje 📅

  1. O Conceito de Interfaces
  2. Implementação Implícita (Duck Typing)
  3. Polimorfismo na Prática
  4. Composição vs Herança
  5. Embedding de Structs
  6. Mini-Projeto: Sistema de Pagamentos

1. O que são Interfaces? 🔌

  • Define O Que um objeto faz, não Como.
  • É um conjunto de assinaturas de métodos.
type Documento interface {
    Imprimir() string
}

2. Duck Typing em Go 🦆

"Se caminha como pato e faz quack como pato..."

  • Não existe a palavra implements.
  • Se você tem os métodos, você é o tipo.

3. Polimorfismo 🎭

func ExecutarImpressao(d Documento) {
    fmt.Println(d.Imprimir())
}

// Aceita PDF, Docx, TXT... qualquer um que "Imprima".

4. Composição (O Diferencial) 🏗️

  • Go não tem herança (class A extends B).
  • Usamos Embedding para reutilizar comportamento.

5. Exemplo de Composição 🚲

type Motor struct { ... }

type Carro struct {
    Motor // Carro "tem um" motor
    Marca string
}

6. Diagrama de Composição 📊

classDiagram
    class Motor { +Ligar() }
    class Carro { +Motor motor }
    class Caminhao { +Motor motor }
    Carro *-- Motor
    Caminhao *-- Motor

7. A Interface Vazia: any ☁️

  • interface{} aceita qualquer valor.
  • Útil para funções genéricas (ex: fmt.Println).
  • Cuidado: Perde a segurança de tipos!

Resumo da Aula ✅

  • Interfaces focam em comportamento.
  • Composição é mais simples e flexível que herança.
  • "Aceite interfaces, retorne structs".

Próxima Aula: Tratamento de Erros ⚠️

  • Por que não temos try/catch?
  • O valor error.
  • Panic e Recover.

Dúvidas? 🤔

"Dê-me uma interface e eu moverei o mundo."