🚀 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.
- O adaptador recebe chamadas do sistema novo.
- Ele traduz essas chamadas para um formato que o objeto antigo entenda.
- 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:
- Qual é a classe que representa o objeto legado (antigo/incompatível)?
- Qual é o método que o sistema novo espera chamar?
- 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)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 11 Paradigmas) e clique em Commit to main. - 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.js9. 💡 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:
TomadaCybertroniana.conectarPinos().conectarEsfera().