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
qa631567
Banca
INSTITUTO AOCP
Órgão
SEAP PR
Ano
2024
Cargo
Ag Prof ( )
O Poder Executivo do Estado do Paraná utiliza Padrões de Projeto (Design Patterns) como soluções reutilizáveis para problemas comuns encontrados no design de software. Um padrão adotado pela organização cria novos objetos a partir da cópia de objetos existentes, evitando a criação de objetos duplicados. Considerando a descrição do padrão utilizado, qual padrão de projeto de design se encaixa nessa definição?
  1. AIterator.
  2. BCommand.
  3. CStrategy.
  4. DPrototype.
  5. ESingleton.
Revelar gabarito e comentário

GabaritoD — Prototype.

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 (Design Patterns): Prototype

Gabarito: letra D. O padrão Prototype (Protótipo) é o que cria novos objetos a partir da cópia (clonagem) de objetos existentes, evitando a recriação do zero — exatamente a definição do enunciado. Ele pertence à família dos padrões criacionais, que lidam com o processo de instanciação de objetos, conforme a classificação clássica do GoF (Gang of Four).

Os padrões de projeto são soluções gerais e reutilizáveis para problemas recorrentes no design de software. Eles não são código pronto, mas sim descrições de alto nível de como resolver um problema de forma elegante e adaptável. A classificação mais cobrada em concursos é a do livro "Design Patterns" (GoF), que divide os padrões em três famílias, de acordo com o problema que resolvem:

  • Criacionais (Creational): lidam com a criação de objetos, abstraindo o processo de instanciação. Exemplos: Singleton, Factory Method, Abstract Factory, Prototype e Builder.

  • Estruturais (Structural): tratam da composição de classes e objetos para formar estruturas maiores. Exemplos: Adapter, Decorator, Composite, Facade, Proxy.

  • Comportamentais (Behavioral): focam na comunicação e interação entre objetos. Exemplos: Observer, Strategy, Command, Iterator, Template Method.

O padrão Prototype se encaixa na família criacional porque seu objetivo é justamente evitar a criação de objetos duplicados a partir do zero. Em vez de instanciar uma nova classe e configurá-la manualmente, o Prototype permite que um objeto existente (o protótipo) sirva de modelo, sendo clonado para gerar novas instâncias. Isso é particularmente útil quando a criação de um objeto é custosa (em termos de processamento ou configuração) ou quando o sistema precisa de muitas variações de um mesmo objeto.

Na prática, o Prototype funciona assim: uma interface define um método clone() (ou copia()), e cada classe concreta implementa esse método retornando uma cópia de si mesma. O cliente, em vez de chamar um construtor, chama o método clone() de um objeto já existente. Por exemplo, em um editor de documentos, em vez de criar um novo documento do zero a cada vez, o sistema pode clonar um documento modelo (template) e fazer pequenas alterações. Isso economiza recursos e simplifica o processo de criação.

A pegadinha que a banca explora nesta questão é a confusão entre o Prototype e outros padrões, especialmente o Singleton. O Singleton garante que uma classe tenha apenas uma única instância em todo o sistema, fornecendo um ponto de acesso global a ela. Já o Prototype, ao contrário, cria novas instâncias a partir de cópias. Enquanto o Singleton limita a criação, o Prototype facilita a criação em massa por clonagem. Guarde essa distinção: é exatamente nela que as alternativas se dividem.

Padrões de projeto (GoF)
  • 1Criacionais
    • Prototype
      • cria por cópia/clonagem
    • Singleton
      • única instância global
    • Factory Method, Abstract Factory, Builder
  • 2Estruturais
    • Adapter, Decorator, Composite, Facade, Proxy
  • 3Comportamentais
    • Strategy, Command, Iterator, Observer, Template Method
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

O Iterator é um padrão comportamental que fornece uma maneira de acessar sequencialmente os elementos de um objeto agregado (como uma lista ou coleção) sem expor sua representação interna. Ele não tem relação com a criação de objetos por cópia; seu foco é a navegação e o acesso a elementos de uma coleção.

Alternativa B — ❌ 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 lida com a criação de objetos por cópia; seu foco é o encapsulamento de ações e a separação entre quem solicita e quem executa.

Alternativa C — ❌ Incorreta

O Strategy é um padrão comportamental que define uma família de algoritmos, encapsula cada um deles e os torna intercambiáveis. Ele permite que o algoritmo varie independentemente dos clientes que o utilizam. Não tem relação com a criação de objetos por cópia; seu foco é a seleção dinâmica de algoritmos em tempo de execução.

Alternativa D — ✅ Correta ⟵ GABARITO

O Prototype é o padrão criacional que cria novos objetos a partir da cópia (clonagem) de objetos existentes, evitando a criação de objetos duplicados do zero. O enunciado descreve exatamente essa característica: "cria novos objetos a partir da cópia de objetos existentes, evitando a criação de objetos duplicados". É a definição clássica do padrão Prototype.

Alternativa E — ❌ Incorreta

O Singleton é um padrão criacional que garante que uma classe tenha apenas uma única instância em todo o sistema e fornece um ponto de acesso global a ela. Ele restringe a criação de objetos, não a facilita por cópia. A confusão entre Singleton e Prototype é comum, mas são opostos: o Singleton limita a instanciação a uma única ocorrência, enquanto o Prototype gera novas instâncias por clonagem.

NÃO CAIA NESSA!

A banca tenta confundir o candidato entre os padrões criacionais Prototype e Singleton. A palavra-chave é "cópia de objetos existentes": o Prototype clona para criar novos objetos; o Singleton garante uma única instância, não cria cópias. Se o enunciado falar em "cópia" ou "clone", é Prototype; se falar em "única instância" ou "acesso global", é Singleton. Com treino, você enxerga essa distinção de longe 💪.

PEGA ESSA DICA!

Para questões de padrões de projeto, o primeiro passo é identificar a família do padrão (criacional, estrutural ou comportamental). Isso já elimina metade das alternativas. Depois, foque na intenção do padrão, não no nome. Memorize a tabela:

Família

Problema que resolve

Exemplos

Criacional

Criação de objetos

Singleton, Factory Method, Abstract Factory, Prototype, Builder

Estrutural

Composição de classes/objetos

Adapter, Decorator, Composite, Facade, Proxy

Comportamental

Comunicação entre objetos

Observer, Strategy, Command, Iterator, Template Method

Gabarito: letra D

Link permanente: /questoes/qa631567