Questão de Engenharia de Software — Desenvolvimento de Software — INSTITUTO AOCP 2024
Engenharia de Software›Desenvolvimento de Software
Código
qg261784
Banca
INSTITUTO AOCP
Órgão
SANEPAR
Ano
2024
Nível
Superior
Cargo
Profissional - Analista de Informática
Você, como analista de informática da Sanepar, está desenvolvendo um sistema que gerencia o acesso a dados confidenciais, como consumo de água dos clientes. Para garantir que apenas usuários autorizados acessem esses dados, você precisa utilizar um padrão de projeto estrutural que controle esse acesso.Diante dessa incumbência, qual padrão de projeto estrutural você deve usar para agir como um substituto ou representante dos objetos reais, garantindo o controle de acesso?
AIterator.
BObserver.
CInterpreter.
DCommand.
EProxy.
Revelar gabarito e comentário▾
GabaritoE — Proxy.
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 Estruturais: Proxy
Gabarito: letra E. O padrão Proxy é o padrão estrutural que fornece um substituto ou representante de outro objeto para controlar o acesso a ele, exatamente o que o enunciado pede ao mencionar "agir como um substituto ou representante dos objetos reais, garantindo o controle de acesso". As demais alternativas (Iterator, Observer, Interpreter, Command) são padrões de comportamento, não estruturais.
Os padrões de projeto (design patterns) são soluções gerais e reutilizáveis para problemas recorrentes no desenvolvimento de software. Eles são classificados em três grandes categorias: criacionais (lidam com a criação de objetos), estruturais (lidam com a composição de classes e objetos) e comportamentais (lidam com a interação e responsabilidades entre objetos). O padrão Proxy pertence à categoria estrutural, pois define uma estrutura que envolve um objeto real e um substituto (proxy) que controla o acesso a ele.
O Proxy atua como um intermediário entre o cliente e o objeto real. Ele implementa a mesma interface do objeto real, de modo que o cliente não percebe que está falando com um substituto. Isso permite adicionar funcionalidades como controle de acesso, cache, logging, lazy initialization, entre outras, sem modificar o objeto real. No caso do enunciado, o objetivo é "garantir que apenas usuários autorizados acessem esses dados", ou seja, um proxy de proteção (protection proxy), que verifica as permissões do usuário antes de delegar a chamada ao objeto real.
Para entender melhor, imagine um sistema de gerenciamento de consumo de água. O objeto real é a classe ConsumoAgua, que contém os dados confidenciais. O proxy ProxyConsumoAgua implementa a mesma interface e, antes de chamar o método getConsumo(), verifica se o usuário logado tem permissão de acesso. Se tiver, delega a chamada ao objeto real; se não, lança uma exceção ou retorna um erro. Assim, o proxy controla o acesso sem que o objeto real precise conhecer regras de autenticação.
A pegadinha desta questão está em reconhecer que Proxy é um padrão estrutural, enquanto as alternativas incorretas são padrões comportamentais. O candidato que não domina a classificação dos padrões GoF pode confundir e marcar um padrão comportamental, como Command ou Observer, que também lidam com controle de fluxo, mas não com substituição de objetos. A banca explora exatamente essa confusão entre as categorias.
Guarde a distinção: estrutural = composição de classes/objetos (Proxy, Adapter, Decorator, Facade, Composite, Bridge, Flyweight); comportamental = interação entre objetos (Iterator, Observer, Interpreter, Command, Strategy, Template Method, etc.). É nessa fronteira que as alternativas se dividem.
Alternativa A — ❌ Incorreta
O Iterator é um padrão comportamental que fornece uma maneira de acessar sequencialmente os elementos de um objeto agregado sem expor sua representação interna. Ele não atua como substituto de objetos reais nem controla acesso; apenas percorre coleções. A banca o inclui como distrator por ser um padrão conhecido, mas não se aplica ao cenário de controle de acesso.
Alternativa B — ❌ Incorreta
O Observer é um padrão comportamental que define uma dependência um-para-muitos entre objetos, de modo que quando um objeto muda de estado, todos os seus dependentes são notificados e atualizados automaticamente. Não há substituição de objetos nem controle de acesso; é usado para propagar mudanças de estado, como em sistemas de eventos.
Alternativa C — ❌ Incorreta
O Interpreter é um padrão comportamental que define uma representação gramatical para uma linguagem e um interpretador que usa essa representação para interpretar sentenças dessa linguagem. É usado para avaliar expressões, como em calculadoras ou compiladores. Não tem relação com controle de acesso a objetos.
Alternativa D — ❌ Incorreta
O Command é um padrão comportamental que encapsula uma solicitação como um objeto, permitindo parametrizar clientes com filas, solicitações e operações, além de suportar operações reversíveis (undo). Ele não substitui objetos reais nem controla acesso; é usado para desacoplar o solicitante da execução da ação.
Alternativa E — ✅ Correta ⟵ GABARITO
O Proxy é um padrão estrutural que fornece um substituto ou representante de outro objeto para controlar o acesso a ele. Ele implementa a mesma interface do objeto real e pode adicionar funcionalidades como controle de acesso, cache, logging, lazy initialization, entre outras. No cenário do enunciado, o proxy de proteção verifica as permissões do usuário antes de permitir o acesso aos dados confidenciais, garantindo que apenas usuários autorizados os acessem. É exatamente a definição pedida.
NÃO CAIA NESSA!
A banca mistura padrões de categorias diferentes. O candidato que decora apenas os nomes, sem saber a classificação, pode cair em Command ou Observer, que também envolvem controle de fluxo, mas são comportamentais. Lembre-se: Proxy é estrutural — ele "representa" um objeto, não "interage" com ele. Com treino, você identifica a categoria na hora.
PEGA ESSA DICA!
Para questões de padrões de projeto, monte uma tabela mental com os padrões GoF por categoria. Os mais cobrados em concursos são: Criacionais (Singleton, Factory Method, Abstract Factory, Builder, Prototype), Estruturais (Adapter, Decorator, Facade, Proxy, Composite, Bridge, Flyweight) e Comportamentais (Strategy, Observer, Command, Iterator, Template Method, State, Chain of Responsibility, Interpreter, Mediator, Memento, Visitor). Quando a questão falar em "substituto", "representante", "controle de acesso", "cache", "lazy loading", a resposta quase sempre é Proxy.