Pular para o conteúdo principal

Questão de Engenharia de Software — Desenvolvimento de Software — FGV 2024

Engenharia de SoftwareDesenvolvimento de Software
Código
fg086206
Banca
FGV
Órgão
INPE
Ano
2024
Nível
Superior
Cargo
Tecnologista Pleno I - Desenvolvimento de Software e Sistemas de Informações Geográficas, Banco de Dados Geográficos, Gestão e Disponibilização de Dados Geográficos via Web, Plataformas de Visualização de Dados Geográficos
No contexto de Projetos Orientados a Objetos, padrões de design são soluções generalizadas para problemas comuns de design de software.Considere uma situação em que um desenvolvedor foi incumbido de elaborar um sistema de criação de documentos de diversos formatos, como Texto, Planilha e Apresentação, a serem definidos com base nos comandos do usuário.Para lidar com esses requisitos, o padrão de design de software mais adequado seria o
  1. ASingleton.
  2. BFactory Method.
  3. CHeritage.
  4. DBuilder.
  5. EStrategy.
Revelar gabarito e comentário

GabaritoB — Factory 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 Criacionais: Factory Method

Gabarito: letra B. O padrão Factory Method é o mais adequado para criar objetos de diferentes tipos (Texto, Planilha, Apresentação) com base em comandos do usuário, pois encapsula a lógica de instanciação e permite que subclasses decidam qual classe concreta instanciar. É um padrão criacional que resolve o problema de criação sem acoplar o código cliente às classes concretas.

A situação descrita envolve um sistema que deve produzir documentos de múltiplos formatos conforme a entrada do usuário. O requisito central é criar objetos de diferentes classes (Texto, Planilha, Apresentação) sem que o código cliente precise conhecer a classe exata no momento da compilação. Isso encaixa perfeitamente no objetivo do Factory Method, onde uma operação de fábrica é definida em uma superclasse (ou interface) e as subclasses implementam a criação do objeto específico.

Padrão de Design

Categoria (GoF)

Problema que Resolve

Adequação ao Cenário (Criação de Documentos de Diferentes Formatos)

Factory Method

Criacional

Encapsular a criação de objetos, permitindo que subclasses decidam qual classe concreta instanciar.

✅ Sim. Permite criar objetos Texto, Planilha e Apresentação sem acoplar o código cliente às classes concretas, delegando a criação a fábricas específicas.

Singleton

Criacional

Garantir que uma classe tenha apenas uma instância e fornecer um ponto de acesso global.

❌ Não. Não resolve a criação de diferentes tipos de objetos; apenas controla a unicidade de uma instância.

Heritage

Não é um padrão GoF

Conceito de herança em POO, não uma solução reutilizável para problemas de design.

❌ Não. É um distrator; não é um padrão de design catalogado.

Builder

Criacional

Separar a construção de um objeto complexo da sua representação, permitindo o mesmo processo de construção criar diferentes representações.

❌ Parcialmente. Embora crie objetos, é mais adequado para objetos com muitas partes ou configurações complexas (ex.: um documento com cabeçalho, rodapé, estilos), não para simples seleção de tipo.

Strategy

Comportamental

Definir uma família de algoritmos, encapsulá-los e torná-los intercambiáveis.

❌ Não. Foca em variação de comportamento/algoritmos, não na criação de objetos de diferentes tipos.

1Factory Method (✅)
Cria objetos de tipos diferentes
Baseado em comando do usuário
Desacopla código cliente
2Singleton (❌)
Garante instância única
Não resolve criação variada
3Builder (❌)
Constrói objeto complexo passo a passo
Não é o foco do problema
4Strategy (❌)
Algoritmos intercambiáveis
Comportamental, não criacional
Padrões criacionais
LEVELsoulevel.com.br
Padrões criacionais: Factory Method (✅) (Cria objetos de tipos diferentes, Baseado em comando do usuário, Desacopla código cliente); Singleton (❌) (Garante instância única, Não resolve criação variada); Builder (❌) (Constrói objeto complexo passo a passo, Não é o foco do problema); Strategy (❌) (Algoritmos intercambiáveis, Comportamental, não criacional)

Alternativa A — ❌ Incorreta

Singleton garante que uma classe tenha apenas uma instância e fornece um ponto de acesso global. Não resolve o problema de criar diferentes tipos de objetos, apenas controla a unicidade. Seria útil, por exemplo, para gerenciar uma única conexão com banco de dados, não para criar famílias de documentos.

Alternativa B — ✅ Correta ⟵ GABARITO

Factory Method é um padrão criacional que define uma interface para criar um objeto, mas permite que as subclasses decidam qual classe concreta instanciar. Na prática, o desenvolvedor pode criar uma classe abstrata DocumentoFactory com um método criarDocumento() que, em cada subclasse (TextoFactory, PlanilhaFactory, ApresentacaoFactory), retorna o tipo específico. O código cliente recebe comandos do usuário e, por meio de uma fábrica (por exemplo, um seletor), delega a criação à subclasse adequada. Isso desacopla a lógica de criação do restante do sistema.

Alternativa C — ❌ Incorreta

Heritage (Herança) não é um padrão de design de software catalogado no GoF. É um conceito fundamental da orientação a objetos, mas não uma solução reutilizável para problemas recorrentes. A questão cobra padrões de design, e "Heritage" é um distrator para confundir com o termo "Herança" em português.

Alternativa D — ❌ Incorreta

Builder separa a construção de um objeto complexo de sua representação, permitindo que o mesmo processo de construção crie diferentes representações. Embora também seja criacional, o Builder é mais adequado para objetos que exigem muitas etapas de construção (ex.: montar um documento com partes opcionais, formatação, cabeçalho etc.). No cenário descrito, o foco é na decisão de qual tipo de documento criar a partir de um comando, não na construção passo a passo de um documento complexo. O Builder poderia ser usado se cada documento tivesse uma estrutura interna variada e o processo de montagem fosse o mesmo; mas a necessidade primordial é a criação polimórfica — aí o Factory Method é mais direto.

Alternativa E — ❌ Incorreta

Strategy é um padrão comportamental que define uma família de algoritmos, encapsula cada um deles e os torna intercambiáveis. Ele permite que o cliente escolha entre diferentes comportamentos em tempo de execução. No entanto, não está relacionado à criação de objetos, mas sim à variação de comportamento (ex.: diferentes algoritmos de ordenação, compressão, cálculo de imposto). Para criar documentos de formatos distintos, o foco é na instanciação, não na troca de algoritmos.

NÃO CAIA NESSA!

A banca explora a semelhança entre os padrões criacionais Factory Method e Builder. Ambos servem para criar objetos, mas o Builder é voltado para construção passo a passo de objetos complexos, enquanto o Factory Method foca na delegação da criação a subclasses, com base em uma decisão do cliente. No cenário de criar diferentes tipos de documentos a partir de comandos, o Factory Method é a escolha natural.

Gabarito: letra B.

Link permanente: /questoes/fg086206