Pular para o conteúdo principal

Questão de Arquitetura de Software — Padrões de projeto (Design Patterns) — FCC 2016

Arquitetura de SoftwarePadrões de projeto (Design Patterns)
Código
fc028409
Banca
FCC
Órgão
CREMESP
Ano
2016
Nível
Superior
Cargo
Analista de Tecnologia da Informação - Análise de Sistemas
Suponha que exista uma interface ITraduzFrase que define o método imprimeFrase(). Existem, também, as classes InglesTraduzFrase, EspanholTraduzFrase e AlemaoTraduzFrase que estendem a interface ITraduzFrase e utilizam o método imprimeFrase(). Um Analista utilizou um design pattern que cria objetos de forma dinâmica sem conhecer a classe de implementação. A classe FrasePadrao implementa esse padrão de forma que, de acordo com o idioma desejado, retorna um objeto do tipo ITraduzFrase. O objetivo é que, sendo fornecido o idioma, a frase será nele impressa, em inglês, espanhol ou alemão.Considerando o exemplo e sabendo que a definição do padrão é "Define uma interface para criar um objeto, mas permite às classes decidirem qual classe instanciar. Este padrão permite a uma classe deferir a instanciação para subclasses.", o nome do padrão usado pelo Analista é
  1. AStrategy.
  2. BFactory Method.
  3. CSingleton.
  4. DChain of Responsability.
  5. EAdapter.
Revelar gabarito e comentário

GabaritoB — Factory Method.

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 (Design Patterns) — Factory Method

Gabarito: letra B. O enunciado descreve exatamente o padrão Factory Method, cuja definição é "Define uma interface para criar um objeto, mas permite às classes decidirem qual classe instanciar. Este padrão permite a uma classe deferir a instanciação para subclasses." A classe FrasePadrao atua como criador abstrato que, dado um idioma, retorna o objeto concreto correspondente sem que o cliente conheça a classe real — esse é o mecanismo central do Factory Method.

A questão cobra o reconhecimento do padrão a partir de sua descrição e aplicação prática. O Factory Method pertence à categoria dos padrões de criação (GoF), pois delega a instanciação a subclasses, promovendo baixo acoplamento e flexibilidade.

Padrão de Projeto

Categoria (GoF)

Propósito Principal

Aplicação no Exemplo

Correta?

Factory Method

Criação

Define interface para criar objeto, mas permite que subclasses decidam qual classe instanciar; delega a instanciação

FrasePadrao cria dinamicamente objetos ITraduzFrase conforme o idioma, sem o cliente conhecer a classe concreta

✅ (Gabarito)

Strategy

Comportamental

Define uma família de algoritmos intercambiáveis e encapsula variações de comportamento

Não se aplica: o foco não é algoritmo, mas criação de objetos

Singleton

Criação

Garante que uma classe tenha apenas uma instância e fornece ponto global de acesso

Não se aplica: múltiplos objetos são criados (um por idioma), sem restrição de unicidade

Chain of Responsibility

Comportamental

Permite passar uma solicitação ao longo de uma cadeia de handlers até que um a trate

Não se aplica: não há encadeamento de handlers no exemplo

Adapter

Estrutural

Converte a interface de uma classe em outra interface esperada pelo cliente

Não se aplica: não há conversão de interfaces incompatíveis

Factory Method (criação)
  • 1Produto
    • ITraduzFrase (interface)
    • InglesTraduzFrase
    • EspanholTraduzFrase
    • AlemaoTraduzFrase
  • 2Creator
    • FrasePadrao
    • Instancia sem conhecer classe concreta
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Strategy é um padrão comportamental que define uma família de algoritmos intercambiáveis. Não se aplica à criação de objetos; seu foco é encapsular variações de comportamento. A classe FrasePadrao não está definindo algoritmos — está instanciando objetos com base em um parâmetro.

Alternativa B — ✅ Correta ⟵ GABARITO

Factory Method encaixa perfeitamente: a interface ITraduzFrase é o produto, as classes InglesTraduzFrase, EspanholTraduzFrase, AlemaoTraduzFrase são produtos concretos, e FrasePadrao é o creator que implementa o método de fábrica para retornar o tipo adequado. A definição fornecida no enunciado é a literal do padrão.

Alternativa C — ❌ Incorreta

Singleton garante que uma classe tenha apenas uma instância e fornece um ponto global de acesso a ela. No exemplo, são criados múltiplos objetos (um para cada idioma), e não há restrição de unicidade.

Alternativa D — ❌ Incorreta

Chain of Responsibility (Corrente de Responsabilidade) é um padrão comportamental que permite passar uma solicitação ao longo de uma cadeia de handlers até que um a trate. Não envolve criação de objetos; o exemplo não tem encadeamento.

Alternativa E — ❌ Incorreta

Adapter é um padrão estrutural que converte a interface de uma classe em outra interface esperada pelo cliente, permitindo que classes incompatíveis trabalhem juntas. No caso, não há incompatibilidade de interfaces — as classes já implementam ITraduzFrase diretamente.

PEGA ESSA DICA!

Para diferenciar os padrões de criação (como Factory Method) dos comportamentais e estruturais, lembre-se: criação = como os objetos são instanciados; estrutura = como classes/objetos são compostos; comportamento = como eles interagem e distribuem responsabilidades. Na prova, grife palavras como "cria objetos", "instancia", "delega a criação a subclasses" — isso aponta para um padrão criacional.

Gabarito: letra B

Link permanente: /questoes/fc028409