Pular para o conteúdo principal

Questão de Arquitetura de Software — Padrões de projeto (Design Patterns) — FGV 2025

Arquitetura de SoftwarePadrões de projeto (Design Patterns)
Código
fg104555
Banca
FGV
Órgão
AL-AM
Ano
2025
Nível
Superior
Cargo
Analista Legislativo - Analista de Sistema
Um sistema legado da Assembleia Legislativa utiliza um módulo de criptografia CriptoLegado com uma interface específica criptografar(dados, chave). O Analista de Sistemas precisa integrar esse módulo a um novo framework que espera que todos os serviços de segurança implementem a interface IServicoSeguranca, que define o método proteger Informacao(dados,tipoAlgoritmo).O Padrão de Projeto Estrutural que deve ser empregado para que o módulo legado possa ser utilizado pelo novo framework sem que seja necessário modificar o código do módulo legado ou a interface do novo framework é o
  1. ADecorator.
  2. BBridge.
  3. CFacade.
  4. DProxy.
  5. EAdapter.
Revelar gabarito e comentário

GabaritoE — Adapter.

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 – Adapter

Gabarito: letra E. O cenário descreve a necessidade de integrar um módulo legado (CriptoLegado) com interface criptografar(dados, chave) a um novo framework que espera a interface IServicoSeguranca com método protegerInformacao(dados, tipoAlgoritmo). O padrão estrutural Adapter é o indicado para fazer duas interfaces incompatíveis trabalharem juntas, sem modificar o código fonte de nenhuma delas. Ele atua como um "tradutor" entre as interfaces.

A banca testa o conhecimento dos principais padrões estruturais do catálogo GoF (Gang of Four). A chave da questão é identificar que o problema é de incompatibilidade de interfaces – o legado tem uma interface, o novo framework espera outra. O Adapter resolve exatamente isso.

Padrão Estrutural (GoF)

Finalidade Principal

Aplicação no Cenário

Resolve Incompatibilidade de Interfaces?

Adapter (Gabarito)

Converter a interface de uma classe em outra interface esperada pelo cliente.

Traduz criptografar(dados, chave) do legado para protegerInformacao(dados, tipoAlgoritmo) do novo framework.

Sim – é a essência do padrão.

Decorator

Adicionar responsabilidades dinamicamente a um objeto, sem alterar sua interface.

Não se aplica; o problema não é estender comportamento, mas adaptar interfaces.

Não

Bridge

Separar abstração da implementação, permitindo que ambas variem independentemente.

Não se aplica; não há hierarquia de abstração/implementação a ser desacoplada.

Não

Facade

Fornecer uma interface simplificada para um subsistema complexo.

Poderia ocultar a complexidade do legado, mas não converte a interface específica do legado para a esperada pelo framework.

Não (cria nova interface, não converte a existente)

Proxy

Fornecer um substituto para controlar o acesso a outro objeto.

Não se aplica; o problema não é controle de acesso, mas compatibilidade de interfaces.

Não

1Adapter
Converte interface incompatível
Ex.: CriptoLegado → IServicoSeguranca
2Decorator
Adiciona comportamento dinâmico
3Bridge
Separa abstração da implementação
4Facade
Simplifica subsistema complexo
5Proxy
Controla acesso ao objeto
Padrões estruturais (GoF)
LEVELsoulevel.com.br
Padrões estruturais (GoF): Adapter (Converte interface incompatível, Ex.: CriptoLegado → IServicoSeguranca); Decorator (Adiciona comportamento dinâmico); Bridge (Separa abstração da implementação); Facade (Simplifica subsistema complexo); Proxy (Controla acesso ao objeto)

Alternativa A — ❌ Incorreta (Decorator)

O Decorator tem a finalidade de adicionar responsabilidades/comportamentos dinamicamente a um objeto, sem alterar sua interface. Não se aplica à adaptação de interfaces – ele estende funcionalidades, não resolve incompatibilidade.

Alternativa B — ❌ Incorreta (Bridge)

O Bridge separa a abstração da implementação, permitindo que ambas variem independentemente. É útil quando se quer evitar vínculo permanente entre interface e implementação, mas não é o padrão para integrar interfaces pré-existentes incompatíveis.

Alternativa C — ❌ Incorreta (Facade)

O Facade fornece uma interface simplificada para um subsistema complexo. Embora possa ocultar a complexidade do legado, ele não resolve a incompatibilidade de interfaces – o Facade cria uma nova interface, mas não converte a interface existente do legado para a esperada pelo framework.

NÃO CAIA NESSA!

Confundir Facade com Adapter. Ambos lidam com interfaces, mas o Facade simplifica um conjunto de interfaces (visa reduzir complexidade), enquanto o Adapter converte uma interface específica em outra esperada pelo cliente (visa compatibilizar). A banca explora essa troca sutil.

Alternativa D — ❌ Incorreta (Proxy)

O Proxy fornece um substituto ou representante de outro objeto para controlar o acesso a ele (ex.: lazy loading, controle de acesso, logging). Não tem relação com adaptação de interfaces – mantém a mesma interface do objeto real.

Alternativa E — ✅ Correta ⟵ GABARITO

O Adapter (também conhecido como Wrapper) converte a interface de uma classe em outra interface que o cliente espera. No caso, o Adapter envolveria o módulo CriptoLegado, implementaria a interface IServicoSeguranca e, dentro do método protegerInformacao, chamaria o método criptografar do legado, fazendo a tradução necessária entre os parâmetros. Isso permite a integração sem alterar o código legado nem a interface do framework.

PEGA ESSA DICA!

Em questões de padrões de projeto, identifique primeiro o problema que o padrão resolve. Se for incompatibilidade de interfaces → Adapter. Se for adicionar funcionalidade a um objeto sem subclasse → Decorator. Se for separar abstração da implementação → Bridge. Se for simplificar um subsistema → Facade. Se for controlar acesso a um objeto → Proxy.

Gabarito: letra E (Adapter).

Link permanente: /questoes/fg104555