Pular para o conteúdo principal

Questão de Engenharia de Software — Geral — FUNDATEC 2025

Engenharia de SoftwareGeral
Código
qa699982
Banca
FUNDATEC
Órgão
SBC
Ano
2025
Cargo
POSCOMP ( )
Uma empresa de desenvolvimento de software está desenvolvendo um módulo de IA para seu principal produto. Nesse software, existe um algoritmo que calcula de forma determinística um valor aproximado e retorna para o módulo que apresenta o resultado na interface gráfica. O desenvolvedor deve modificar o código de forma que seja possível trocar essa rotina que realiza o cálculo por um modelo treinado de IA, sendo possível trocar entre eles em tempo de execução e também sendo possível adicionar novas formas de cálculo. Esse módulo de cálculo a ser desenvolvido deve estar encapsulado para os módulos que se comunicam com ele. Qual padrão de projeto o desenvolvedor deve usar nesse caso?
  1. ADecorator.
  2. BFactory Method.
  3. CProxy.
  4. DBuilder.
  5. EStrategy.
Revelar gabarito e comentário

GabaritoE — Strategy.

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: Strategy

Gabarito: letra E. O padrão Strategy é o que atende exatamente ao cenário descrito: ele permite definir uma família de algoritmos (o cálculo determinístico atual e o modelo treinado de IA), encapsulá-los em classes separadas e torná-los intercambiáveis em tempo de execução, sem que os módulos clientes conheçam a implementação específica. A essência está na troca dinâmica de comportamento via uma interface comum, que é o coração do Strategy.

O problema apresentado é um clássico de design de software: existe um algoritmo que calcula um valor aproximado, e o desenvolvedor precisa substituí-lo por um modelo de IA, permitindo alternar entre eles em tempo de execução e adicionar novas formas de cálculo futuramente. Isso é exatamente o que o padrão Strategy resolve. Ele define uma família de algoritmos, encapsula cada um deles em uma classe própria e os torna intercambiáveis. O cliente (o módulo que apresenta o resultado) depende apenas de uma interface comum, não da implementação concreta. Assim, a troca entre o cálculo determinístico e o modelo de IA é feita simplesmente alterando qual objeto Strategy está sendo usado, sem modificar o código do cliente.

A chave para identificar o Strategy é a combinação de três requisitos: encapsulamento do algoritmo, intercambialidade em tempo de execução e extensibilidade para novos algoritmos. O padrão atende a todos: o algoritmo fica encapsulado em uma classe Strategy; a troca em tempo de execução é feita pela composição (o contexto mantém uma referência à interface Strategy e pode ser alterada); e novos algoritmos são adicionados criando novas classes que implementam a mesma interface, sem tocar no código existente. Isso segue o princípio do Open/Closed (aberto para extensão, fechado para modificação).

Vamos comparar com os outros padrões para fixar a distinção:

Critério

Strategy

Decorator

Factory Method

Proxy

Builder

Objetivo

Trocar algoritmos em tempo de execução

Adicionar responsabilidades dinamicamente

Encapsular a criação de objetos

Controlar acesso a um objeto

Construir objetos complexos passo a passo

Estrutura

Interface + classes que implementam algoritmos

Envolve o objeto com classes decoradoras

Método que cria objetos

Intercepta chamadas ao objeto real

Diretor + construtor (builder)

Troca em tempo de execução

Sim, via composição

Sim, mas adiciona comportamento, não troca o algoritmo

Não, a criação é fixa

Não, o proxy é transparente

Não, o produto é construído de uma vez

Foco

Comportamento (algoritmo)

Responsabilidade (funcionalidade extra)

Criação (instanciação)

Acesso (controle)

Construção (montagem)

A pegadinha da banca está em confundir o Strategy com o Factory Method. O Factory Method também lida com a criação de objetos, mas seu foco é como os objetos são criados, não como eles se comportam. No cenário, o problema não é criar o algoritmo, mas trocar o algoritmo em execução. O Strategy é o padrão comportamental que resolve isso. O Decorator, por sua vez, adiciona responsabilidades a um objeto, mas não troca o algoritmo principal — ele envolve o objeto com funcionalidades extras. O Proxy controla o acesso a um objeto, e o Builder constrói objetos complexos passo a passo. Nenhum deles se encaixa na necessidade de trocar a rotina de cálculo por um modelo de IA em tempo de execução.

Guarde o critério decisivo: se o requisito é trocar o algoritmo em tempo de execução, o padrão é Strategy. É exatamente essa a fronteira que separa as alternativas.

Alternativa A — ❌ Incorreta

O Decorator adiciona responsabilidades a um objeto dinamicamente, envolvendo-o com classes decoradoras. Ele é usado para estender funcionalidades, não para trocar o algoritmo principal. No cenário, o objetivo é substituir a rotina de cálculo por outra, não adicionar comportamento a ela. O Decorator não permite trocar o algoritmo em tempo de execução; ele apenas agrega funcionalidades.

Alternativa B — ❌ Incorreta

O Factory Method é um padrão criacional que encapsula a criação de objetos, permitindo que subclasses decidam qual classe instanciar. Ele resolve o problema de como criar o objeto, mas não o de trocar o algoritmo em execução. No cenário, o foco é a intercambialidade do cálculo, não a sua criação. O Factory Method não atende ao requisito de troca dinâmica.

Alternativa C — ❌ Incorreta

O Proxy fornece um substituto ou representante de outro objeto para controlar o acesso a ele. Ele é usado para adicionar uma camada de controle (como lazy loading, acesso remoto, segurança), mas não para trocar o algoritmo. No cenário, não há necessidade de controle de acesso; a necessidade é de intercambialidade de algoritmos.

Alternativa D — ❌ Incorreta

O Builder é um padrão criacional que separa a construção de um objeto complexo de sua representação, permitindo que o mesmo processo de construção crie diferentes representações. Ele é usado para montar objetos passo a passo, não para trocar algoritmos. No cenário, o problema não é a construção do objeto, mas a troca do comportamento de cálculo.

Alternativa E — ✅ Correta ⟵ GABARITO

O Strategy define uma família de algoritmos, encapsula cada um deles e os torna intercambiáveis. O contexto (o módulo que apresenta o resultado) mantém uma referência à interface Strategy e pode trocar o algoritmo em tempo de execução. Isso atende perfeitamente aos requisitos: encapsulamento do cálculo, troca dinâmica entre o algoritmo determinístico e o modelo de IA, e extensibilidade para novas formas de cálculo. É o padrão comportamental ideal para esse cenário.

PEGA ESSA DICA!

Para identificar o Strategy na prova, procure por palavras-chave como "trocar em tempo de execução", "família de algoritmos", "intercambiável" e "encapsular o algoritmo". Se a questão mencionar "adicionar responsabilidades", pense em Decorator; se mencionar "criar objetos", pense em Factory Method; se mencionar "controlar acesso", pense em Proxy; se mencionar "construir passo a passo", pense em Builder. O Strategy é o único que foca na troca de comportamento.

Gabarito: letra E

Link permanente: /questoes/qa699982