Pedro criou uma cesta de compras virtual, onde é apresentado o valor total por item, considerando a quantidade, e o valor da compra, com a soma dos valores dos itens. Em seu sistema, ele criou as classes Produto, ItemCesta e Cesta, cada uma com os dados relacionados às tabelas do banco, o método que calcula o valor total do item na classe ItemCesta, e o cálculo do valor da compra é efetuado na classe Cesta. A estratégia adotada por Pedro segue o padrão:
- A)Information Expert;
Certa, porque as responsabilidades foram atribuídas às classes que possuem as informações necessárias para executar os cálculos.
- B)Creator;
Errada, pois Creator trata de quem deve criar objetos, e o enunciado fala de cálculo e distribuição de responsabilidades.
- C)Pure Fabrication;
Errada, porque Pure Fabrication envolve criar uma classe artificial para suportar coesão e baixo acoplamento, o que não é o caso aqui.
- D)Controller;
Errada, já que Controller lida com a coordenação de eventos ou requisições do sistema, não com cálculo baseado em dados do domínio.
- E)Polymorphism.
Errada, porque Polymorphism trata de variação de comportamento por interfaces ou herança, e não da alocação da responsabilidade pelo cálculo.
Gabarito: A
A ideia central do padrão Information Expert é simples: a responsabilidade deve ficar com a classe que tem as informações necessárias para executá-la. Parece quase óbvio, e é justamente por isso que ele aparece tanto em questões de orientação a objetos: cada objeto faz o que conhece melhor. Se a classe tem os dados e também a regra de cálculo relacionada a esses dados, ela é a melhor candidata para assumir a tarefa. No enunciado, Pedro criou Produto, ItemCesta e Cesta. O valor total de cada item, considerando a quantidade, fica na classe ItemCesta, porque é ali que estão os dados necessários para esse cálculo. Já o valor da compra, que é a soma dos itens, fica na classe Cesta, pois ela reúne os itens e consegue somá-los sem precisar "adivinhar" nada. Isso é exatamente Information Expert: distribuir responsabilidades para quem possui a informação relevante. Não é só uma escolha elegante, é uma forma de reduzir acoplamento e deixar o sistema mais coerente. Em vez de sair colocando conta em qualquer classe, você põe cada cálculo no lugar em que os dados já estão disponíveis. Por isso o gabarito é a letra A. A estrutura descrita não está falando de quem cria quem, nem de controlador, nem de fabricação artificial de classes, mas sim de atribuir responsabilidades aos objetos que têm os dados para cumpri-las. É o clássico "quem sabe, faz" da orientação a objetos.