🚀 Capítulo 20: Projeto Final: O Grande Arquiteto (Tema: Caverna do Dragão)

NOTE

Este capítulo utiliza a temática de Caverna do Dragão para o Projeto Final. O Mestre dos Magos deixou um enigma de arquitetura; os heróis precisam aplicar os padrões corretos para finalmente voltar para casa!


1. 🎯 Objetivo da Aula

Integrar os conceitos de Paradigmas de Programação e Padrões de Projeto aprendidos durante o curso para resolver um grande desafio de arquitetura de software.

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

Os heróis (Hank, Eric, Diana, Sheila, Presto e Bobby) encontraram um portal que promete levá-los de volta para o parque de diversões. Porém, o portal está trancado pelo Labirinto dos Padrões, criado pelo Vingador. Para abrir o portal, eles precisam resolver 4 desafios de design de código, escolhendo o padrão de projeto correto para cada situação.

🧩 Os Desafios do Labirinto:

  1. O Desafio da Fonte de Luz Única: O labirinto é escuro. Eles precisam de um objeto OrbeDeLuz. O Vingador colocou uma maldição: se eles tentarem criar mais de um Orbe, todos se apagam. Como garantir que exista apenas uma instância do Orbe no sistema inteiro?
  2. O Desafio do Chapéu do Presto: O Presto quer usar seu chapéu mágico para criar uma ponte. O chapéu espera receber uma “Fórmula Mágica” (uma interface antiga), mas os heróis só têm um “Livro de Engenharia” (uma interface nova). Como fazer o chapéu aceitar o livro?
  3. O Desafio do Escudo do Eric: O Eric fica com muito medo. Quando ele está calmo, seu escudo reflete ataques. Quando ele está em pânico, ele apenas se esconde atrás do escudo e não consegue se mover. O comportamento do objeto Escudo muda dependendo do estado emocional do Eric. Como modelar isso sem usar dezenas de if/else?
  4. O Desafio do Ataque Combinado: O Hank quer dar um comando para que todos ataquem ao mesmo tempo. Ele não quer falar com cada um individualmente. Ele quer “gritar” uma ordem e que todos os que estiverem ouvindo executem suas ações. Qual padrão resolve isso?

Seu desafio é identificar e aplicar o padrão correto para cada um dos 4 desafios!


3. 🧠 Fundamentos: A Teoria Traduzida

Este capítulo é uma revisão prática de tudo o que vimos:

  • Criacionais: Singleton, Factory, Abstract Factory, Builder, Prototype.
  • Estruturais: Adapter, Bridge, Composite, Decorator, Facade.
  • Comportamentais: Observer, Strategy, State, Command.

Lembre-se: Não existe padrão melhor ou pior. Existe o padrão certo para o problema certo!


4. 📖 Exemplo Guiado: O Mapa do Labirinto

Vamos ajudar os heróis com o primeiro desafio (A Fonte de Luz Única). Como precisamos de uma única instância global do OrbeDeLuz, o padrão perfeito é o Singleton.

class OrbeDeLuz {
    constructor() {
        if (OrbeDeLuz.instancia) {
            return OrbeDeLuz.instancia;
        }
        this.brilho = "Forte";
        OrbeDeLuz.instancia = this;
    }
}

5. 🛠️ Prática Obrigatória 1: Resolvendo os Desafios

Com base nos desafios 2, 3 e 4 descritos no cenário:

  1. Qual padrão de projeto resolve o Desafio do Chapéu do Presto?
  2. Qual padrão de projeto resolve o Desafio do Escudo do Eric?
  3. Qual padrão de projeto resolve o Desafio do Ataque Combinado do Hank?

6. 🛠️ Prática Obrigatória 2: O Paradigma da Fuga

Se os heróis decidirem programar o sistema do portal usando Programação Funcional, eles poderão usar classes e objetos para representar o Escudo do Eric? Por quê? O que eles deveriam usar no lugar?


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

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 20 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_20_projeto.md
│   └── codigos/
│       └── cap20/
│           └── portal_fuga.js

9. 💡 Checkpoint de Lógica

Parabéns por chegar até aqui! Você agora possui as ferramentas mentais para criar arquiteturas de software profissionais, limpas e escaláveis.

10. 🔥 Desafio de Fixação

Crie um pequeno código em JavaScript simulando a solução de um dos desafios que você respondeu na Prática 1.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. Adapter (Para adaptar a interface do livro para a interface que o chapéu espera).
  2. State (O comportamento do escudo muda dependendo do estado interno do Eric).
  3. Observer (O Hank é o sujeito que emite o comando, e os outros heróis são os observadores que reagem).

Capitulo Anterior