Questão de Engenharia de Software — Padrões de Projeto (Engenharia de Software) — VUNESP 2024
Engenharia de Software›Padrões de Projeto (Engenharia de Software)
Código
vu212234
Banca
VUNESP
Órgão
SAAE Aparecida
Ano
2024
Cargo
Ana ( )
Considere a seguinte classe implementada em PHP.
O padrão de projeto (design pattern) que pode ser reconhecido no trecho descrito é denominado
ATemplate Method.
BSingleton.
CBuilder.
DFlyweight.
EDecorator.
Revelar gabarito e comentário▾
GabaritoB — 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
Gabarito: letra B. O padrão Singleton garante que uma classe tenha apenas uma única instância em todo o sistema e fornece um ponto de acesso global a ela. No trecho de código PHP, a presença de um construtor privado, um atributo estático privado que armazena a instância e um método estático público que a retorna (ou cria, se ainda não existir) são as marcas registradas desse padrão.
O padrão Singleton é um dos padrões de projeto mais conhecidos e cobrados em provas de concurso. Ele pertence à categoria dos padrões criacionais, ou seja, aqueles que lidam com o processo de criação de objetos. A ideia central é simples: em vez de permitir que qualquer parte do código crie novas instâncias de uma classe com o operador new, o Singleton controla esse processo, garantindo que exista apenas uma única instância durante toda a execução do programa.
A implementação típica em linguagens como PHP, Java ou C# segue uma estrutura bem definida:
Construtor privado: impede que outras classes criem instâncias diretamente com new.
Atributo estático privado: armazena a única instância da classe.
Método estático público: o ponto de acesso global. Ele verifica se a instância já foi criada; se sim, retorna a existente; se não, cria uma nova e a armazena.
Esse padrão é útil em situações onde é necessário um único ponto de controle, como uma conexão com banco de dados, um gerenciador de configurações ou um log do sistema. A principal vantagem é evitar a criação desnecessária de múltiplos objetos que consumiriam recursos. A principal desvantagem, e por isso é criticado, é que ele introduz um estado global no sistema, o que pode dificultar os testes e criar acoplamento.
A banca explora o reconhecimento visual do padrão: o candidato precisa identificar a estrutura do código e associá-la ao nome correto. A pegadinha está em confundir o Singleton com outros padrões que também usam métodos estáticos ou construtores privados, mas com propósitos diferentes. O que define o Singleton é a combinação de construtor privado + atributo estático + método estático que retorna a instância única.
Guarde essa estrutura: é exatamente ela que separa o Singleton dos demais padrões listados nas alternativas.
O Template Method é um padrão comportamental que define o esqueleto de um algoritmo em um método, permitindo que subclasses redefinam algumas etapas sem alterar a estrutura geral. Ele usa herança e métodos abstratos, não um construtor privado com instância única. O código do enunciado não mostra uma hierarquia de classes com um algoritmo a ser seguido.
Alternativa B — ✅ Correta ⟵ GABARITO
A estrutura descrita — construtor privado, atributo estático privado e método estático público que retorna a instância — é a implementação clássica do Singleton. O objetivo é garantir uma única instância da classe e fornecer um acesso global a ela, exatamente o que o código faz.
Alternativa C — ❌ 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. Ele geralmente envolve um diretor e um builder com métodos para cada parte do objeto. O código do enunciado não mostra uma construção passo a passo de um objeto complexo.
Alternativa D — ❌ Incorreta
O Flyweight é um padrão estrutural que usa compartilhamento para suportar grandes quantidades de objetos de granularidade fina de forma eficiente. Ele separa o estado intrínseco (compartilhado) do extrínseco (único). O código do enunciado não mostra um mecanismo de compartilhamento de objetos para economizar memória.
Alternativa E — ❌ Incorreta
O Decorator é um padrão estrutural que anexa responsabilidades adicionais a um objeto dinamicamente, fornecendo uma alternativa flexível à herança para estender funcionalidade. Ele envolve uma interface comum e classes que a implementam e a "decoram". O código do enunciado não mostra uma cadeia de objetos que adicionam comportamento.