Pular para o conteúdo principal

Questão de Engenharia de Software — Padrões de Projeto (Engenharia de Software) — FCC 2024

Engenharia de SoftwarePadrões de Projeto (Engenharia de Software)
Código
fc147285
Banca
FCC
Órgão
BAHIAGÁS
Ano
2024
Cargo
APO ( )

Um Analista está desenvolvendo um projeto cujos requisitos técnicos de software exigem que ele utilize padrões de projeto para permitir:

 

I. O salvamento e restauração do estado anterior de um objeto sem revelar os detalhes de sua implementação.

 

II. À produção de famílias de objetos relacionados sem ter que especificar suas classes concretas.

 

III. A construção de objetos complexos passo a passo sendo diferentes tipos e representações de um objeto usando 0 mesmo código de construção.

 

Trata-se dos padrões

  1. AMemento, Abstract Factory e Builder.
  2. BFactory Method, Singleton e Builder.
  3. CSingleton, Abstract Factory e Strategy.
  4. DMemento, Observer e Factory Method.
  5. EAbstract Factory, Singieton e Observer.
Revelar gabarito e comentário

GabaritoA — Memento, Abstract Factory e Builder.

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: Memento, Abstract Factory e Builder

Gabarito: letra A. A questão descreve, na ordem, as intenções dos padrões Memento (salvar e restaurar o estado anterior de um objeto sem violar o encapsulamento), Abstract Factory (produzir famílias de objetos relacionados sem especificar as classes concretas) e Builder (construir objetos complexos passo a passo, permitindo diferentes representações com o mesmo código de construção). Essas definições são clássicas do catálogo GoF (Gamma et al., 1995), a referência canônica para padrões de projeto.

Os padrões de projeto (design patterns) são soluções gerais e reutilizáveis para problemas recorrentes em projeto de software. Eles não são código pronto, mas sim descrições de como resolver um problema em um determinado contexto. O catálogo GoF (Gang of Four — Gamma, Helm, Johnson e Vlissides) organiza 23 padrões em três famílias, conforme o tipo de problema que resolvem:

  • Padrões de Criação (Creational): lidam com o processo de criação de objetos, abstraindo a forma como eles são instanciados. Exemplos: Singleton, Factory Method, Abstract Factory, Builder, Prototype.

  • Padrões Estruturais (Structural): tratam da composição de classes e objetos para formar estruturas maiores. Exemplos: Adapter, Decorator, Composite, Facade, Proxy.

  • Padrões Comportamentais (Behavioral): focam na comunicação e interação entre objetos, distribuindo responsabilidades. Exemplos: Observer, Strategy, Command, Memento, State.

A questão cobra exatamente a intenção de três padrões específicos, e a chave para acertar é reconhecer a descrição de cada um. Vamos detalhar:

Memento (Comportamental): O objetivo é capturar e externalizar o estado interno de um objeto (o "originador") sem violar o encapsulamento, permitindo que esse estado seja restaurado posteriormente. O padrão usa três papéis: o Originador (objeto que tem o estado), o Memento (objeto que armazena o estado) e o Caretaker (que guarda os mementos e os usa para desfazer/refazer ações). É a base para funcionalidades de "undo" (desfazer) em editores de texto, por exemplo.

Abstract Factory (Criação): Fornece uma interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas. O cliente usa a fábrica abstrata e recebe produtos que pertencem a uma mesma família, garantindo consistência entre eles. Por exemplo, uma fábrica de componentes de interface gráfica pode criar botões, caixas de texto e menus que seguem o mesmo estilo visual (tema claro ou escuro).

Builder (Criação): Separa a construção de um objeto complexo da sua representação, de modo que o mesmo processo de construção possa criar diferentes representações. O padrão usa um Diretor que controla a ordem das etapas de construção e um Builder (abstrato) que define as etapas; cada Builder concreto implementa as etapas de uma forma específica. É útil para objetos com muitos atributos opcionais ou configurações, como uma pizza (tamanho, sabor, borda) ou uma consulta SQL complexa.

A pegadinha da banca está em confundir padrões com intenções parecidas. O Factory Method cria um objeto por vez (uma família de objetos é papel do Abstract Factory). O Singleton garante uma única instância, não tem relação com famílias de objetos. O Observer notifica mudanças de estado, não restaura estados. O Strategy encapsula algoritmos intercambiáveis, não constrói objetos. O Builder é frequentemente confundido com o Abstract Factory, mas a diferença é clara: o Builder foca na construção passo a passo de um objeto complexo, enquanto o Abstract Factory foca na criação de famílias de objetos.

Guarde a fronteira entre as intenções: Memento = restaurar estado, Abstract Factory = famílias de objetos, Builder = construção passo a passo. É exatamente nessa fronteira que as alternativas se dividem.

1Memento
restaurar estado anterior
sem violar encapsulamento
2Abstract Factory
famílias de objetos relacionados
sem especificar classes concretas
3Builder
construção passo a passo
diferentes representações, mesmo código
Padrões GoF (intenções)
LEVELsoulevel.com.br
Padrões GoF (intenções): Memento (restaurar estado anterior, sem violar encapsulamento); Abstract Factory (famílias de objetos relacionados, sem especificar classes concretas); Builder (construção passo a passo, diferentes representações, mesmo código)

Alternativa A — ✅ Correta ⟵ GABARITO

A alternativa A associa corretamente cada requisito ao padrão correspondente: Memento para o salvamento e restauração do estado anterior de um objeto sem revelar detalhes de implementação; Abstract Factory para a produção de famílias de objetos relacionados sem especificar classes concretas; e Builder para a construção de objetos complexos passo a passo, permitindo diferentes tipos e representações com o mesmo código de construção. As três descrições batem exatamente com as intenções clássicas do catálogo GoF.

Alternativa B — ❌ Incorreta

A alternativa B troca o Memento pelo Factory Method. O Factory Method define uma interface para criar um objeto, mas deixa as subclasses decidirem qual classe instanciar — ele cria um objeto por vez, não restaura estados. A descrição do item I (salvar e restaurar estado anterior) é exclusiva do Memento. Além disso, o Singleton (que garante uma única instância) não aparece em nenhum dos requisitos.

Alternativa C — ❌ Incorreta

A alternativa C troca o Memento pelo Singleton e o Builder pelo Strategy. O Singleton garante que uma classe tenha apenas uma instância e fornece um ponto global de acesso — não tem relação com restaurar estados nem com construir objetos complexos. O Strategy encapsula uma família de algoritmos e os torna intercambiáveis — não constrói objetos passo a passo. A descrição do item I (restaurar estado) e do item III (construção passo a passo) não é atendida por esses padrões.

Alternativa D — ❌ Incorreta

A alternativa D acerta o Memento (item I), mas erra nos itens II e III. O Observer define uma dependência um-para-muitos entre objetos, de modo que quando um objeto muda de estado, todos os seus dependentes são notificados — não produz famílias de objetos. O Factory Method cria um objeto por vez, não constrói objetos complexos passo a passo. A descrição do item II (famílias de objetos) é do Abstract Factory, e a do item III (construção passo a passo) é do Builder.

Alternativa E — ❌ Incorreta

A alternativa E erra em todos os itens. O Abstract Factory atende ao item II (famílias de objetos), mas o Singleton não atende ao item I (restaurar estado) e o Observer não atende ao item III (construção passo a passo). O Singleton garante uma única instância; o Observer notifica mudanças de estado. Nenhum dos dois tem relação com as descrições apresentadas.

NÃO CAIA NESSA!

A banca explora a confusão entre padrões com intenções parecidas. O candidato que decora apenas os nomes, sem saber a intenção de cada um, tende a trocar Memento por Observer (ambos lidam com estado, mas um restaura e o outro notifica) e Builder por Factory Method (ambos criam objetos, mas um constrói passo a passo e o outro cria um objeto por vez). A dica é: leia a descrição e identifique a ação principal — restaurar, criar família, construir passo a passo — e associe ao padrão correto. Com treino, você enxerga essas trocas de longe 💪.

PEGA ESSA DICA!

Para fixar, monte uma tabela mental com a intenção de cada padrão:

Padrão

Família

Intenção

Memento

Comportamental

Restaurar estado anterior

Abstract Factory

Criação

Criar famílias de objetos

Builder

Criação

Construir objeto complexo passo a passo

Factory Method

Criação

Criar um objeto por vez

Singleton

Criação

Garantir uma única instância

Observer

Comportamental

Notificar mudanças de estado

Strategy

Comportamental

Encapsular algoritmos intercambiáveis

Na prova, sublinhe as palavras-chave da descrição e case com a intenção do padrão.

Gabarito: letra A

Link permanente: /questoes/fc147285