Pular para o conteúdo principal

Questão de Programação — Conceitos básicos de programação — FGV 2025

ProgramaçãoConceitos básicos de programação
Código
fg121856
Banca
FGV
Órgão
TCE-RR
Ano
2025
Nível
Superior
Cargo
Analista Administrativo - Tecnologia da Informação, com especialidade em Desenvolvimento de Sistemas
Um bom desenvolvedor de sistemas deve ter conhecimento sobre refatoração, padrões de arquitetura e de projeto, princípios SOLID e outros tópicos importantes sobre programação. Em relação a padrões de projeto, considere o seguinte trecho de código:Imagem associada para resolução da questãoMarque a opção que corresponde ao padrão de projeto implementado no código acima.
  1. ASingleton
  2. BFactory
  3. CObserver
  4. DFlyweight
  5. EBuilder
Revelar gabarito e comentário

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

Gabarito: letra B. O código apresentado implementa o padrão Factory Method, pois define uma interface (ou classe abstrata) com um método de criação (factoryMethod) que é sobrescrito pelas subclasses para instanciar o objeto concreto desejado. Esse padrão é um dos Padrões Criacionais do catálogo GoF (Gang of Four), cujo objetivo é encapsular a lógica de criação de objetos, delegando às subclasses a decisão de qual classe instanciar.

O padrão Factory Method resolve um problema recorrente: quando um código precisa criar objetos de tipos diferentes, mas não quer acoplar-se diretamente às classes concretas. Em vez de usar new diretamente, o cliente chama um método de fábrica que retorna o tipo abstrato. Isso promove o princípio do Open/Closed (aberto para extensão, fechado para modificação), pois novas classes podem ser adicionadas sem alterar o código existente.

Na prática, imagine um sistema de notificações que precisa enviar e-mails, SMS e push. Sem o padrão, o código teria vários if ou switch para decidir qual classe instanciar. Com o Factory Method, cada tipo de notificação tem sua própria fábrica que sabe como criá-lo. O cliente apenas chama o método de criação e recebe o objeto, sem se preocupar com a implementação específica.

A distinção crucial é entre Factory Method e Abstract Factory. O primeiro usa herança: uma classe base define o método de criação e as subclasses o implementam. O segundo usa composição: uma classe fábrica recebe outras fábricas como parâmetros para criar famílias de objetos relacionados. Enquanto o Factory Method é mais simples e focado em um único produto, o Abstract Factory lida com múltiplos produtos que devem ser compatíveis entre si.

A pegadinha da banca está em confundir o Factory Method com outros padrões criacionais, especialmente o Singleton (que garante uma única instância) e o Builder (que constrói objetos complexos passo a passo). O código da questão, ao mostrar um método de criação sobrescrito em subclasses, aponta inequivocamente para o Factory Method. Guarde essa assinatura: método de fábrica + herança + retorno de tipo abstrato.

Padrões de Projeto (GoF)
  • 1Criacionais
    • Factory Method
      • método de fábrica + herança
      • retorna tipo abstrato
    • Singleton
      • instância única
      • construtor privado + getInstance()
    • Builder
      • construção passo a passo
      • diretor + build()
  • 2Estruturais
    • Flyweight
      • compartilha objetos
      • cache + estado intrínseco/extrínseco
  • 3Comportamentais
    • Observer
      • dependência 1-para-muitos
      • notificação de mudança de estado
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

O Singleton garante que uma classe tenha apenas uma instância e fornece um ponto global de acesso a ela. O código típico tem um construtor privado e um método estático getInstance(). No trecho da questão, não há controle de instância única nem construtor privado — há um método de criação que pode ser chamado várias vezes para criar objetos diferentes. A confusão surge porque ambos são padrões criacionais, mas o Singleton foca em limitar a criação, enquanto o Factory Method foca em delegar a criação.

Alternativa B — ✅ Correta ⟵ GABARITO

O Factory Method define uma interface para criar um objeto, mas permite que as subclasses decidam qual classe instanciar. O código mostra exatamente isso: um método de fábrica (geralmente chamado factoryMethod, create, make etc.) que é implementado nas subclasses para retornar o tipo concreto. Isso desacopla o cliente da classe concreta, permitindo que novas implementações sejam adicionadas sem modificar o código existente. É a essência do padrão: encapsular a criação e delegar a decisão às subclasses.

Alternativa C — ❌ 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. O código típico tem uma interface Observer com um método update() e uma classe Subject que mantém uma lista de observadores. No trecho da questão, não há notificação de mudança de estado nem lista de dependentes — há apenas criação de objetos. A banca incluiu essa opção para testar se o candidato sabe diferenciar padrões criacionais de comportamentais.

Alternativa D — ❌ Incorreta

O Flyweight é um padrão estrutural que visa economizar memória compartilhando objetos comuns entre múltiplos contextos. Ele separa o estado intrínseco (compartilhado) do extrínseco (específico de cada uso). O código típico tem uma fábrica que mantém um cache de objetos e retorna instâncias existentes em vez de criar novas. No trecho da questão, não há compartilhamento de objetos nem cache — há criação de novos objetos a cada chamada. A confusão pode surgir porque ambos usam uma espécie de "fábrica", mas o Flyweight foca em reutilizar objetos, enquanto o Factory Method foca em criar objetos.

Alternativa E — ❌ Incorreta

O Builder é um padrão criacional que separa a construção de um objeto complexo de sua representação, permitindo que o mesmo processo de construção crie diferentes representações. O código típico tem um diretor que orquestra a construção passo a passo, com métodos como setParteA(), setParteB() e build(). No trecho da questão, não há construção passo a passo nem diretor — há um único método de criação que retorna o objeto pronto. A distinção é sutil: o Builder constrói objetos complexos com várias partes, enquanto o Factory Method cria objetos simples com uma única chamada.

NÃO CAIA NESSA!

A banca mistura padrões criacionais (Singleton, Builder) e não-criacionais (Observer, Flyweight) para testar se você sabe a família de cada padrão. O Factory Method é criacional, assim como Singleton e Builder, mas a diferença está no mecanismo: o Factory Method usa herança e delegação, o Singleton usa controle de instância única, e o Builder usa construção passo a passo. Se o código mostra um método de criação sobrescrito em subclasses, é Factory Method — não se deixe enganar pela presença de outros padrões criacionais nas alternativas.

Gabarito: letra B

Link permanente: /questoes/fg121856