Questão de Engenharia de Software — Padrões de Projeto (Engenharia de Software) — FGV 2024
- Código
- fg165483
- Banca
- FGV
- Órgão
- CVM
- Ano
- 2024
- Cargo
- Ana ( )

- AObserver;
- BSingleton;
- CData Access Object;
- DIntercept Filter;
- ETemplate Method.

GabaritoE — 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.
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.
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.
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.
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.
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