Questão de Engenharia de Software — Padrões de Projeto (Engenharia de Software) — INSTITUTO AOCP 2024
- Código
- qa631567
- Banca
- INSTITUTO AOCP
- Órgão
- SEAP PR
- Ano
- 2024
- Cargo
- Ag Prof ( )
- AIterator.
- BCommand.
- CStrategy.
- DPrototype.
- ESingleton.
GabaritoD — 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.
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.
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.
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.
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.
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.
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 💪.
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