Pular para o conteúdo principal

Questão de Engenharia de Software — Padrões de Projeto (Engenharia de Software) — VUNESP 2023

Engenharia de SoftwarePadrões de Projeto (Engenharia de Software)
Código
vu197065
Banca
VUNESP
Órgão
CIJUN
Ano
2023
Cargo
Arqt ( )

O design pattern conhecido como Template Method

  1. Aé criacional.
  2. Bé estrutural.
  3. Cdefine o esqueleto de um algoritmo em uma classe, mas deixa subclasses sobrescreverem métodos correspondentes aos passos desse algoritmo.
  4. Ddeixa requisições passarem por uma cadeia de tratadores (handlers), sendo que cada tratador decide se processará a requisição ou se a repassará para o próximo tratador na cadeia.
  5. Eutiliza a linguagem XSLT para descrever transformações entre arquivos no formato XML, por meio de templates, sendo especialmente utilizado para converter dados representados em XML para exibições em HTML.
Revelar gabarito e comentário

GabaritoC — define o esqueleto de um algoritmo em uma classe, mas deixa subclasses sobrescreverem métodos correspondentes aos passos desse algoritmo.

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”.

Template Method: padrão comportamental que define o esqueleto de um algoritmo

Gabarito: letra C. O Template Method é um padrão de projeto comportamental que define o esqueleto de um algoritmo em uma operação, postergando alguns passos para as subclasses — exatamente o que a alternativa C descreve. A alternativa D descreve o padrão Chain of Responsibility (cadeia de responsabilidade), e a E mistura conceitos de XSLT, que é uma linguagem de transformação XML, não um padrão de projeto.

Os padrões de projeto (design patterns) são soluções gerais e reutilizáveis para problemas recorrentes no desenvolvimento de software. Eles foram popularizados pelo livro "Design Patterns: Elements of Reusable Object-Oriented Software" (a "Gang of Four" — GoF), que os classificou em três grandes categorias: criacionais, estruturais e comportamentais. Essa classificação é fundamental para entender a questão, pois o Template Method pertence à categoria comportamental, que trata de como as classes e objetos interagem e distribuem responsabilidades.

O Template Method resolve um problema específico: quando temos um algoritmo que possui uma estrutura fixa, mas com alguns passos que podem variar. Em vez de duplicar o código do algoritmo em cada classe que precisa dele, o padrão define o esqueleto do algoritmo em um método (o "template method") de uma classe base (geralmente abstrata). As subclasses, então, implementam ou sobrescrevem apenas os passos que variam, sem alterar a estrutura geral do algoritmo. Isso promove a reutilização de código e a inversão de controle (o princípio de Hollywood: "não nos chame, nós chamaremos você").

Um exemplo clássico é um sistema de preparo de bebidas: uma classe abstrata Bebida define o método preparar() (o template method) que segue os passos: ferver água, adicionar o ingrediente principal, despejar na xícara e adicionar complementos. As subclasses Cha e Cafe sobrescrevem apenas o passo "adicionar o ingrediente principal" (colocar saquinho de chá ou pó de café), mantendo a estrutura do algoritmo intacta. A pegadinha da banca aqui é justamente confundir o Template Method com outros padrões, especialmente o Chain of Responsibility, que tem uma descrição muito parecida com a da alternativa D.

A distinção crucial é: o Template Method define a estrutura de um algoritmo e delega passos específicos para subclasses (relação de herança); o Chain of Responsibility cria uma cadeia de objetos onde cada um pode processar a requisição ou passá-la adiante (relação de composição). Enquanto o Template Method é sobre "como executar um algoritmo", o Chain of Responsibility é sobre "quem vai tratar uma requisição". Guarde essa fronteira: é exatamente nela que as alternativas se dividem.

Template Method
  • 1Categoria
    • Comportamental
  • 2Intenção
    • Define esqueleto do algoritmo
    • Subclasses sobrescrevem passos
  • 3Relação
    • Herança
  • 4Princípio
    • Hollywood (inversão de controle)
  • 5Confusão comum
    • Chain of Responsibility
      • Comportamental
      • Cadeia de handlers
      • Composição
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

O Template Method não é um padrão criacional. Padrões criacionais (como Factory Method, Abstract Factory, Builder, Singleton) lidam com o processo de criação de objetos, abstraindo a forma como eles são instanciados. O Template Method é um padrão comportamental, pois trata da organização de algoritmos e da distribuição de responsabilidades entre classes.

Alternativa B — ❌ Incorreta

O Template Method não é um padrão estrutural. Padrões estruturais (como Adapter, Composite, Proxy, Decorator) lidam com a composição de classes e objetos para formar estruturas maiores. O Template Method é um padrão comportamental, focado no comportamento e na interação entre objetos, especificamente na definição de um algoritmo com passos delegáveis.

Alternativa C — ✅ Correta ⟵ GABARITO

Esta é a definição precisa do Template Method. Ele "define o esqueleto de um algoritmo em uma classe" (o método template) "mas deixa subclasses sobrescreverem métodos correspondentes aos passos desse algoritmo" (os métodos abstratos ou hooks). Isso permite que o comportamento de partes do algoritmo seja alterado sem modificar sua estrutura geral, promovendo reutilização e flexibilidade.

Alternativa D — ❌ Incorreta

Esta alternativa descreve o padrão Chain of Responsibility (Cadeia de Responsabilidade), não o Template Method. No Chain of Responsibility, uma requisição é passada por uma cadeia de handlers, e cada um decide se a processa ou a repassa para o próximo. É um padrão comportamental, mas com uma intenção completamente diferente: desacoplar o remetente de uma requisição de seus receptores, dando a múltiplos objetos a chance de tratá-la.

Alternativa E — ❌ Incorreta

Esta alternativa mistura conceitos de forma incorreta. XSLT (eXtensible Stylesheet Language Transformations) é uma linguagem usada para transformar documentos XML em outros formatos (como HTML), mas não é um padrão de projeto. É uma tecnologia de processamento de XML. O Template Method é um padrão de projeto de software, não uma linguagem de transformação.

NÃO CAIA NESSA!

A banca explora a confusão entre padrões comportamentais com descrições parecidas. A alternativa D descreve o Chain of Responsibility, que também é um padrão comportamental, mas com uma intenção diferente. A chave é lembrar que o Template Method foca em definir a estrutura de um algoritmo (herança), enquanto o Chain of Responsibility foca em passar uma requisição por uma cadeia de handlers (composição).

PEGA ESSA DICA!

Para diferenciar padrões de projeto, foque na intenção de cada um. Pergunte-se: "qual problema ele resolve?" O Template Method resolve o problema de "como evitar duplicação de código quando tenho um algoritmo com passos variáveis". O Chain of Responsibility resolve "como dar a múltiplos objetos a chance de tratar uma requisição sem acoplamento rígido". Memorize a intenção, não apenas o nome.

Gabarito: letra C

Link permanente: /questoes/vu197065