Questão de Engenharia de Software — Desenvolvimento de Software — INSTITUTO AOCP 2025
Engenharia de Software›Desenvolvimento de Software
Código
qg539436
Banca
INSTITUTO AOCP
Órgão
IF-MS
Ano
2025
Nível
Superior
Cargo
Professor EBTT - Informática/Desenvolvimento WEB
Os Padrões de Projeto (Design Patterns) são abordagens consolidadas para solucionar problemas recorrentes no desenvolvimento de software, promovendo organização, reutilização de código e manutenibilidade. Entre esses padrões, alguns são projetados para restringir a criação de instâncias de uma classe, garantindo um único ponto de acesso global. Assinale a alternativa que corresponde ao padrão de projeto que garante que uma classe tenha apenas uma instância global.
ACommand
BIterator
CFlyweight
DAdapter
ESingleton
Revelar gabarito e comentário▾
GabaritoE — Singleton
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: Singleton e a garantia de instância única
Gabarito: letra E. O padrão Singleton é o padrão de projeto que garante que uma classe tenha apenas uma instância global, fornecendo um ponto de acesso global a ela. Essa é a definição clássica do padrão, catalogada no livro Design Patterns (GoF), e é exatamente o que o enunciado descreve.
Os Padrões de Projeto (Design Patterns) são soluções gerais e reutilizáveis para problemas recorrentes no desenvolvimento de software. Eles não são código pronto, mas sim descrições de como resolver um problema em um determinado contexto. O livro Design Patterns: Elements of Reusable Object-Oriented Software, escrito pela "Gang of Four" (GoF) — Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides —, catalogou 23 padrões, divididos em três famílias, conforme o problema que resolvem:
Padrões de Criação (Creational): lidam com o processo de criação de objetos, abstraindo a forma como eles são instanciados. Exemplos: Singleton, Factory Method, Abstract Factory, Builder, Prototype.
Padrões Estruturais (Structural): tratam da composição de classes e objetos para formar estruturas maiores. Exemplos: Adapter, Decorator, Composite, Facade, Proxy.
Padrões Comportamentais (Behavioral): focam na comunicação e interação entre objetos. Exemplos: Command, Iterator, Observer, Strategy, Template Method.
O Singleton pertence à família dos padrões de criação. Seu objetivo é garantir que uma classe tenha apenas uma instância em todo o sistema e fornecer um ponto de acesso global a ela. Isso é útil em situações como conexões de banco de dados, configurações de sistema ou logs, onde múltiplas instâncias poderiam causar inconsistências ou desperdício de recursos.
Na prática, o Singleton é implementado com um construtor privado (impedindo a criação direta com new), um atributo estático que guarda a única instância e um método estático (geralmente getInstance()) que retorna essa instância, criando-a na primeira chamada, se ainda não existir.
A pegadinha desta questão é justamente a classificação dos padrões: o candidato pode confundir o Singleton com outros padrões que também lidam com objetos, mas de formas diferentes. O Flyweight, por exemplo, também é um padrão de criação, mas seu objetivo é compartilhar objetos para economizar memória, não garantir uma única instância. Já o Command e o Iterator são comportamentais, e o Adapter é estrutural.
Guarde a distinção central: Singleton = uma única instância global; os demais padrões resolvem outros problemas. É exatamente essa fronteira que separa a alternativa correta das demais.
Alternativa A — ❌ Incorreta
O Command é um padrão comportamental que encapsula uma solicitação como um objeto, permitindo parametrizar clientes com diferentes solicitações, enfileirar ou registrar solicitações e suportar operações reversíveis (undo). Ele não tem relação com a restrição de instâncias de uma classe. A banca o inclui como distrator por ser um padrão conhecido, mas de outra família.
Alternativa B — ❌ Incorreta
O Iterator é um padrão comportamental que fornece uma maneira de acessar sequencialmente os elementos de um objeto agregado (como uma lista) sem expor sua representação interna. Ele não controla a criação de instâncias; apenas percorre coleções. É outro distrator da família comportamental.
Alternativa C — ❌ Incorreta
O Flyweight é um padrão estrutural (embora alguns autores o classifiquem como de criação) que visa compartilhar objetos para suportar grandes quantidades de objetos de granularidade fina de forma eficiente. Ele não garante uma única instância; pelo contrário, permite que várias instâncias compartilhem estado comum. A confusão com o Singleton é comum, mas a finalidade é oposta: enquanto o Singleton restringe a criação, o Flyweight otimiza o uso de memória compartilhando objetos.
Alternativa D — ❌ Incorreta
O Adapter é um padrão estrutural que converte a interface de uma classe em outra interface esperada pelos clientes, permitindo que classes com interfaces incompatíveis trabalhem juntas. Ele não tem relação com a criação de instâncias. É um distrator da família estrutural.
Alternativa E — ✅ Correta ⟵ GABARITO
O Singleton é exatamente o padrão que garante que uma classe tenha apenas uma instância e fornece um ponto de acesso global a ela. É um padrão de criação, e sua implementação típica envolve construtor privado, atributo estático e método estático de acesso. O enunciado descreve precisamente essa característica, tornando a letra E a resposta correta.
PEGA ESSA DICA!
Para questões de padrões de projeto, comece identificando a família do padrão (criação, estrutural ou comportamental) e depois o problema específico que ele resolve. Memorize os exemplos clássicos de cada família: