🚀 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?

  1. Você quer garantir que o seu jogo tenha apenas um gerenciador de som rodando por vez, para evitar que duas músicas toquem juntas.
  2. 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.

  1. 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)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 08 EngSoftware) e clique em Commit to main.
  2. 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:

  1. Singleton (Garante instância única).
  2. Adapter (Conecta interfaces incompatíveis). Gabarito da Prática 2:
  3. 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!

Capitulo Anterior | Proximo Capitulo