Sapien IA
Computação Múltipla Escolha

Um colega seu de trabalho está implementando uma interface com o usuário de um sistema que dispara a execução de uma lógica de negócio envolvendo vários objetos. Ele implementa uma primeira versão que faz diversas chamadas a objetos da lógica de negócio porque não existe uma interface de mais alto nível disponível que encapsule esta complexidade. Para piorar, ao implementar um segundo módulo de interface com o usuário, ele se depara com o mesmo problema, tendo que copiar e colar partes da lógica utilizada no primeiro módulo de interface com o usuário. Ao revisar o código feito pelo seu colega, qual padrão você recomendaria que ele utilizasse para diminuir o acoplamento entre os módulos de interface com o usuário e módulos referentes à lógica de negócio?

Um colega seu de trabalho está implementando uma interface com o usuário de um sistema que dispara a execução de uma lógica de negócio envolvendo vários objetos. Ele implementa uma primeira versão que faz diversas chamadas a objetos da lógica de negócio porque não existe uma interface de mais alto nível disponível que encapsule esta complexidade. Para piorar, ao implementar um segundo módulo de interface com o usuário, ele se depara com o mesmo problema, tendo que copiar e colar partes da lógica utilizada no primeiro módulo de interface com o usuário. Ao revisar o código feito pelo seu colega, qual padrão você recomendaria que ele utilizasse para diminuir o acoplamento entre os módulos de interface com o usuário e módulos referentes à lógica de negócio?

  1. Proxy
  2. Composite
  3. Flyweight
  4. Adapter
  5. Facade

Resolução completa

Explicação passo a passo

E
Alternativa E

Alternativa E - Facade

O cenário descrito na questão é um exemplo clássico da necessidade do padrão Facade (Fachada) em Engenharia de Software. O problema central é a complexidade de interação com um subsistema (lógica de negócio) composto por vários objetos, onde o módulo de interface precisa conhecer muitos detalhes internos.

Análise Detalhada

O padrão Facade tem como objetivo principal fornecer uma interface unificada e simplificada para um conjunto de interfaces em um subsistema. Ele atua como um "encapsulador" da complexidade.

Por que a alternativa E está correta?

  • Simplificação de Interação: O enunciado menciona explicitamente que não existe uma "interface de mais alto nível disponível que encapsule esta complexidade". O Padrão Facade resolve isso criando uma classe única que agrupa todas as operações necessárias.
  • Redução de Acoplamento: Ao utilizar um Facade, os módulos de interface dependem apenas da API simples do Facade, e não dos objetos individuais da lógica de negócio. Isso diminui drasticamente o acoplamento.
  • Reutilização: Com um Facade centralizado, evita-se a necessidade de copiar e colar código repetitivo em diferentes módulos de interface, resolvendo o segundo problema citado no texto.

Tabela Comparativa dos Padrões citados:

PadrãoObjetivo PrincipalAplicabilidade no Cenário
ProxyControlar acesso ou criar representação de um objetoNão se aplica à simplificação de subsistemas complexos
CompositeTratar objetos individuais e composições uniformementeFocado em estruturas hierárquicas (árvores)
FlyweightMinimizar uso de memória compartilhando dadosFocado em otimização de recursos, não em interface
AdapterConverter interface de uma classe para outraFocado em compatibilidade entre interfaces incompatíveis
FacadeFornecer interface simplificada para subsistema complexoCorreto: Resolve a complexidade e acoplamento

Em resumo, ao introduzir um padrão Facade, seu colega criaria uma camada intermediária que esconde a complexidade dos objetos de negócio, permitindo que a interface interaja de forma limpa e desacoplada.

Tem outra questão para resolver?

Resolver agora com IA

Mais questões de Computação

Ver mais Computação resolvidas

Tem outra questão de Computação?

Cole o enunciado, tire uma foto ou descreva o problema — a IA resolve com explicação completa em segundos.