Alternativa B
Padrão Information Expert (Especialista de Informação)
Este padrão, proposto pela Grady Booch e incorporado pelos GoF, sugere que uma responsabilidade deve ser atribuída a uma classe que possui a informação necessária para realizá-la. A intenção original é manter o conhecimento encapsulado onde ele pertence.
No entanto, a aplicação rígida ou incorreta desse princípio pode levar a problemas de design, especificamente relacionados à coesão.
Análise da Questão
O Problema da Coesão
Coesão refere-se ao grau em que os elementos dentro de um módulo pertencem uns aos outros. Uma classe com alta coesão realiza uma única tarefa bem definida. Quando tentamos aplicar o "Especialista de Informação" sem critério, podemos acabar criando classes que acumulam responsabilidades diversas apenas porque compartilham dados.
Por que a Alternativa B está correta?
A alternativa descreve a seguinte situação:
"Quando colocamos em uma mesma classe operações de naturezas diferentes como lógica do negócio e acesso a banco de dados..."
Isso compromete a coesão porque:
- Mistura de Responsabilidades: Uma classe não deve cuidar tanto da regra de negócios quanto da infraestrutura de persistência (banco de dados).
- Baixa Coesão Funcional: Se você mudar a forma como o banco funciona, terá que mexer na lógica de negócio, e vice-versa.
- Violação do Princípio da Responsabilidade Única: Embora a classe "tenha a informação", ela assumiu tarefas que deveriam estar separadas em módulos distintos (ex: Service Layer vs Repository Pattern).
Análise das outras alternativas
- (A) Descreve uma Facade (interface simplificada), que geralmente melhora a usabilidade sem necessariamente prejudicar a coesão interna dos módulos clientes.
- (C) Descreve o padrão Proxy, usado para controle de acesso ou lazy loading, não sendo intrinsecamente prejudicial à coesão.
- (D) Descreve uma refatoração comum para substituir condicionais complexos, melhorando a manutenibilidade e a coesão do código.
- (E) Descreve o padrão Creator, que define quem deve instanciar um objeto. É uma boa prática de design, não uma causa de baixa coesão.
Conclusão
A alternativa B é a única que descreve explicitamente uma má prática de design onde a aplicação de um princípio (juntar coisas que usam os mesmos dados) resulta em uma classe com múltiplas responsabilidades desconexas, reduzindo a coesão do módulo.