Pular para o conteúdo principal

Questão de Engenharia de Software — Padrões de Projeto (Engenharia de Software) — FGV 2024

Engenharia de SoftwarePadrões de Projeto (Engenharia de Software)
Código
fg165477
Banca
FGV
Órgão
ALETO
Ano
2024
Cargo
Ana Leg ( )

O diagrama a seguir mostra um módulo de notificação para uma aplicação de e-commerce para permitir diversos serviços de notificação, tais como, e-mail e push.

 

Imagem associada para resolução da questão

Assinale a opção que indica o padrão de projeto usado nesse módulo.

  1. ASingleton.
  2. BFactory Method.
  3. CAbstract Factory.
  4. DObserver.
  5. EPrototype.
Revelar gabarito e comentário

GabaritoD — Observer.

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 de Projeto: Observer

Gabarito: letra D. O módulo de notificação descrito — que permite diversos serviços de notificação (e-mail, push) — é o caso clássico do padrão Observer: um sujeito (a aplicação de e-commerce) mantém uma lista de observadores (os serviços de notificação) e os notifica automaticamente quando seu estado muda. A fonte é o catálogo GoF (Gang of Four), que classifica o Observer como um padrão comportamental.

O padrão Observer resolve exatamente o problema de "um-para-muitos": quando um objeto muda de estado, todos os objetos dependentes devem ser notificados e atualizados automaticamente. No módulo de notificação, a aplicação (sujeito) não precisa conhecer os detalhes de cada serviço (e-mail, push) — ela apenas mantém uma lista de observadores e dispara a notificação para todos. Isso desacopla o emissor dos receptores: novos serviços podem ser adicionados sem alterar o código do sujeito.

Os padrões de projeto GoF são divididos em três famílias, e saber a família já elimina metade das alternativas:

Família

Problema que resolve

Exemplos

Criação (Creational)

Como criar objetos

Singleton, Factory Method, Abstract Factory, Prototype

Estrutural (Structural)

Como compor classes/objetos

Adapter, Decorator, Composite

Comportamental (Behavioral)

Como objetos se comunicam e interagem

Observer, Strategy, Command

O Observer é comportamental porque define um mecanismo de comunicação entre objetos: o sujeito notifica os observadores sem precisar saber quem são. É a essência do módulo de notificação: a aplicação não sabe se o serviço é e-mail ou push — ela apenas notifica.

A pegadinha da banca está em confundir o Observer com padrões de criação (Singleton, Factory Method, Abstract Factory, Prototype). Esses padrões lidam com a criação de objetos, não com a comunicação entre eles. O módulo de notificação não está criando objetos — está distribuindo eventos para múltiplos destinatários.

Guarde a fronteira: criação (como o objeto nasce) × comportamento (como os objetos se comunicam). É exatamente nela que as alternativas se dividem.

Alternativa A — ❌ Incorreta

O Singleton garante que uma classe tenha apenas uma instância e fornece um ponto global de acesso a ela. É um padrão de criação. O módulo de notificação não trata de instância única — trata de múltiplos serviços de notificação sendo notificados. A confusão pode surgir porque o sujeito do Observer costuma ser único, mas o padrão em si não é sobre isso.

Alternativa B — ❌ Incorreta

O Factory Method define uma interface para criar um objeto, mas deixa as subclasses decidirem qual classe instanciar. É um padrão de criação. O módulo de notificação não está criando objetos de notificação — está notificando serviços existentes. A palavra-chave "notificação" aponta para comportamento, não para criação.

Alternativa C — ❌ Incorreta

A Abstract Factory fornece uma interface para criar famílias de objetos relacionados sem especificar suas classes concretas. É um padrão de criação. O módulo de notificação não cria famílias de objetos — ele distribui notificações para serviços variados. A confusão com Factory Method é comum, mas ambos são de criação, e a questão pede o padrão de comunicação.

Alternativa D — ✅ Correta ⟵ GABARITO

O Observer define uma dependência um-para-muitos entre objetos, de modo que quando um objeto muda de estado, todos os seus dependentes são notificados e atualizados automaticamente. É exatamente o que o módulo de notificação faz: a aplicação (sujeito) notifica os serviços de e-mail e push (observadores) sobre eventos. É um padrão comportamental, pois trata da interação entre objetos.

Alternativa E — ❌ Incorreta

O Prototype permite criar novos objetos copiando um protótipo existente, em vez de instanciar diretamente. É um padrão de criação. O módulo de notificação não está clonando objetos — está notificando serviços. A palavra "protótipo" pode confundir com prototipação de software, mas aqui é o padrão GoF, que é de criação.

NÃO CAIA NESSA!

A banca mistura padrões de criação (Singleton, Factory Method, Abstract Factory, Prototype) com o padrão comportamental (Observer). O candidato que decora os nomes sem entender a família erra. Lembre: notificação = comunicação entre objetos = comportamento. Criação é sobre "como o objeto nasce".

PEGA ESSA DICA!

Na prova, ao identificar o padrão, pergunte-se: "o que este padrão resolve?" Se for "criar objetos", é criação; se for "compor estruturas", é estrutural; se for "comunicar objetos", é comportamental. O Observer é o único das alternativas que trata de comunicação.

Gabarito: letra D

Link permanente: /questoes/fg165477