Pular para o conteúdo principal

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

Engenharia de SoftwarePadrões de Projeto (Engenharia de Software)
Código
fg165468
Banca
FGV
Órgão
TJ AP
Ano
2024
Cargo
AJ ( )
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:Imagem associada para resolução da questão
  1. ASingleton;
  2. BPrototype;
  3. CData Access Object;
  4. DObserver;
  5. 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

Gabarito: letra E. O diagrama de classes apresentado representa o padrão Abstract Factory, pois mostra uma hierarquia de fábricas (interfaces/classes abstratas) que criam famílias de produtos relacionados, sem especificar suas classes concretas. A estrutura típica desse padrão envolve uma interface AbstractFactory com métodos de criação para cada tipo de produto, e fábricas concretas que implementam esses métodos para gerar produtos específicos de uma família.

O padrão Abstract Factory é um padrão criacional do catálogo GoF (Gang of Four). Ele fornece uma interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas. Em outras palavras, ele define uma "fábrica de fábricas": uma interface que declara métodos para criar cada tipo de produto, e cada fábrica concreta implementa esses métodos para produzir uma família específica de produtos. Isso permite que o cliente trabalhe com famílias de produtos de forma intercambiável, sem conhecer as implementações concretas.

A estrutura do Abstract Factory é composta por:

  • AbstractFactory: interface que declara os métodos de criação para cada tipo de produto (ex.: criarProdutoA(), criarProdutoB()).

  • ConcreteFactory1 e ConcreteFactory2: implementam a interface, criando produtos concretos de uma família específica.

  • AbstractProductA e AbstractProductB: interfaces para os produtos.

  • ProductA1, ProductA2, ProductB1, ProductB2: implementações concretas dos produtos.

  • Cliente: usa apenas as interfaces AbstractFactory e AbstractProduct.

No diagrama de classes, essa estrutura é reconhecida pela presença de uma interface ou classe abstrata Fabrica (ou similar) com métodos de criação, e várias classes concretas que a implementam, cada uma retornando produtos diferentes. A relação entre a fábrica e os produtos é de dependência (linha tracejada com seta), indicando que a fábrica conhece as interfaces dos produtos, mas não suas implementações.

A principal vantagem do Abstract Factory é garantir a consistência entre os produtos de uma mesma família, pois o cliente sempre recebe produtos compatíveis entre si. A desvantagem é a complexidade adicional: para cada nova família de produtos, é necessário criar novas fábricas concretas.

A banca explora a confusão entre os padrões criacionais, especialmente entre Abstract Factory, Factory Method e Prototype. O Factory Method usa uma única classe para criar um produto, enquanto o Abstract Factory usa uma hierarquia de fábricas para criar famílias de produtos. O Prototype, por sua vez, cria novos objetos clonando um protótipo existente, o que não é representado por uma hierarquia de fábricas.

Guarde a distinção central: Abstract Factory = fábrica de famílias de produtos; Factory Method = fábrica de um único produto; Prototype = clonagem de objetos. É exatamente essa fronteira que separa as alternativas desta questão.

Alternativa A — ❌ Incorreta

O Singleton garante que uma classe tenha apenas uma instância e fornece um ponto global de acesso a ela. No diagrama, não há indicação de uma única instância, nem de um método estático que retorne a instância única. O Singleton é representado por uma única classe com um atributo privado estático e um método público estático getInstance(), o que não aparece na estrutura de fábricas do diagrama.

Alternativa B — ❌ Incorreta

O Prototype cria novos objetos clonando um protótipo existente, usando um método clone(). No diagrama, não há indicação de clonagem, nem de um método clone() nas classes. O Prototype é representado por uma interface Prototype com o método clone(), e classes concretas que o implementam. A estrutura de fábricas do diagrama não corresponde a esse padrão.

Alternativa C — ❌ Incorreta

O Data Access Object (DAO) é um padrão que separa o acesso a dados da lógica de negócio, fornecendo uma interface para operações de persistência (como salvar(), buscar(), excluir()). No diagrama, não há indicação de operações de persistência, nem de uma interface DAO com métodos de acesso a dados. O DAO é um padrão de arquitetura, não um padrão criacional, e sua estrutura é diferente da apresentada.

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 muda de estado, todos os seus dependentes são notificados e atualizados automaticamente. No diagrama, não há indicação de uma relação de notificação, nem de métodos como anexar(), desanexar() e notificar(). O Observer é representado por uma interface Observador e uma classe Sujeito que mantém uma lista de observadores, o que não aparece na estrutura de fábricas.

Alternativa E — ✅ Correta ⟵ GABARITO

O Abstract Factory é exatamente o padrão representado no diagrama: uma hierarquia de fábricas (interfaces/classes abstratas) que criam famílias de produtos relacionados. A estrutura mostra uma interface Fabrica com métodos de criação para cada tipo de produto, e fábricas concretas que implementam esses métodos para gerar produtos específicos. Isso permite que o cliente crie famílias de produtos sem conhecer suas implementações concretas, garantindo consistência entre eles.

Gabarito: letra E — o diagrama representa o padrão Abstract Factory, pois mostra uma hierarquia de fábricas que criam famílias de produtos relacionados.

Link permanente: /questoes/fg165468