Questão de Engenharia de Software — Orientação a Objetos — FCC 2025
Engenharia de Software›Orientação a Objetos
Código
fc073227
Banca
FCC
Órgão
Prefeitura de São Paulo - SP
Ano
2025
Nível
Superior
Cargo
Analista de Planejamento e Desenvolvimento Organizacional Tecnologia da Informação e Comunicação
Durante a manutenção do sistema de licitações de uma prefeitura, a equipe de TI identificou que diversas partes do código se tornaram difíceis de modificar devido à alta interdependência entre os módulos. Um dos analistas propõe a aplicação de princípios de design que favoreçam a evolução do código e a aplicação do DRY. O problema identificado pode ser resolvido adequadamente refatorando o código para encapsular as funcionalidades comuns em classes abstratas, aplicando o padrão
AAdapter.
BTemplate Method.
CCommand.
DFacade.
EMemento.
Revelar gabarito e comentário▾
GabaritoB — 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 B. O problema descrito — alta interdependência entre módulos e código difícil de modificar — é resolvido encapsulando funcionalidades comuns em classes abstratas. O padrão Template Method é exatamente a solução: define o esqueleto de um algoritmo (método template) em uma classe abstrata, delegando passos variáveis a subclasses. Isso promove reuso, evita duplicação (DRY) e facilita a manutenção, pois a lógica comum fica centralizada.
A banca testa o conhecimento dos padrões GoF. O Template Method é um padrão comportamental que estrutura um algoritmo em etapas, permitindo que subclasses implementem partes específicas. É o único, entre as opções, que tem como objetivo encapsular o código comum em uma classe abstrata.
Padrão de Projeto
Categoria GoF
Objetivo Principal
Relação com Classe Abstrata
Aplicação ao Problema (DRY / Manutenção)
Adapter
Estrutural
Converter interfaces incompatíveis
Não encapsula lógica comum; adapta interfaces
❌ Não resolve o problema
Template Method
Comportamental
Definir esqueleto de algoritmo, delegando passos a subclasses
Sim: encapsula funcionalidades comuns na classe abstrata
✅ Correto: promove reuso e reduz interdependência
Command
Comportamental
Encapsular solicitação como objeto
Não encapsula lógica comum; foco em parametrização e desfazer
❌ Não resolve o problema
Facade
Estrutural
Fornecer interface simplificada para subsistema
Não usa herança; oculta complexidade
❌ Não resolve o problema
Memento
Comportamental
Capturar e restaurar estado interno
Não encapsula lógica comum; foco em snapshot
❌ Não resolve o problema
Alternativa A — ❌ Incorreta
O padrão Adapter converte a interface de uma classe em outra interface esperada pelo cliente. Não encapsula lógica comum em classes abstratas; seu foco é compatibilizar interfaces.
Alternativa B — ✅ Correta ⟵ GABARITO
O Template Method define um método que contém um algoritmo em sua estrutura, com partes abstratas que são implementadas por subclasses. A classe abstrata concentra o código repetido, atendendo ao DRY e reduzindo o acoplamento.
Alternativa C — ❌ Incorreta
O Command encapsula uma solicitação como um objeto, permitindo parametrizar clientes com filas, logs e desfazer operações. Não está relacionado ao encapsulamento de funcionalidades comuns em classes abstratas.
Alternativa D — ❌ Incorreta
O Facade fornece uma interface simplificada para um conjunto de interfaces de um subsistema. Ele oculta a complexidade, mas não promove reuso via herança de uma classe abstrata.
Alternativa E — ❌ Incorreta
O Memento captura e externaliza o estado interno de um objeto sem violar o encapsulamento, permitindo restaurá-lo posteriormente. Não se aplica ao problema de código duplicado ou à necessidade de classes abstratas.
PEGA ESSA DICA!
O Template Method é o padrão ideal quando você tem várias classes que seguem o mesmo fluxo, mas com implementações diferentes em alguns passos. Sempre que pensar em “colocar o código comum em uma classe abstrata e deixar os detalhes para as subclasses”, pense em Template Method. Compare com Strategy, que usa composição em vez de herança.