🚀 Capítulo 11: Adapter (Tema: Transformers)

NOTE

Este capítulo utiliza a temática de Transformers para explicar o padrão Adapter. O Bumblebee precisa se conectar à rede elétrica humana; como as tomadas são diferentes, ele precisa de um Adaptador!


1. 🎯 Objetivo da Aula

Compreender o padrão de projeto Adapter (Padrão Estrutural), entendendo como ele permite que objetos com interfaces incompatíveis colaborem entre si.

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

O Bumblebee precisa recarregar suas baterias. Ele encontra uma tomada em um posto de gasolina humano.

  • A tomada humana fornece 110V em corrente alternada com um plugue de 3 pinos.
  • O Bumblebee precisa de 1000V em corrente contínua com uma entrada esférica cybertroniana.

Se ele tentar se conectar direto, ou ele queima a tomada ou não consegue encaixar. Ele precisa de um Adaptador de Energia que fique no meio do caminho, convertendo a interface humana para a interface cybertroniana. No mundo do software, isso acontece o tempo todo quando tentamos usar uma biblioteca antiga (legacy) em um sistema novo! Seu desafio é criar esse adaptador!

3. 🧠 Fundamentos: A Teoria Traduzida

O Adapter (Adaptador) é um padrão de projeto estrutural que permite que objetos com interfaces incompatíveis colaborem.

🔌 O Wrapper (Envoltório)

O adaptador é uma classe especial que envolve (wrap) o objeto que queremos usar.

  1. O adaptador recebe chamadas do sistema novo.
  2. Ele traduz essas chamadas para um formato que o objeto antigo entenda.
  3. Ele passa a chamada traduzida para o objeto antigo.

4. 📖 Exemplo Guiado: Adaptando Tomadas (JS)

// CLASSE ANTIGA (Ou de outro planeta)
class TomadaCybertroniana {
    conectarEsfera() { return "Energia Cybertroniana fluindo!"; }
}
 
// SISTEMA NOVO (Humano)
class TomadaHumana {
    conectarPinos() { return "Energia Humana (110V) fluindo!"; }
}
 
// O ADAPTADOR
class AdaptadorDeEnergia {
    constructor(tomadaCybertroniana) {
        this.tomadaCyber = tomadaCybertroniana;
    }
 
    // O sistema novo acha que está chamando uma tomada humana de pinos...
    conectarPinos() {
        console.log("Convertendo 110V para 1000V...");
        // ...mas por dentro o adaptador chama o método da tomada cybertroniana!
        return this.tomadaCyber.conectarEsfera();
    }
}
 
// USO
const tomadaDoBumblebee = new TomadaCybertroniana();
const adaptador = new AdaptadorDeEnergia(tomadaDoBumblebee);
 
// O carro elétrico humano tenta plugar na tomada humana (usando o adaptador)
console.log(adaptador.conectarPinos());

5. 🛠️ Prática Obrigatória 1: Onde está o Adaptador?

Com base no exemplo acima:

  1. Qual é a classe que representa o objeto legado (antigo/incompatível)?
  2. Qual é o método que o sistema novo espera chamar?
  3. Qual método o adaptador realmente chama por baixo dos panos?

6. 🛠️ Prática Obrigatória 2: Adaptador na Vida Real

Dê um exemplo de um adaptador que você usa na sua vida real (fora do computador) para conectar duas coisas incompatíveis. (Dica: Pense em celulares e fones de ouvido ou tomadas de viagem).


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

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 11 Paradigmas) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

mod_10_paradigmas_e_padroes_de_projeto/
├── capitulos/
│   ├── capitulo_11_adapter.md
│   └── codigos/
│       └── cap11/
│           └── adaptador_ bumblebee.js

9. 💡 Checkpoint de Lógica

O padrão Adapter altera o código da classe antiga para fazê-la funcionar? Não! Ele apenas cria uma casca ao redor dela. Isso é ótimo porque muitas vezes não temos acesso para mudar o código da classe antiga (ela pode ser de outra empresa).

10. 🔥 Desafio de Fixação

Pesquise como o padrão Adapter é usado para conectar diferentes bancos de dados (MySQL, PostgreSQL) a uma mesma aplicação sem mudar o código principal.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. TomadaCybertroniana.
  2. conectarPinos().
  3. conectarEsfera().

Capitulo Anterior | Proximo Capitulo