Questão de Engenharia de Software — Padrões de Projeto (Engenharia de Software) — CESPE / CEBRASPE 2025
Engenharia de Software›Padrões de Projeto (Engenharia de Software)
Código
ce417758
Banca
CESPE / CEBRASPE
Órgão
TRF 6
Ano
2025
Cargo
AJ TRF6
Julgue o item a seguir relativo à arquitetura de microsserviços, ao domain-driven design e a design patterns.
O padrão decorator permite que classes concretas sejam envolvidas em uma hierarquia de objetos que compartilham a mesma interface, em que cada decorador implementa a interface base e delega chamadas para o objeto decorado, adicionando funcionalidade antes ou depois da delegação.
CCerto
EErrado
Revelar gabarito e comentário▾
GabaritoC — Certo
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ão Decorator: composição transparente de responsabilidades
Gabarito: Certo (C). A afirmativa descreve com precisão o padrão estrutural Decorator (GoF): um decorador implementa a mesma interface do componente que envolve e delega a ele as chamadas, acrescentando comportamento antes ou depois da delegação — exatamente o que o enunciado afirma. A fonte é o catálogo clássico de padrões de projeto (Gamma et al., 1995), que classifica o Decorator como padrão estrutural.
O padrão Decorator resolve um problema recorrente em projetos orientados a objetos: como adicionar responsabilidades a um objeto de forma dinâmica e transparente, sem recorrer à herança para cada combinação possível de funcionalidades. A herança é estática (decidida em tempo de compilação) e pode gerar uma explosão de subclasses — pense em um café com combinações de leite, chocolate, chantilly e canela: com herança pura, seriam necessárias dezenas de classes. O Decorator ataca exatamente esse problema.
A estrutura do padrão é composta por quatro elementos: (1) a interface base (Component), que define as operações comuns; (2) o componente concreto (ConcreteComponent), que implementa a interface e fornece o comportamento original; (3) a classe decoradora abstrata (Decorator), que também implementa a interface e mantém uma referência a um Component; e (4) os decoradores concretos (ConcreteDecorator), que estendem a classe decoradora e adicionam responsabilidades. O ponto-chave é que o decorador envolve o componente e delega a ele as chamadas, podendo executar lógica adicional antes ou depois dessa delegação.
Na prática, o funcionamento é uma cadeia de invocações. Suponha uma interface Bebida com o método custo(). A classe Cafe implementa Bebida e retorna R$ 5,00. O decorador Leite recebe uma Bebida no construtor, implementa custo() chamando bebida.custo() + 1.50. O decorador Chantilly faz o mesmo, adicionando R$ 2,00. Ao criar new Chantilly(new Leite(new Cafe())), a chamada a custo() percorre a cadeia: Chantilly delega para Leite, que delega para Cafe, e cada um soma sua parcela no retorno — R$ 8,50 no total. É exatamente o que o enunciado descreve: "cada decorador implementa a interface base e delega chamadas para o objeto decorado, adicionando funcionalidade antes ou depois da delegação".
A distinção que mais confunde em prova é entre Decorator e Composite. Ambos são padrões estruturais que trabalham com uma interface comum e delegação, mas com propósitos opostos: o Composite compõe objetos em estruturas de árvore para que clientes tratem objetos individuais e composições de forma uniforme (o todo e a parte têm o mesmo tratamento); o Decorator adiciona responsabilidades a um único objeto, envolvendo-o em uma camada que estende seu comportamento. Outra confusão comum é com o Adapter, que converte a interface de uma classe em outra interface esperada pelo cliente — o Adapter muda a interface; o Decorator preserva a interface e apenas acrescenta comportamento.
A pegadinha que a banca explora neste tema é inverter os papéis: afirmar que o decorador substitui o objeto decorado, ou que ele altera a interface base. Nada disso — o decorador mantém a mesma interface e delega ao objeto original, apenas embrulhando-o com funcionalidade extra. O enunciado desta questão está tecnicamente impecável e não contém armadilha: é uma descrição fiel do padrão.
Guarde a essência: Decorator = mesma interface + delegação + funcionalidade extra antes/depois. É esse tripé que a afirmativa espelha e que separa o Decorator dos demais padrões estruturais.
Decorator (GoF — estrutural)
1Objetivo
Adicionar responsabilidades dinamicamente
Evitar explosão de subclasses (herança)
2Estrutura
Component (interface base)
ConcreteComponent (comportamento original)
Decorator
implementa a interface + referência ao Component
ConcreteDecorator (adiciona funcionalidade)
3Mecânica
Mesma interface
Delega ao objeto decorado
Funcionalidade antes/depois da delegação
4Confusões comuns
Composite (compõe árvore todo/parte)
Adapter (converte a interface)
LEVEL · soulevel.com.br
Item — ✅ CERTO
A afirmativa está correta porque descreve com fidelidade a mecânica do padrão Decorator. Vejamos cada trecho:
"classes concretas sejam envolvidas em uma hierarquia de objetos que compartilham a mesma interface" — correto: o decorador e o componente concreto implementam a mesma interface (Component), permitindo que o decorador seja usado no lugar do componente original de forma transparente.
"cada decorador implementa a interface base" — correto: a classe decoradora (abstrata ou concreta) implementa a interface do componente.
"delega chamadas para o objeto decorado" — correto: o decorador mantém uma referência ao componente que envolve e repassa a ele as chamadas.
"adicionando funcionalidade antes ou depois da delegação" — correto: é exatamente essa a essência do padrão — o decorador executa lógica adicional antes de chamar o método do componente, depois, ou ambos.
Não há nenhum termo trocado ou conceito invertido. A descrição corresponde à definição canônica do padrão Decorator do catálogo GoF (Gamma, Helm, Johnson e Vlissides, 1995), classificado como padrão estrutural. O enunciado não afirma que o decorador substitui o objeto, nem que altera a interface — apenas que o envolve e delega, o que é a definição precisa do padrão.