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
fg165483
Banca
FGV
Órgão
CVM
Ano
2024
Cargo
Ana ( )
Os padrões de projeto são extremamente úteis para organizar a arquitetura do sistema e o modelo de programação. Eles são projetados em diagramas da UML, como no modelo a seguir.   O diagrama expressa o padrão de projeto:Imagem associada para resolução da questão
  1. AObserver;
  2. BSingleton;
  3. CData Access Object;
  4. DIntercept Filter;
  5. ETemplate Method.
Revelar gabarito e comentário

GabaritoE — Template Method.

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: Template Method

Gabarito: letra E. O diagrama apresentado expressa o padrão de projeto Template Method, que define o esqueleto de um algoritmo em uma operação, postergando alguns passos para as subclasses — exatamente o que a estrutura de classes com método abstrato e subclasses que o implementam representa. A fonte é o catálogo clássico de padrões de projeto (GoF), que classifica o Template Method como um padrão comportamental.

O Template Method é um dos padrões de projeto mais cobrados em concursos, e a chave para reconhecê-lo está na estrutura de herança com método abstrato. O padrão define, na classe base (abstrata), o esqueleto de um algoritmo — a sequência de passos — e delega a implementação de um ou mais desses passos às subclasses. Isso permite que diferentes subclasses variem partes do algoritmo sem alterar sua estrutura geral. No diagrama, a classe abstrata (geralmente no topo) declara o método que contém o algoritmo (o "template") e um ou mais métodos abstratos que as subclasses concretas implementam. A relação de herança (seta com triângulo vazio) entre a classe base e as subclasses é o sinal visual mais forte desse padrão.

A distinção que importa aqui é entre o Template Method e os demais padrões listados. O Observer é comportamental, mas sua estrutura é de associação (um sujeito mantém uma lista de observadores), não de herança com método abstrato. O Singleton é criacional e tem estrutura de uma única classe com atributo estático e método de acesso global. O Data Access Object (DAO) é um padrão de arquitetura de persistência, que separa o acesso a dados da lógica de negócio. O Intercept Filter é um padrão de apresentação (web), que processa requisições antes de chegarem ao destino. Nenhum deles tem a assinatura estrutural de herança com método abstrato que caracteriza o Template Method.

A pegadinha que a banca explora neste tema é a confusão entre padrões que usam herança. O Template Method e o Factory Method (não listado) ambos usam herança e métodos abstratos, mas a intenção é diferente: o Template Method define o esqueleto de um algoritmo completo, enquanto o Factory Method delega apenas a criação de um objeto. Além disso, o Template Method é frequentemente confundido com o Strategy, mas a diferença é estrutural: o Template Method usa herança (subclasses implementam passos), enquanto o Strategy usa composição (objetos intercambiáveis). Guarde essa fronteira: herança com método abstrato = Template Method; é exatamente nela que as alternativas se dividem.

1Tipo
Comportamental
2Estrutura
Classe abstrata (esqueleto do algoritmo)
Método abstrato (passos delegados)
Subclasses implementam
3Distinções
Factory Method: delega só criação de objeto
Strategy: usa composição, não herança
Template Method (GoF)
LEVELsoulevel.com.br
Template Method (GoF): Tipo (Comportamental); Estrutura (Classe abstrata (esqueleto do algoritmo), Método abstrato (passos delegados), Subclasses implementam); Distinções (Factory Method: delega só criação de objeto, Strategy: usa composição, não herança)

Alternativa A — ❌ Incorreta

O Observer é um padrão comportamental que 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. Sua estrutura típica envolve um Sujeito (Subject) que mantém uma lista de Observadores (Observers) e os notifica via associação — não herança. O diagrama da questão mostra herança com método abstrato, não associação com lista de observadores. A banca troca o padrão comportamental de notificação pelo padrão de definição de algoritmo.

Alternativa B — ❌ Incorreta

O Singleton é um padrão criacional que garante que uma classe tenha apenas uma instância e fornece um ponto global de acesso a ela. Sua estrutura é de uma única classe com um atributo estático privado e um método estático público (geralmente getInstance()). Não há herança, nem método abstrato, nem subclasses — elementos centrais do diagrama apresentado. A banca troca o padrão de criação de objeto único pelo padrão de definição de algoritmo.

Alternativa C — ❌ Incorreta

O Data Access Object (DAO) é um padrão de arquitetura que separa a lógica de acesso a dados da lógica de negócio, fornecendo uma interface para operações de persistência (CRUD). Sua estrutura envolve uma interface, uma implementação concreta e, frequentemente, uma entidade de domínio — mas não é definido por herança com método abstrato que define o esqueleto de um algoritmo. O DAO é um padrão de persistência, não um padrão comportamental de algoritmo. A banca troca o padrão de acesso a dados pelo padrão de definição de algoritmo.

Alternativa D — ❌ Incorreta

O Intercept Filter é um padrão de apresentação (arquitetura web) que processa requisições e respostas antes e depois de chegarem ao destino, permitindo aplicar filtros (autenticação, logging, compressão) de forma plugável. Sua estrutura envolve uma cadeia de filtros e um alvo (target), não herança com método abstrato. O diagrama da questão não mostra cadeia de filtros nem processamento de requisições. A banca troca o padrão de filtro de requisições pelo padrão de definição de algoritmo.

Alternativa E — ✅ Correta ⟵ GABARITO

O Template Method é um padrão comportamental que define o esqueleto de um algoritmo em uma operação, postergando alguns passos para as subclasses. A classe base (abstrata) contém o método que implementa o algoritmo (o "template") e declara métodos abstratos que as subclasses concretas implementam. O diagrama da questão mostra exatamente essa estrutura: uma classe abstrata com método abstrato e subclasses que o implementam, ligadas por herança. É o reconhecimento visual direto do padrão.

A regra de ouro para a prova: ao ver um diagrama com classe abstrata + método abstrato + subclasses que o implementam, o padrão é o Template Method. Ele é o único entre os listados que se estrutura por herança com método abstrato para variar partes de um algoritmo.

Gabarito: letra E

Link permanente: /questoes/fg165483