Pular para o conteúdo principal

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

Engenharia de SoftwareGeral
Código
fc150559
Banca
FCC
Órgão
TRT 2
Ano
2025
Cargo
AJ TRT2

Durante a modernização do sistema de distribuição de processos judiciais em um Tribunal Regional do Trabalho, a equipe técnica identificou a necessidade de encapsular diferentes critérios de distribuição (por volume de trabalho, especialidade do magistrado, ou sorteio aleatório), mantendo a flexibilidade de alterar a lógica sem afetar os demais componentes do sistema.

 

Além disso, os analistas de requisitos demandaram um controle rigoroso de alterações na configuração de distribuição, com geração de logs e confirmação de operação, para atender à resolução do CNJ sobre rastreabilidade.

 

Considerando as boas práticas de Engenharia de Software e o uso adequado de Padrões de Projeto (Design Patterns), a decisão tecnicamente mais apropriada é:

  1. AUtilizar o padrão Decorator para empilhar diferentes estratégias de distribuição, permitindo herança dinâmica de critérios e o padrão Singleton para construir objetos complexos passo a passo.
  2. BUtilizar o padrão Adapter para converter critérios legados de distribuição em novos formatos, eliminando a necessidade de alterar os algoritmos principais.
  3. CAplicar o padrão Strategy para encapsular os diferentes algoritmos de distribuição, junto ao padrão Command para permitir ações como “aplicar distribuição”, “registrar log” e “confirmar operação” como comandos reutilizáveis e rastreáveis.
  4. DUtilizar exclusivamente o padrão Singleton para garantir uma única instância da lógica de distribuição e centralizar todas as decisões no mesmo objeto compartilhado.
  5. EAplicar o padrão Observer em conjunto com o Prototype para que os critérios de distribuição sejam automaticamente atualizados com base nas alterações no banco de dados do CNJ.
Revelar gabarito e comentário

GabaritoC — Aplicar o padrão Strategy para encapsular os diferentes algoritmos de distribuição, junto ao padrão Command para permitir ações como “aplicar distribuição”, “registrar log” e “confirmar operação” como comandos reutilizáveis e rastreáveis.

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 e Command

Gabarito: letra C. A combinação mais adequada é o padrão Strategy para encapsular os diferentes algoritmos de distribuição (volume de trabalho, especialidade, sorteio) e o padrão Command para encapsular as operações de "aplicar distribuição", "registrar log" e "confirmar operação" como objetos reutilizáveis e rastreáveis. O Strategy permite trocar a lógica de distribuição em tempo de execução sem afetar o cliente, e o Command atende ao requisito de rastreabilidade e controle de alterações.

O problema apresentado tem duas necessidades distintas: (1) encapsular algoritmos intercambiáveis de distribuição e (2) controlar e registrar operações de configuração. O padrão Strategy resolve a primeira: ele define uma família de algoritmos, encapsula cada um deles e os torna intercambiáveis, permitindo que o algoritmo varie independentemente dos clientes que o utilizam. No contexto do tribunal, cada critério de distribuição (por volume de trabalho, especialidade do magistrado ou sorteio aleatório) seria uma estratégia concreta, e o sistema poderia alternar entre elas sem modificar o código que as utiliza — exatamente o que o enunciado pede ao mencionar "flexibilidade de alterar a lógica sem afetar os demais componentes".

A segunda necessidade — "controle rigoroso de alterações na configuração de distribuição, com geração de logs e confirmação de operação" — é resolvida pelo padrão Command. O Command 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. Ao transformar "aplicar distribuição", "registrar log" e "confirmar operação" em comandos, cada ação vira um objeto que pode ser armazenado, auditado e executado de forma controlada, atendendo à exigência de rastreabilidade do CNJ.

A combinação Strategy + Command é clássica: o Strategy define o algoritmo (o que fazer), e o Command define a operação (quando e como fazer, com registro). Enquanto o Strategy se preocupa com a variação do comportamento, o Command se preocupa com a invocação e o controle da execução. Essa separação é o que torna o sistema flexível e auditável ao mesmo tempo.

A pegadinha da banca está em misturar padrões com propósitos diferentes: Decorator (adicionar responsabilidades dinamicamente), Singleton (garantir instância única), Adapter (converter interfaces), Observer (notificação de mudanças) e Prototype (cópia de objetos). Nenhum deles, isoladamente ou em combinações erradas, atende aos dois requisitos simultaneamente. Guarde a fronteira: Strategy para algoritmos intercambiáveis, Command para operações rastreáveis — é exatamente nela que as alternativas se dividem.

Padrão de Projeto

Categoria

Função Principal

Adequação ao Enunciado

Strategy

Comportamental

Encapsular algoritmos intercambiáveis (critérios de distribuição)

✅ Resolve a variação da lógica sem afetar o cliente

Command

Comportamental

Encapsular operações como objetos (aplicar, logar, confirmar)

✅ Atende à rastreabilidade e controle de alterações

Decorator

Estrutural

Adicionar responsabilidades dinamicamente

❌ Não encapsula algoritmos intercambiáveis

Singleton

Criacional

Garantir instância única

❌ Não resolve variação de algoritmos nem log

Adapter

Estrutural

Converter interfaces incompatíveis

❌ Foca em integração, não em variação/rastreabilidade

Observer

Comportamental

Notificar mudanças um-para-muitos

❌ Não encapsula algoritmos nem operações

Prototype

Criacional

Criar objetos por cópia

❌ Sem relação com atualização automática

Padrões de Projeto
  • 1Strategy
    • encapsula algoritmos intercambiáveis
    • critérios de distribuição
  • 2Command
    • encapsula operações como objetos
    • logs e confirmação
  • 3Outros padrões
    • Decorator: adiciona responsabilidades
    • Singleton: instância única
    • Adapter: converte interfaces
    • Observer: notificação de mudanças
    • Prototype: cópia de objetos
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

O Decorator adiciona responsabilidades a um objeto dinamicamente, empilhando comportamentos — não é adequado para encapsular algoritmos intercambiáveis como critérios de distribuição. Além disso, o Singleton garante uma única instância, mas não "constrói objetos complexos passo a passo" — essa é a função do padrão Builder. A alternativa mistura os propósitos dos padrões: Decorator é estrutural, Singleton é criacional, e nenhum dos dois resolve a variação de algoritmos nem o controle de operações.

Alternativa B — ❌ Incorreta

O Adapter converte a interface de uma classe em outra interface esperada pelos clientes, permitindo que classes incompatíveis trabalhem juntas. Embora possa ser útil para integrar sistemas legados, ele não encapsula algoritmos intercambiáveis nem fornece mecanismo de log e confirmação de operações. A alternativa descreve um cenário de integração, não de variação de comportamento e rastreabilidade — que são os requisitos centrais do enunciado.

Alternativa C — ✅ Correta ⟵ GABARITO

O Strategy encapsula os algoritmos de distribuição (volume, especialidade, sorteio) em classes separadas, tornando-os intercambiáveis sem afetar o cliente. O Command encapsula as operações "aplicar distribuição", "registrar log" e "confirmar operação" como objetos, permitindo armazenamento, auditoria e execução controlada — atendendo à exigência de rastreabilidade. A combinação resolve exatamente os dois requisitos: flexibilidade de alteração da lógica e controle rigoroso das alterações.

Alternativa D — ❌ Incorreta

O Singleton garante uma única instância de uma classe, mas não resolve a variação de algoritmos nem o controle de operações. Centralizar todas as decisões em um único objeto compartilhado violaria o princípio da responsabilidade única e dificultaria a manutenção e a testabilidade. O Singleton é um padrão criacional, não comportamental — não é a solução para encapsular critérios de distribuição nem para gerar logs e confirmações.

Alternativa E — ❌ Incorreta

O Observer define uma dependência um-para-muitos entre objetos, notificando observadores quando o sujeito muda — não é adequado para encapsular algoritmos de distribuição. O Prototype cria novos objetos copiando um protótipo existente — não tem relação com atualização automática baseada em banco de dados. A alternativa descreve um cenário de notificação e clonagem, que não atende aos requisitos de variação de algoritmo e rastreabilidade de operações.

Gabarito: letra C

Link permanente: /questoes/fc150559