Questão de Engenharia de Software — Padrões de Projeto (Engenharia de Software) — INSTITUTO AOCP 2024
Engenharia de Software›Padrõ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.
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.
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.
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.
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.
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:
Um construtor privado (ou protegido), impedindo que outras classes criem instâncias diretamente com new.
Um atributo estático que armazena a única instância da classe.
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.