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

O design pattern cujo propósito é compartilhar partes comuns de estado entre múltiplos objetos, ao invés de manter todos os dados em cada objeto, promovendo economia de memória RAM, é denominado

  1. ACommand.
  2. BMediator.
  3. CDecorator.
  4. DProxy.
  5. EFlyweight.
Revelar gabarito e comentário

GabaritoE — Flyweight.

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 (GoF): Flyweight

Gabarito: letra E. O padrão Flyweight tem exatamente o propósito descrito no enunciado: compartilhar partes comuns de estado entre múltiplos objetos para economizar memória RAM. Ele é um padrão estrutural do catálogo GoF (Gang of Four), e a alternativa correta é a letra E.

O enunciado descreve a essência do padrão Flyweight: em vez de cada objeto armazenar todos os seus dados, o estado intrínseco (comum, compartilhável) é extraído e centralizado em objetos leves (flyweights) que podem ser reutilizados por muitos contextos. O estado extrínseco (específico de cada uso) fica fora do flyweight e é passado pelo cliente. Isso reduz drasticamente o número de objetos criados e, consequentemente, o consumo de memória.

Para entender por que as outras alternativas estão erradas, é preciso conhecer o propósito de cada padrão citado:

  • Command: encapsula uma solicitação como um objeto, permitindo parametrizar clientes com filas, requisições e operações, além de suportar operações reversíveis (undo). Não tem relação com compartilhamento de estado ou economia de memória.

  • Mediator: define um objeto que centraliza a comunicação entre um conjunto de objetos, promovendo baixo acoplamento. Não compartilha estado entre objetos.

  • Decorator: adiciona responsabilidades a um objeto dinamicamente, de forma transparente. É um wrapper que agrega comportamento, sem compartilhar estado.

  • Proxy: fornece um substituto ou representante de outro objeto para controlar o acesso a ele. Pode ser usado para lazy loading, controle de acesso, logging, etc., mas não compartilha estado entre múltiplos objetos.

A pegadinha da banca está em confundir o Flyweight com outros padrões estruturais ou comportamentais, especialmente o Proxy, que também lida com economia de recursos em alguns contextos, mas por mecanismo diferente (adiamento de criação, não compartilhamento).

Padrões GoF
  • 1Estruturais
    • Flyweight
      • Compartilha estado comum
      • Economia de memória RAM
    • Decorator
      • Adiciona responsabilidades
    • Proxy
      • Controla acesso
  • 2Comportamentais
    • Command
      • Encapsula solicitação
    • Mediator
      • Centraliza comunicação
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

O padrão Command transforma uma solicitação em um objeto independente, permitindo que você parametrize clientes com diferentes requisições, enfileire ou registre solicitações e suporte operações que podem ser desfeitas. Ele não tem qualquer relação com compartilhamento de estado entre objetos nem com economia de memória. O erro aqui é associar um padrão comportamental de encapsulamento de ações ao conceito de otimização de memória.

Alternativa B — ❌ Incorreta

O padrão Mediator define um objeto que encapsula a interação entre um conjunto de objetos, promovendo baixo acoplamento ao evitar que os objetos se refiram uns aos outros explicitamente. Ele centraliza a comunicação, mas não compartilha estado entre os objetos — cada objeto mantém seu próprio estado. A confusão possível é pensar que "centralizar" algo implica compartilhar, mas o Mediator centraliza a comunicação, não o estado.

Alternativa C — ❌ Incorreta

O padrão Decorator anexa responsabilidades adicionais a um objeto dinamicamente, servindo como uma alternativa flexível à herança para estender funcionalidades. Ele envolve o objeto original e delega chamadas, adicionando comportamento antes ou depois. Não há compartilhamento de estado nem economia de memória — pelo contrário, o Decorator cria novos objetos que envolvem o original, o que pode até aumentar o uso de memória.

Alternativa D — ❌ Incorreta

O padrão Proxy fornece um substituto ou representante de outro objeto para controlar o acesso a ele. Ele pode ser usado para adiar a criação de objetos pesados (lazy loading), controlar permissões, fazer logging, etc. Embora o Proxy possa indiretamente economizar memória ao adiar a criação, o mecanismo é completamente diferente do Flyweight: o Proxy não compartilha estado entre múltiplos objetos; ele apenas controla o acesso a um único objeto. A banca explora essa confusão: ambos lidam com otimização, mas de formas distintas.

Alternativa E — ✅ Correta ⟵ GABARITO

O padrão Flyweight é exatamente o que o enunciado descreve: compartilhar partes comuns de estado entre múltiplos objetos, em vez de manter todos os dados em cada objeto, promovendo economia de memória RAM. Ele é um padrão estrutural que usa compartilhamento para suportar grandes quantidades de objetos de granularidade fina de forma eficiente. O estado intrínseco é armazenado no flyweight e o extrínseco é passado pelo cliente, permitindo que um mesmo flyweight seja usado em muitos contextos.

PEGA ESSA DICA!

Para identificar o Flyweight na prova, procure por palavras-chave como "compartilhar", "economia de memória", "estado comum", "objetos leves", "reutilização". Se a questão falar em "controle de acesso" ou "adiar criação", pense em Proxy; se falar em "adicionar responsabilidades", pense em Decorator; se falar em "encapsular solicitação", pense em Command; se falar em "centralizar comunicação", pense em Mediator.

Gabarito: letra E

Link permanente: /questoes/vu197014