Pular para o conteúdo principal

Questão de Engenharia de Software — Orientação a Objetos — FCC 2025

Engenharia de SoftwareOrientaçã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
  1. AAdapter.
  2. BTemplate Method.
  3. CCommand.
  4. DFacade.
  5. 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.

Gabarito: letra B — Template Method.

Link permanente: /questoes/fc073227