Pular para o conteúdo
Arquitetura

Open-Closed Principle: Exemplo Restaurante

Sistema de restaurante quebra quando adiciona novo prato? OCP resolve isso sem modificar código existente. Matemática severa da extensibilidade.

Por que isso é importante

Open-Closed Principle: Exemplo Restaurante. Sistema de restaurante quebra quando adiciona novo prato? OCP resolve isso sem modificar código existente. Matemática severa da extensibilidade.

Atenção

Sistema de restaurante que quebra a cada novo prato custa R$ 15K+ mensais em bugs.
Desenvolvedor sênior ganha 40% mais dominando OCP vs júnior que modifica código
existente.

Você adiciona um novo prato no cardápio e o sistema inteiro quebra. Modifica desconto de
pizza e hambúrguer para de funcionar. Open-Closed Principle resolve essa matemática
venenosa da extensibilidade.

Problema Real: Sistema Frágil

Restaurante precisa calcular preços diferentes por tipo de prato. Pizza tem taxa de
forno, hambúrguer tem desconto horário, salada tem adicional orgânico.

Checklist

  • 1 Novo prato = modificar função existente
  • 2 Mudança em pizza pode quebrar hambúrguer
  • 3 Testes quebram constantemente

Open-Closed Principle: Definição Precisa

Atenção

Módulo deve estar aberto para extensão, mas fechado para modificação.

Traduzindo: você adiciona funcionalidade nova sem alterar código que já funciona.

Checklist

  • ✅ Aberto para Extensão Pode adicionar novo comportamento facilmente
  • 🔒 Fechado para Modificação Não altera código fonte existente

Solução: Polimorfismo Estratégico

Orientação a objetos com herança resolve a matemática da extensibilidade. Cada tipo de
prato vira uma classe independente.

Extensão Sem Modificação

Restaurante decide adicionar sobremesas no cardápio. Com OCP, você não toca em pizza nem
hambúrguer.

Checklist

  • ✓ Zero modificação em Pizza e Hambúrguer
  • ✓ Testes antigos continuam passando
  • ✓ Sistema mais estável e confiável

Uso Prático do Sistema

Vantagens Técnicas Severas

Checklist

  • 🧪 Testabilidade Cada classe testada isoladamente sem interferência
  • 🔧 Manutenibilidade Bug em pizza não afeta hambúrguer
  • 📈 Escalabilidade Adicionar 50 tipos novos sem risco
  • ⚡ Performance Polimorfismo otimizado pela JIT

Casos de Uso Avançados

OCP não se limita a cálculo de preços. Aplicação se estende para qualquer comportamento
extensível.

Checklist

  • 1 Sistemas de pagamento: PIX, cartão, boleto
  • 2 Notificações: email, SMS, push, WhatsApp
  • 3 Validações: CPF, CNPJ, email, telefone

Implementação Step-by-Step

Checklist

  • 1 Identifique variação de comportamento Onde você tem if/else ou switch extensos
  • 2 Crie classe abstrata base Defina contrato comum com métodos abstratos
  • 3 Implemente classes concretas Uma para cada variação de comportamento
  • 4 Use polimorfismo no cliente Trabalhe com tipo abstrato, não implementações
  • 5 Teste extensibilidade Adicione nova implementação sem modificar existente

Checklist

  • ✓ Sistema extensível sem modificação
  • ✓ Polimorfismo implementado corretamente
  • ✓ Testes unitários isolados
  • ✓ Abstração estável definida
  • ✓ Baixo acoplamento entre classes
  • ✓ Performance mantida com herança

Próximos Passos

OCP é apenas um dos 5 princípios SOLID. Domine todos para escrever código que escala sem
quebrar.

Checklist

  • 📚 Estude os Outros Princípios Single Responsibility, Liskov Substitution, Interface Segregation, Dependency
    Inversion
  • 🛠️ Pratique com Projetos Reais Implemente em sistema de e-commerce, blog, API REST