Princípios SOLID e Design Patterns
Gabarito: letra C. O cenário viola o Open-Closed Principle (OCP), pois a classe GeradorDeRelatorio precisa ser modificada para cada novo formato de relatório. O OCP determina que as classes devem estar abertas para extensão, mas fechadas para modificação. Para corrigir, aplicam-se os padrões Strategy ou Decorator, que permitem adicionar novos comportamentos sem alterar o código existente.
Alternativa A — ❌ Incorreta
O Dependency Inversion Principle trata da dependência de abstrações, não de módulos concretos. O padrão Adapter é usado para compatibilizar interfaces, não para adicionar novas variantes de comportamento. Não se aplica ao problema descrito.
Alternativa B — ❌ Incorreta
O Single Responsibility Principle está relacionado à coesão de classes, mas o problema não é ter múltiplas responsabilidades – é a necessidade de modificar a classe para cada novo formato. O padrão Singleton controla instância única, o que não resolve a extensibilidade.
Alternativa C — ✅ Correta ⟵ GABARITO
O Open-Closed Principle é diretamente violado: a classe GeradorDeRelatorio exige modificação a cada novo formato. Os padrões Strategy (definir uma família de algoritmos intercambiáveis) e Decorator (adicionar responsabilidades dinamicamente) são as correções clássicas para este princípio, permitindo extensão sem alteração.
Alternativa D — ❌ Incorreta
O Liskov Substitution Principle assegura que subtipos possam substituir seus tipos base, mas o cenário não trata de herança mal aplicada. Usar herança como correção não resolveria o problema de modificação da classe original, pois ainda seria necessário alterar a classe base para novos formatos.
Alternativa E — ❌ Incorreta
O Interface Segregation Principle prega interfaces específicas, não coesas demais. O padrão Facade fornece uma interface simplificada para um subsistema, mas não soluciona a necessidade de adicionar novos formatos sem modificar a classe existente.
Gabarito: letra C.