🚀 Capítulo 09: Antipadrões e Code Smells (Tema: Scooby-Doo)

NOTE

Este capítulo utiliza a temática de Scooby-Doo para explicar os Code Smells e Antipadrões. Sinta o cheiro de mistério no ar e identifique os sinais de que o seu código está assombrado!


1. 🎯 Objetivo da Aula

Compreender os conceitos de Code Smells (Códigos que cheiram mal) e Antipadrões (Anti-Patterns), aprendendo a identificar sinais de que o código precisa ser melhorado antes que vire um monstro impossível de derrotar!

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

A turma do Scooby-Doo chega a uma mansão abandonada. Salsicha e Scooby começam a tremer. Eles sentem um “cheiro estranho” no ar, ouvem um rangido na porta e percebem que os quadros na parede parecem estar seguindo eles com os olhos.

  • Esses sinais não significam necessariamente que o monstro está ali naquele segundo, mas são fortes indícios de que algo está errado!

No desenvolvimento de software, acontece a mesma coisa. O código pode estar funcionando e passando nos testes, mas ele pode ter características que “cheiram mal”. Chamamos isso de Code Smells. São sinais de que o código foi mal escrito e vai dar problema no futuro! E quando a equipe tenta resolver o mistério usando uma solução que parece boa, mas que na verdade piora tudo (caindo na armadilha do vilão), chamamos de Antipadrão. Seu desafio é ser o detetive do código!


🧠 Fundamentos: A Teoria Traduzida

👃 1. Code Smells (O Cheiro de Código Ruim):

Não são erros de programação (o código roda!). São apenas estruturas que violam os princípios de bom design.

  • Código Duplicado: O mesmo trecho de código copiado e colado em 3 lugares diferentes. Se você precisar mudar uma regra, terá que lembrar de mudar nos 3 lugares.
  • Função Longa: Uma função com mais de 50 linhas. Geralmente significa que ela está fazendo coisas demais.
  • Lista Longa de Parâmetros: Uma função que recebe 10 variáveis diferentes como entrada. É difícil de entender e de usar.

❌ 2. Antipadrões (As Armadilhas):

São soluções comuns para problemas comuns, mas que geram mais problemas do que resolvem.

  • Objeto Deus (God Object): Uma única classe gigante no sistema que faz tudo e conhece tudo. Se ela der erro, o sistema inteiro para.
  • Hardcoding (Valores fixos): Escrever senhas, URLs ou caminhos de arquivos direto no meio do código em vez de usar arquivos de configuração.
  • Reinventar a Roda: Tentar escrever do zero uma função complexa (como criptografia) em vez de usar uma biblioteca padrão e segura que já existe.

4. 📖 Exemplo Guiado: O Código Assombrado

Olhe este trecho de código (Fictício):

void processar_tudo() {
    // Linha 1 a 100: Conecta no banco
    // Linha 101 a 200: Calcula impostos
    // Linha 201 a 300: Gera arquivo PDF
}

Onde está o monstro? Temos o Code Smell de Função Longa e o Antipadrão de tentar fazer tudo em um lugar só. O correto seria dividir em 3 funções: conectar_banco(), calcular_impostos() e gerar_pdf().


5. 🛠️ Prática Obrigatória 1: Identificando o Cheiro

Qual Code Smell ou Antipadrão você identifica nas situações abaixo?

  1. Você precisa mudar o endereço do servidor do banco de dados e descobre que terá que alterar essa informação em 15 arquivos de código diferentes porque o endereço foi escrito direto neles.
  2. Uma função chamada enviar_mensagem() recebe como parâmetros: texto, destinatario, remetente, cor_da_fonte, tamanho_da_fonte, emoticons_permitidos, prioridade e som_de_aviso.

6. 🛠️ Prática Obrigatória 2: Fugindo do Monstro

Por que copiar e colar código (Código Duplicado) é considerado um dos piores pecados da Engenharia de Software? O que acontece quando o sistema cresce?


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

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 09 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_09_smells.md
│   └── codigos/
│       └── cap09/
│           └── codigo_ruim.cpp

💡 Checkpoint de Lógica

Identificar Code Smells exige prática e intuição. Com o tempo, você baterá o olho em um código e sentirá que “algo não está certo”, mesmo sem saber exatamente o quê!

10. 🔥 Desafio de Fixação

Pesquise o conceito de Spaghetti Code (Código Espaguete) e como ele se relaciona com os Code Smells.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. Hardcoding (E também falta de centralização/DRY). O endereço deveria estar em um arquivo de configuração único.
  2. Lista Longa de Parâmetros. O ideal seria passar um objeto ConfiguracaoMensagem que agrupe esses dados. Gabarito da Prática 2:
  3. Porque se você precisar corrigir um erro ou mudar uma regra de negócio nesse código duplicado, terá que caçar todas as cópias espalhadas pelo sistema. Se esquecer de uma, o sistema ficará com comportamentos diferentes e gerará bugs difíceis de encontrar!

Capitulo Anterior | Proximo Capitulo