Pular para o conteúdo principal

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

Engenharia de SoftwarePadrões de Projeto (Engenharia de Software)
Código
qa631587
Banca
INSTITUTO AOCP
Órgão
TRF 2
Ano
2024
Cargo
TJ TRF2
Tendo em vista os conceitos de Orientação a Objetos e Padrões de Projetos, assinale a alternativa que apresenta uma afirmação correta a respeito do uso do padrão Singleton em Programação Orientada a Objeto.
  1. AO padrão em questão se caracteriza por possibilitar a criação de múltiplas instâncias de uma classe, gerenciando o acesso concorrente a recursos compartilhados.
  2. BO padrão em questão se caracteriza por permitir a criação de objetos em uma hierarquia de classes que compartilham uma interface comum.
  3. CO padrão em questão efetua a delegação da responsabilidade de criação de instâncias para uma classe especializada conhecida como Fábrica.
  4. DO padrão em questão garante que uma classe tenha apenas uma instância e fornece um ponto de acesso global a essa instância.
  5. EO padrão em questão é utilizado principalmente em linguagens de programação funcionais para gerenciar estados globais.
Revelar gabarito e comentário

GabaritoD — O padrão em questão garante que uma classe tenha apenas uma instância e fornece um ponto de acesso global a essa instância.

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ão Singleton em Programação Orientada a Objetos

Gabarito: letra D. O padrão Singleton é um padrão de projeto criacional que garante que uma classe tenha apenas uma única instância em todo o sistema e fornece um ponto de acesso global a essa instância. Essa é a definição clássica do padrão, conforme descrito no livro "Design Patterns" da Gang of Four (GoF), e é exatamente o que a alternativa D afirma.

O padrão Singleton pertence à família dos padrões criacionais, que lidam com o processo de criação de objetos. Enquanto outros padrões criacionais, como o Factory Method e o Abstract Factory, delegam a criação de objetos para classes especializadas (as "fábricas"), o Singleton tem um objetivo diferente: ele não cria múltiplas instâncias, mas sim controla e restringe a criação para que exista apenas uma única instância da classe. Isso é útil em situações onde é necessário um ponto de controle centralizado, como uma conexão com banco de dados, um gerenciador de configurações ou um pool de recursos.

A implementação típica do Singleton envolve:

  1. Um construtor privado (ou protegido), impedindo que outras classes criem instâncias diretamente com new.

  2. Um atributo estático que armazena a única instância da classe.

  3. Um método estático público (geralmente chamado getInstance()) que retorna a instância única, criando-a na primeira chamada se ainda não existir (lazy initialization).

A principal pegadinha que a banca explora neste tema é a confusão entre o Singleton e outros padrões criacionais, especialmente o Factory Method e o Abstract Factory. O candidato que não domina a distinção pode facilmente marcar a alternativa C, que descreve a delegação de criação para uma "Fábrica", ou a alternativa A, que fala em "múltiplas instâncias" — conceitos que pertencem a outros padrões, não ao Singleton.

Outra confusão comum é associar o Singleton a linguagens funcionais, como na alternativa E. Embora o conceito de estado global exista em linguagens funcionais, o Singleton é um padrão de projeto orientado a objetos e sua implementação típica depende de recursos como classes, construtores e métodos estáticos, que não são o paradigma central das linguagens funcionais. O texto de apoio reforça que "padrões que implicam orientação a objetos ou estado mutável mais geral, não são tão aplicáveis em linguagens de programação funcional".

Guarde a fronteira entre criar uma única instância (Singleton) e delegar a criação de múltiplas instâncias (Factory): é exatamente nela que as alternativas desta questão se dividem.

Singleton (criacional)
  • 1Objetivo
    • Garantir UMA única instância
    • Ponto de acesso global
  • 2Implementação típica
    • Construtor privado
    • Atributo estático
    • Método getInstance()
  • 3Confusões comuns (pegadinha)
    • Múltiplas instâncias (pool/multiton)
    • Hierarquia de classes (Factory Method)
    • Delegação a Fábrica (Abstract Factory)
    • Linguagens funcionais (estado global)
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Afirma que o Singleton possibilita a criação de múltiplas instâncias de uma classe, gerenciando o acesso concorrente a recursos compartilhados. Isso é o oposto do que o padrão faz: o Singleton garante que exista apenas uma única instância. O gerenciamento de acesso concorrente a recursos compartilhados pode ser uma consequência do uso do Singleton (já que todos acessam a mesma instância), mas a característica central do padrão é a unicidade, não a multiplicidade. A alternativa descreve, na verdade, um cenário típico de pool de objetos ou multiton, não o Singleton.

Alternativa B — ❌ Incorreta

Afirma que o Singleton permite a criação de objetos em uma hierarquia de classes que compartilham uma interface comum. Isso descreve o padrão Factory Method ou Abstract Factory, que usam polimorfismo e hierarquias para criar famílias de objetos relacionados. O Singleton não lida com hierarquias de classes; ele simplesmente restringe a instanciação de uma única classe a uma única instância.

Alternativa C — ❌ Incorreta

Afirma que o Singleton delega a responsabilidade de criação de instâncias para uma classe especializada conhecida como Fábrica. Essa é a descrição exata dos padrões Factory Method e Abstract Factory, que centralizam a lógica de criação em classes-fábrica. O Singleton, ao contrário, controla a criação internamente, com construtor privado e método estático, sem delegar a nenhuma outra classe.

Alternativa D — ✅ Correta ⟵ GABARITO

Esta é a definição canônica do padrão Singleton: "garante que uma classe tenha apenas uma instância e fornece um ponto de acesso global a essa instância". O termo "ponto de acesso global" refere-se ao método estático público (como getInstance()) que permite a qualquer parte do sistema obter a única instância. Essa é a descrição exata do padrão, conforme documentado pela Gang of Four.

Alternativa E — ❌ Incorreta

Afirma que o Singleton é utilizado principalmente em linguagens de programação funcionais para gerenciar estados globais. Isso é incorreto por duas razões: (1) o Singleton é um padrão de projeto orientado a objetos, que depende de conceitos como classes, construtores e métodos estáticos; (2) linguagens funcionais tendem a evitar estado global mutável, preferindo imutabilidade e funções puras. O texto de apoio confirma que padrões que implicam orientação a objetos "não são tão aplicáveis em linguagens de programação funcional".

NÃO CAIA NESSA!

A banca adora trocar o Singleton pelos padrões Factory. A alternativa C descreve perfeitamente o Factory Method/Abstract Factory, e a alternativa A inverte o conceito ao falar em "múltiplas instâncias". Fique atento: Singleton = uma única instância + acesso global; Factory = delegação de criação para uma classe especializada. Com treino, você enxerga essas trocas de longe 💪

PEGA ESSA DICA!

Para memorizar, associe o Singleton à palavra "único" e à ideia de "ponto de acesso global". Sempre que a alternativa falar em "múltiplas instâncias", "hierarquia de classes" ou "Fábrica", desconfie: provavelmente está descrevendo outro padrão criacional. Na prova, leia a alternativa e pergunte: "isso descreve a criação de UMA instância ou de VÁRIAS?" — se for várias, não é Singleton.

Gabarito: letra D

Link permanente: /questoes/qa631587