Pular para o conteúdo principal

Questão de Engenharia de Software — Orientação a Objetos — FGV 2023

Engenharia de SoftwareOrientação a Objetos
Código
fg071490
Banca
FGV
Órgão
TCE-SP
Ano
2023
Nível
Superior
Cargo
Agente da Fiscalização - TI
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:
  1. AInformation Expert;
  2. BCreator;
  3. CPure Fabrication;
  4. DController;
  5. EPolymorphism.
Revelar gabarito e comentário

GabaritoA — Information Expert;

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Padrões GRASP – Information Expert

Gabarito: letra A (Information Expert). A situação descrita segue o padrão Information Expert do GRASP: a responsabilidade de calcular o valor total por item é atribuída à classe ItemCesta, que possui a informação necessária (quantidade e preço do produto), e o cálculo do valor total da compra é atribuído à classe Cesta, que possui a lista de itens. Esse padrão recomenda que a responsabilidade seja dada à classe que detém as informações para cumpri-la.

A questão testa o conhecimento dos padrões de atribuição de responsabilidades (GRASP) propostos por Craig Larman. Vamos analisar cada alternativa:

Padrão GRASP

Descrição

Aplicação no Cenário

Correta?

Information Expert

Responsabilidade atribuída ao objeto que possui as informações necessárias

ItemCesta (quantidade e preço) calcula subtotal; Cesta (lista de itens) calcula total

✅ Sim

Creator

Define quem cria instâncias de objetos

Questão não trata de criação de objetos

❌ Não

Pure Fabrication

Cria classe artificial para baixo acoplamento

Classes são do domínio, não fabricações

❌ Não

Controller

Recebe e coordena mensagens do sistema

Cálculo de totais não é papel de controller

❌ Não

Polymorphism

Usa herança/polimorfismo para variações de comportamento

Não há variação de comportamento por tipo

❌ Não

1Information Expert
Responsabilidade a quem tem a informação
Ex.: ItemCesta calcula subtotal
2Creator
Quem cria instâncias
3Pure Fabrication
Classe artificial do domínio
4Controller
Coordena mensagens do sistema
5Polymorphism
Variação por tipo/herança
GRASP (Larman)
LEVELsoulevel.com.br
GRASP (Larman): Information Expert (Responsabilidade a quem tem a informação, Ex.: ItemCesta calcula subtotal); Creator (Quem cria instâncias); Pure Fabrication (Classe artificial do domínio); Controller (Coordena mensagens do sistema); Polymorphism (Variação por tipo/herança)

Alternativa A — ✅ Correta ⟵ GABARITO

Information Expert. O padrão Information Expert afirma que a responsabilidade deve ser atribuída ao objeto que possui as informações necessárias para executá-la. No cenário, a classe ItemCesta sabe a quantidade e o preço do produto, então é a expert para calcular o subtotal. A classe Cesta possui a coleção de itens, sendo a expert para somar os subtotais. Aplicação clássica do padrão.

Alternativa B — ❌ Incorreta

Creator. O padrão Creator define quem deve criar instâncias de objetos, tipicamente quando a classe agrega, contém ou usa intensamente os objetos a serem criados. A questão não trata de criação de objetos, mas de cálculo de valores.

Alternativa C — ❌ Incorreta

Pure Fabrication. Esse padrão recomenda criar uma classe artificial (que não representa um conceito do domínio) para manter baixo acoplamento e alta coesão, quando a solução natural viola esses princípios. No exemplo, as classes Produto, ItemCesta e Cesta são classes do domínio, não fabricações.

Alternativa D — ❌ Incorreta

Controller. O padrão Controller atribui a responsabilidade de receber e coordenar as mensagens do sistema a uma classe que representa o sistema como um todo ou um cenário de caso de uso. O cálculo de totais não é um papel de controller, é responsabilidade das próprias classes de domínio.

Alternativa E — ❌ Incorreta

Polymorphism. O padrão Polymorphism usa herança e polimorfismo para tratar variações de comportamento com base no tipo. Não há variação de comportamento por tipo no problema descrito; os cálculos são lineares e não dependem de subtipos.

A banca (FGV) cobrou um conceito fundamental do GRASP, frequentemente explorado em provas de análise e projeto orientado a objetos. Lembre-se: Information Expert coloca a responsabilidade onde está a informação.

Link permanente: /questoes/fg071490