🚀 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?
- 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.
- Uma função chamada
enviar_mensagem()recebe como parâmetros:texto,destinatario,remetente,cor_da_fonte,tamanho_da_fonte,emoticons_permitidos,prioridadeesom_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)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 09 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_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:
- Hardcoding (E também falta de centralização/DRY). O endereço deveria estar em um arquivo de configuração único.
- Lista Longa de Parâmetros. O ideal seria passar um objeto
ConfiguracaoMensagemque agrupe esses dados. Gabarito da Prática 2: - 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!