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

Considere o seguinte trecho de um diagrama de classes UML que modela um sistema de administração escolar.

 

Imagem associada para resolução da questão

O seguinte trecho de código em VB.NET utiliza as classes do diagrama acima. As linhas de código estão numeradas para delimitá-las quando aparecem em múltiplas linhas por questões de espaço.

 

1 Public Class UserClass

2    Shared Function GetSchoolUser(ByVal _login As String) As SchoolUser

3      If _login = "diretor" Then

4         Return New SchoolPrincipal

5      ElseIf _login = "professor" Then

6         Return New SchoolTeacher

7      Else

8         Throw New Exception

9      End If

10   End Function

11 End Class

 

Dentre as alternativas a seguir, assinale aquela que indica o design pattern usado no código apresentado.

  1. A Prototype.
  2. BSingleton.
  3. CSuper factory.
  4. DSimple factory.
  5. EComposite.
Revelar gabarito e comentário

GabaritoD — Simple factory.

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: Simple Factory

Gabarito: letra D. O código apresentado implementa o padrão Simple Factory (Fábrica Simples): a classe UserClass expõe um método estático GetSchoolUser que, com base em um parâmetro (_login), decide qual subclasse de SchoolUser instanciar (SchoolPrincipal ou SchoolTeacher), encapsulando a lógica de criação e retornando o objeto como tipo base. Essa é a essência do padrão: centralizar a criação de objetos em um único ponto, sem expor a lógica de decisão ao chamador.

O padrão Simple Factory é um dos padrões de criação mais cobrados em provas de Engenharia de Software, e a pegadinha clássica é confundi-lo com o Factory Method (que usa herança e métodos abstratos) ou com o Abstract Factory (que cria famílias de objetos relacionados). Vamos entender cada um para fixar a diferença.

O Simple Factory não é um dos 23 padrões do catálogo GoF (Gang of Four), mas é um idiom de programação amplamente utilizado e cobrado em concursos. Sua estrutura é simples: uma classe (a "fábrica") possui um método (geralmente estático) que recebe um parâmetro e, por meio de uma estrutura condicional (if/else ou switch), instancia e retorna a classe concreta adequada. O chamador não precisa saber qual classe concreta será criada — ele apenas fornece o critério de seleção e recebe o objeto como o tipo base (no caso, SchoolUser).

No código da questão, o método GetSchoolUser recebe o _login e:

  • Se _login = "diretor", retorna New SchoolPrincipal;

  • Se _login = "professor", retorna New SchoolTeacher;

  • Caso contrário, lança uma exceção.

Isso é exatamente o comportamento de uma fábrica simples: a decisão de qual objeto criar fica isolada em um único método, e o cliente (quem chama GetSchoolUser) não precisa conhecer as classes concretas SchoolPrincipal e SchoolTeacher — ele só conhece a abstração SchoolUser.

Para diferenciar dos outros padrões de criação, veja a tabela comparativa:

Critério

Simple Factory

Factory Method

Abstract Factory

Natureza

Idiom (não é GoF)

Padrão GoF

Padrão GoF

Mecanismo

Método estático com condicional

Método abstrato implementado por subclasses

Interface para criar famílias de objetos

Decisão de criação

Centralizada na fábrica

Delegada às subclasses

Centralizada na fábrica abstrata

Uso de herança

Não obrigatório

Obrigatório (subclasses decidem)

Obrigatório (fábricas concretas)

Objetivo

Criar um objeto com base em parâmetro

Permitir que subclasses decidam qual objeto criar

Criar famílias de objetos relacionados

A pegadinha da banca aqui é justamente a confusão entre Simple Factory e Factory Method. No Factory Method, a criação é feita por um método abstrato que cada subclasse implementa — não há um if/else centralizado. No código apresentado, a decisão está em um único método estático, o que caracteriza o Simple Factory.

Guarde o critério decisivo: se a criação é centralizada em um único método com condicional, é Simple Factory; se a criação é delegada a subclasses via método abstrato, é Factory Method. É exatamente nessa fronteira que as alternativas se dividem.

1Método estático de criação
Recebe parâmetro de seleção
Condicional decide a classe
Retorna tipo base
2Vantagens
Centraliza a criação
Reduz acoplamento
3Não é GoF
É idiom de programação
Simple Factory
LEVELsoulevel.com.br
Simple Factory: Método estático de criação (Recebe parâmetro de seleção, Condicional decide a classe, Retorna tipo base); Vantagens (Centraliza a criação, Reduz acoplamento); Não é GoF (É idiom de programação)

Alternativa A — ❌ Incorreta

O Prototype é um padrão de criação que permite criar novos objetos copiando um objeto existente (o "protótipo"), em vez de instanciar diretamente. No código, não há nenhuma clonagem ou cópia de objetos — há apenas a criação de novas instâncias via New. O Prototype seria identificado por um método como Clone() ou Copy(), o que não aparece aqui.

Alternativa B — ❌ Incorreta

O Singleton garante que uma classe tenha apenas uma única instância em todo o sistema, fornecendo um ponto de acesso global a ela. No código, o método GetSchoolUser cria novas instâncias de SchoolPrincipal e SchoolTeacher a cada chamada — não há controle de instância única, nem um campo estático que armazene a instância. O Singleton seria identificado por um construtor privado e um método estático que retorna sempre a mesma instância.

Alternativa C — ❌ Incorreta

"Super factory" não é um padrão de projeto reconhecido na literatura de Engenharia de Software. O termo correto seria Abstract Factory (Fábrica Abstrata), que é um padrão GoF para criar famílias de objetos relacionados sem especificar suas classes concretas. No código, não há uma interface de fábrica com múltiplos métodos de criação — há apenas um método que cria um único tipo de objeto por vez. A alternativa usa um nome inventado para confundir o candidato.

Alternativa D — ✅ Correta ⟵ GABARITO

O Simple Factory é exatamente o padrão aplicado: a classe UserClass atua como uma fábrica, e o método estático GetSchoolUser encapsula a lógica de criação, decidindo qual subclasse de SchoolUser instanciar com base no parâmetro _login. O chamador recebe o objeto como SchoolUser (tipo base), sem conhecer as classes concretas. Isso centraliza a criação e reduz o acoplamento — características centrais do Simple Factory.

Alternativa E — ❌ Incorreta

O Composite é um padrão estrutural que compõe objetos em estruturas de árvore para representar hierarquias parte-todo, permitindo que clientes tratem objetos individuais e composições de maneira uniforme. No código, não há nenhuma estrutura hierárquica de objetos, nem operações recursivas sobre uma árvore. O Composite seria identificado por classes que contêm coleções de si mesmas (ex.: uma classe Pasta que contém uma lista de Arquivo e Pasta).

Gabarito: letra D — o código implementa o padrão Simple Factory, pois centraliza a criação de objetos em um método estático que decide qual classe instanciar com base em um parâmetro.

Link permanente: /questoes/vu197009