Questão de Engenharia de Software — UML — FGV 2024
Engenharia de Software›UML
Código
fg098201
Banca
FGV
Órgão
TJ-AP
Ano
2024
Nível
Superior
Cargo
Apoio Especializado - Tecnologia da Informação - Desenvolvimento de Sistemas
Padrões de projeto são representados por meio de diagramas da UML, sendo possível identificá-los através da análise de métodos e relacionamentos entre classes ou interfaces.Observe o diagrama de classes apresentado a seguir.No diagrama é representado o padrão de projeto:
ASingleton;
BPrototype;
CData Access Object;
DObserver;
EAbstract Factory.
Revelar gabarito e comentário▾
GabaritoE — Abstract 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: Abstract Factory e a identificação por diagramas UML
Gabarito: letra E. O diagrama de classes apresentado representa o padrão Abstract Factory, pois mostra uma interface (fábrica abstrata) com métodos de criação que retornam produtos abstratos, e fábricas concretas que implementam essa interface para criar famílias de produtos relacionados. A identificação se dá pela presença de múltiplas classes de produtos (geralmente organizadas em famílias) e de fábricas que os instanciam, sem que o cliente conheça as classes concretas.
O Abstract Factory é um padrão de projeto criacional que fornece uma interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas. Em um diagrama de classes UML, ele é reconhecido por uma estrutura típica: uma interface FabricaAbstrata (ou classe abstrata) declarando métodos como criarProdutoA() e criarProdutoB(), que retornam tipos abstratos (ProdutoA, ProdutoB). As classes FabricaConcreta1 e FabricaConcreta2 implementam essa interface, cada uma retornando uma variação específica dos produtos (ProdutoA1, ProdutoA2, ProdutoB1, ProdutoB2). O cliente depende apenas das abstrações, garantindo que a criação de produtos seja consistente dentro de uma mesma família.
A razão de ser desse padrão é evitar que o código cliente precise conhecer as classes concretas dos produtos, promovendo baixo acoplamento e facilitando a troca de famílias inteiras de objetos sem alterar o código que as utiliza. Por exemplo, em um sistema de interface gráfica, uma fábrica abstrata pode criar botões e caixas de texto; a fábrica concreta para Windows cria botões e caixas de texto no estilo Windows, enquanto a fábrica para Linux cria os equivalentes no estilo Linux. O cliente usa apenas a interface da fábrica, e a escolha da fábrica concreta é feita em tempo de execução.
A distinção entre os padrões criacionais é crucial para esta questão. O Singleton garante uma única instância de uma classe, representado por um atributo estático e um método getInstancia(). O Prototype cria novos objetos clonando um protótipo existente, com um método clone(). O Data Access Object (DAO) separa o acesso a dados da lógica de negócio, com classes de entidade, interface DAO e implementação concreta. O Observer define uma dependência um-para-muitos entre objetos, com interfaces Subject e Observer. O Abstract Factory, por sua vez, é o único que combina múltiplas fábricas concretas com múltiplos produtos abstratos, formando famílias.
A pegadinha da banca está em confundir o Abstract Factory com outros padrões criacionais ou com o Observer, que tem estrutura comportamental. O candidato deve observar atentamente se o diagrama mostra uma hierarquia de fábricas (interface + implementações) e uma hierarquia de produtos (abstratos + concretos), com métodos de criação retornando os produtos abstratos. Essa combinação é a assinatura clássica do Abstract Factory.
Guarde a estrutura típica do Abstract Factory: uma interface de fábrica com métodos que retornam produtos abstratos, implementada por fábricas concretas, e produtos organizados em famílias. É exatamente esse padrão estrutural que as alternativas tentam confundir.
Critério
Singleton
Prototype
DAO
Observer
Abstract Factory
Categoria
Criacional
Criacional
Estrutural
Comportamental
Criacional
Estrutura típica em UML
Classe única com atributo estático privado e método getInstancia()
Classe com método clone() que retorna cópia de si mesma
Interface DAO com CRUD + implementação concreta + entidades
Interfaces Subject (adicionar/remover/notificar) e Observer (atualizar)
Interface de fábrica com métodos que retornam produtos abstratos + fábricas concretas + produtos em famílias
Método-chave
getInstancia()
clone()
salvar(), buscar(), deletar()
notificar(), atualizar()
criarProdutoA(), criarProdutoB()
Relação entre classes
Uma única classe autocontida
Classe protótipo → cópias
Interface → implementação → entidades
Sujeito → observadores (1:N)
Fábrica → produtos (famílias)
Objetivo principal
Garantir instância única global
Copiar objetos existentes
Separar acesso a dados da lógica de negócio
Notificar dependentes sobre mudanças de estado
Criar famílias de objetos relacionados sem especificar classes concretas
Alternativa A — ❌ Incorreta
O Singleton é um padrão criacional que garante a existência de apenas uma instância de uma classe, fornecendo um ponto de acesso global a ela. Em um diagrama de classes, ele é representado por uma única classe com um atributo estático privado do próprio tipo e um método público estático (geralmente getInstancia() ou getInstance()) que retorna essa instância única. O diagrama da questão, com múltiplas fábricas e produtos, não apresenta essa estrutura de instância única — há uma hierarquia de classes, não uma classe com controle de instanciação.
Alternativa B — ❌ Incorreta
O Prototype é um padrão criacional que permite criar novos objetos copiando um protótipo existente, em vez de instanciar diretamente. Em UML, a classe protótipo possui um método clone() que retorna uma cópia de si mesma. O diagrama da questão não mostra nenhum método de clonagem nem uma classe que sirva de modelo para cópias; em vez disso, há fábricas que criam produtos, o que é característica do Abstract Factory.
Alternativa C — ❌ Incorreta
O Data Access Object (DAO) é um padrão que separa a lógica de acesso a dados da lógica de negócio. Sua estrutura típica inclui uma interface DAO com operações de CRUD (create, read, update, delete), uma implementação concreta dessa interface e classes de entidade que representam os dados. O diagrama da questão não apresenta operações de persistência nem entidades de banco de dados; ele mostra fábricas e produtos, indicando um padrão criacional, não de acesso a dados.
Alternativa D — ❌ Incorreta
O Observer é um padrão comportamental que define uma dependência um-para-muitos entre objetos, de modo que quando um objeto (sujeito) muda de estado, todos os seus dependentes (observadores) são notificados e atualizados automaticamente. Em UML, a estrutura inclui uma interface Subject com métodos adicionar(), remover() e notificar(), e uma interface Observer com um método atualizar(). O diagrama da questão não apresenta essa relação de notificação entre sujeito e observadores; ele mostra fábricas criando produtos, o que é um padrão criacional, não comportamental.
Alternativa E — ✅ Correta ⟵ GABARITO
O Abstract Factory é um padrão criacional que fornece uma interface para criar famílias de objetos relacionados sem especificar suas classes concretas. No diagrama, a estrutura típica é: uma interface FabricaAbstrata (ou classe abstrata) com métodos como criarProdutoA() e criarProdutoB(), que retornam tipos abstratos (ProdutoA, ProdutoB). As classes FabricaConcreta1 e FabricaConcreta2 implementam essa interface, cada uma retornando variações específicas dos produtos (ProdutoA1, ProdutoA2, ProdutoB1, ProdutoB2). Essa combinação de múltiplas fábricas concretas com múltiplos produtos abstratos, formando famílias, é a assinatura do Abstract Factory.
NÃO CAIA NESSA!
A banca explora a confusão entre padrões criacionais e comportamentais. O candidato pode identificar erroneamente o Observer (padrão comportamental) por ver múltiplas classes interagindo, mas a presença de fábricas com métodos de criação retornando produtos abstratos é a marca registrada do Abstract Factory. Observe sempre se há uma hierarquia de fábricas e produtos — se sim, é criacional; se há notificação entre objetos, é comportamental.
PEGA ESSA DICA!
Para identificar padrões de projeto em diagramas UML, comece classificando a família: criacionais (Singleton, Prototype, Factory Method, Abstract Factory, Builder) lidam com criação de objetos; estruturais (Adapter, Decorator, Facade, etc.) lidam com composição de classes; comportamentais (Observer, Strategy, Template Method, etc.) lidam com interação entre objetos. No Abstract Factory, procure a combinação de uma interface de fábrica com métodos que retornam produtos abstratos, implementada por fábricas concretas.
Gabarito: letra E — o diagrama representa o padrão Abstract Factory, caracterizado pela interface de fábrica com métodos de criação de produtos abstratos e fábricas concretas que implementam essa interface.