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
vu196493
Banca
VUNESP
Órgão
EPC
Ano
2023
Cargo
Ana ( )

Um determinado design pattern, aplicável em desenvolvimento com JavaScript, consiste em transformar uma requisição em um objeto que carrega toda a informação necessária sobre essa requisição, podendo ser usado para armazenar requisições em uma fila para processamento posterior. Esse design pattern é conhecido como

  1. ACommand.
  2. BSingleton.
  3. CFactory.
  4. DMemento.
  5. ETemplate Method.
Revelar gabarito e comentário

GabaritoA — Command.

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 (Design Patterns)

Gabarito: letra A. O padrão Command encapsula uma requisição como um objeto, carregando toda a informação necessária para executá-la, o que permite armazenar requisições em filas, desfazer operações e implementar transações. Essa é a definição clássica do padrão, conforme descrito no livro Design Patterns (GoF).

O padrão Command é um dos 23 padrões de projeto catalogados pela Gang of Four (GoF) e pertence à família dos padrões comportamentais. Sua essência é transformar uma solicitação (um pedido para executar uma ação) em um objeto independente, que contém tudo o que é necessário para realizar essa ação. Esse objeto pode então ser passado como parâmetro, armazenado em uma estrutura de dados (como uma fila ou pilha), ou até mesmo serializado e enviado pela rede.

A grande vantagem desse padrão é o desacoplamento entre o objeto que solicita a operação (o invoker) e o objeto que sabe como executá-la (o receiver). O invoker não precisa conhecer os detalhes da implementação; ele apenas dispara o comando. Isso permite criar funcionalidades poderosas como:

  • Fila de tarefas: comandos podem ser enfileirados e executados em lote, em segundo plano ou em um momento posterior.

  • Desfazer/Refazer (undo/redo): cada comando pode ter uma operação inversa, permitindo reverter ações.

  • Transações: um conjunto de comandos pode ser agrupado e executado de forma atômica.

  • Macros: uma sequência de comandos pode ser gravada e reproduzida.

Um exemplo prático em JavaScript: imagine um editor de texto com botões de "copiar", "colar" e "desfazer". Em vez de cada botão chamar diretamente o método correspondente, cada ação é encapsulada em um objeto CopyCommand, PasteCommand, etc. O botão (invoker) apenas chama o método execute() do comando. Para implementar o "desfazer", cada comando também tem um método undo(). Para criar uma fila de operações, basta armazenar os comandos em um array e processá-los um a um.

A banca explora a confusão entre o Command e outros padrões, especialmente o Memento, que também lida com o estado de um objeto, mas de forma diferente: o Memento captura e externaliza o estado interno de um objeto para restaurá-lo depois, sem quebrar o encapsulamento. Enquanto o Command encapsula uma ação, o Memento encapsula um estado.

Guarde a distinção central: Command = encapsular uma ação/requisição como objeto; Memento = capturar e restaurar o estado de um objeto. É exatamente nessa fronteira que as alternativas se dividem.

Padrões de Projeto (GoF)
  • 1Criacionais
    • Singleton (instância única)
    • Factory (encapsula criação)
  • 2Comportamentais
    • Command (encapsula ação/requisição)
    • Memento (captura/restaura estado)
    • Template Method (esqueleto de algoritmo)
LEVEL · soulevel.com.br

Alternativa A — ✅ Correta ⟵ GABARITO

O padrão Command é exatamente o que o enunciado descreve: transformar uma requisição em um objeto que carrega toda a informação necessária sobre ela, podendo ser usado para armazenar requisições em uma fila para processamento posterior. É a definição canônica do padrão, presente no catálogo GoF.

Alternativa B — ❌ Incorreta

O Singleton é um padrão criacional que garante que uma classe tenha apenas uma única instância em todo o sistema, fornecendo um ponto de acesso global a ela. Não tem relação com encapsular requisições ou criar filas de processamento. O erro aqui é confundir a finalidade: Singleton resolve o problema de instância única, não de encapsulamento de ações.

Alternativa C — ❌ Incorreta

O Factory (ou Factory Method) é um padrão criacional que define uma interface para criar objetos, mas permite que as subclasses decidam qual classe instanciar. Ele encapsula o processo de criação de objetos, não o processo de execução de requisições. A confusão surge porque ambos "encapsulam" algo, mas o Factory encapsula a criação, enquanto o Command encapsula a ação.

Alternativa D — ❌ Incorreta

O Memento é um padrão comportamental que captura e externaliza o estado interno de um objeto (o "estado" do objeto, não a requisição) para que ele possa ser restaurado posteriormente, sem violar o encapsulamento. Embora também lide com a ideia de "armazenar algo para uso posterior", o que se armazena é o estado, não a requisição/ação. É a alternativa que mais se aproxima do Command, mas a diferença é crucial: Memento guarda estado; Command guarda ação.

Alternativa E — ❌ Incorreta

O Template Method é um padrão comportamental que define o esqueleto de um algoritmo em uma operação, postergando alguns passos para as subclasses. Ele permite que subclasses redefinam certos passos de um algoritmo sem mudar sua estrutura. Não tem relação com encapsular requisições ou criar filas; trata-se de reutilizar a estrutura de um algoritmo, não de encapsular ações.

Gabarito: letra A

Link permanente: /questoes/vu196493