🚀 Capítulo 08: Padrões de Projeto (Tema: Batman)
NOTE
Este capítulo utiliza a temática de Batman para explicar os Padrões de Projeto. Não invente a roda no meio da batalha: use as ferramentas prontas e testadas do seu cinto de utilidades!
1. 🎯 Objetivo da Aula
Compreender o conceito de Padrões de Projeto (Design Patterns), conhecendo as três categorias principais (Criacionais, Estruturais e Comportamentais) e entendendo como eles resolvem problemas comuns de design de código.
2. 🏢 O Cenário Prático (Seu Desafio)
O Batman não tem superpoderes. O seu grande segredo para vencer vilões muito mais fortes é o preparo.
- No seu cinto de utilidades, ele carrega ferramentas prontas para problemas específicos.
- Se ele está caindo de um prédio, ele usa o Batarangue com corda. Se o ambiente está cheio de gás tóxico, ele usa a máscara de oxigênio.
O Batman não inventa uma ferramenta nova toda vez que sai para patrulhar. Ele usa soluções que já foram exaustivamente testadas e que ele sabe que funcionam! Na Engenharia de Software, nós enfrentamos os mesmos problemas de organização de código repetidamente. Os Padrões de Projeto são o cinto de utilidades do engenheiro! São soluções arquiteturais prontas para problemas comuns. Seu desafio é saber qual ferramenta puxar do cinto!
🧠 Fundamentos: A Teoria Traduzida
Os Padrões de Projeto foram catalogados por quatro autores conhecidos como a Gang of Four (GoF) em 1994. Eles dividiram os padrões em 3 grandes categorias:
🐣 1. Padrões Criacionais (Como criar objetos):
Focam em como os objetos são instanciados, escondendo a complexidade da criação.
- Singleton: Garante que uma classe tenha apenas uma única instância no programa inteiro. (Ex: Apenas uma conexão com o banco de dados).
- Factory Method: Cria objetos sem especificar a classe exata do objeto que será criado.
🧱 2. Padrões Estruturais (Como montar os objetos):
Focam em como classes e objetos são combinados para formar estruturas maiores.
- Adapter (Adaptador): Permite que classes com interfaces incompatíveis trabalhem juntas. (Igual a um adaptador de tomada de três pinos para dois pinos).
- Decorator: Adiciona novas responsabilidades a um objeto dinamicamente.
🎭 3. Padrões Comportamentais (Como os objetos conversam):
Focam no algoritmo e na atribuição de responsabilidades entre os objetos.
- Observer (Observador): Define uma dependência um-para-muitos. Quando um objeto muda de estado, todos os seus dependentes são avisados. (Igual a se inscrever em um canal do YouTube).
4. 📖 Exemplo Guiado: O Padrão Observer
Imagine que o Batman instalou sensores pela cidade de Gotham.
- Quando o Coringa escapa do hospício, o sensor avisa a Batcaverna.
- Automaticamente, o computador avisa o Batman (no Batmóvel), o Robin (na moto) e o Comissário Gordon (na delegacia). Esse é o padrão Observer! O sensor é o “Sujeito” e os heróis são os “Observadores”. Ninguém precisa ficar perguntando toda hora se o Coringa fugiu; o sistema avisa a todos de uma vez!
5. 🛠️ Prática Obrigatória 1: Escolhendo a Ferramenta
Qual padrão de projeto do cinto de utilidades do Batman você usaria para resolver os problemas abaixo?
- Você quer garantir que o seu jogo tenha apenas um gerenciador de som rodando por vez, para evitar que duas músicas toquem juntas.
- Você tem um sistema antigo que gera relatórios em texto, mas a nova impressora só aceita dados em formato XML. Você precisa de um intermediário para fazer essa conversão de formatos.
6. 🛠️ Prática Obrigatória 2: O Perigo do Exagero
Um programador novato leu o livro de Padrões de Projeto e decidiu usar 10 padrões diferentes em um projeto de calculadora simples.
- O que vai acontecer com a complexidade desse código? Usar padrões de projeto sempre é a melhor escolha?
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 08 EngSoftware) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
extra_engenharia_de_software/
├── capitulos/
│ ├── capitulo_08_patterns.md
│ └── codigos/
│ └── cap08/
│ └── padrao_singleton.cpp💡 Checkpoint de Lógica
Os padrões de projeto são ferramentas. Se você tentar usar um martelo para apertar um parafuso, vai estragar o parafuso. Aprenda o problema que o padrão resolve antes de tentar usá-lo!
10. 🔥 Desafio de Fixação
Pesquise a diferença entre o padrão Simple Factory e o padrão Abstract Factory.
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
- Singleton (Garante instância única).
- Adapter (Conecta interfaces incompatíveis). Gabarito da Prática 2:
- O código vai ficar extremamente complexo, cheio de arquivos desnecessários e difícil de ler (Overengineering). Não se deve usar padrões de projeto para resolver problemas simples que poderiam ser resolvidos com poucas linhas de código comum!