Julgue o próximo item, a respeito de GRASP (general respo...
Determinar quando deve ser delegada a responsabilidade para outro objeto é responsabilidade do criador (creator).
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: E - errado.
Vamos entender melhor o tema abordado na questão: o GRASP, que é um acrônimo para General Responsibility Assignment Software Patterns (Padrões Gerais de Atribuição de Responsabilidade de Software). Ele é um conjunto de diretrizes que ajudam na atribuição de responsabilidades a classes e objetos em projetos de software orientados a objetos.
Dentro do conjunto de padrões GRASP, temos padrões como Creator, Controller, Information Expert, Low Coupling, High Cohesion, Polymorphism, Pure Fabrication, Indirection e Protected Variations. Cada um desses padrões tem um propósito específico e ajuda a resolver problemas comuns na atribuição de responsabilidades.
No enunciado, menciona-se que "Determinar quando deve ser delegada a responsabilidade para outro objeto é responsabilidade do criador (creator)", o que está incorreto. A responsabilidade de delegar tarefas, ou seja, decidir qual objeto deve realizar determinada tarefa, é tratada por outro padrão do GRASP, não pelo Creator.
O papel do Creator é específico: ele determina qual classe é responsável por instanciar objetos de outra classe. Em termos simples, o Creator sugere que uma classe deve ser responsável pela criação de instâncias de outra classe se, por exemplo:
- Ela contém ou agrega a instância a ser criada.
- Ela usa a instância que será criada.
- Ela tem os dados que são passados para a instância.
- Ela tem a responsabilidade de inicializar a instância.
Por outro lado, a responsabilidade de delegar tarefas a outros objetos é geralmente coberta pelo padrão Controller. O Controller atua como um intermediário que delega a execução de uma tarefa para objetos especializados, mantendo, assim, uma separação de responsabilidades e promovendo um design mais coeso e flexível.
Portanto, a alternativa está errada porque confunde a responsabilidade do padrão Creator com a de outro padrão do GRASP que trata da delegação de tarefas.
Gostou do comentário? Deixe sua avaliação aqui embaixo!
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Information Expert (Especialista na Informação) — Determina quando devemos delegar a responsabilidade para um outro objeto que seja especialista naquele domínio.
Fonte: https://medium.com/@leandrovboas/padr%C3%B5es-grasp-padr%C3%B5es-de-atribuir-responsabilidades-1ae4351eb204
Gabarito ERRADO
O descrito na questão trata-se do padrão Information Expert.
Fonte: https://blog.grancursosonline.com.br/padroes-de-projetos-grasp-controller-e-expert/
ERRADO
Cespe tem um fetiche por esse padrão. Cuidado, pois ela mistura os conceitos.
Especialista na Informação (Information Expert):
- Responsabilidade atribuída à classe/objetos que possui as informações necessárias para cumprir uma determinada tarefa.
- Information Expert (Especialista na Informação) — Determina quando devemos delegar a responsabilidade para um outro objeto que seja especialista naquele domínio.
- Solução: Atribua a responsabilidade ao especialista: a classe que tem as informações necessárias para assumir a responsabilidade.
Onde já caiu:
Q.P. - Ano: 2022 Banca: CESPE / CEBRASPE [x]
Q.P. - Ano: 2022 Banca: CESPE / CEBRASPE Órgão: DPE-RO [x]
Q.P. - Ano: 2023 Banca: FGV Órgão: Câmara dos Deputados [x]
Q.P. - Ano: 2024 Banca: CESPE / CEBRASPE Órgão: CNJ [x]
Criador (Creator):
- A classe responsável pela criação de instâncias de outras classes deve ser aquela que contém a maior parte das informações necessárias para a criação.
- O padrão Creator atribui a responsabilidade de criação de objetos entre duas classes A e B. Para uma classe B ter a responsabilidade de criar instâncias de outra classe A, ele deve obedecer a mais de um dos requisitos abaixo:
- B agrega objetos da classe A.
- B contém objetos da classe A.
- B registra instâncias da classe A.
- B usa muitos objetos da classe A.
- B possui os dados usados para inicializar A.
go@head2!
GRASP é um conjunto de diretrizes que ajudam na atribuição de responsabilidades a classes e objetos em projetos de software orientados a objetos.
Information Expert (Especialista na Informação)
- O que faz: Atribui uma responsabilidade à classe que tem a informação necessária para cumpri-la. É o princípio mais fundamental do GRASP.
Creator (Criador)
- O que faz: Decide qual classe deve ser responsável por criar objetos de outra classe.
Controller (Controlador)
- O que faz: Atua como um intermediário entre a camada de interface do usuário (UI) e a lógica de negócio. Ele recebe os eventos da UI e delega o trabalho para os objetos de domínio apropriados.
Low Coupling (Baixo Acoplamento)
- O que faz: É um princípio que busca reduzir a dependência entre as classes. Uma classe não deve precisar conhecer os detalhes internos de muitas outras classes.
High Cohesion (Alta Coesão)
- O que faz: É um princípio que busca manter as responsabilidades de uma classe focadas, relacionadas e gerenciáveis.
Polymorphism (Polimorfismo)
- O que faz: Permite que variações de comportamento, baseadas no tipo de um objeto, sejam tratadas de forma simples. Em vez de usar if/else para tratar cada tipo, você usa uma interface comum.
Pure Fabrication (Fabricação Pura)
- O que faz: Quando os padrões anteriores (como Information Expert) levariam a um design ruim (baixa coesão ou alto acoplamento), você cria uma classe artificial, que não representa um conceito do mundo real, apenas para carregar uma responsabilidade.
Indirection (Indireção)
- O que faz: Introduz um objeto intermediário para mediar a comunicação entre outros dois objetos, evitando que eles se acoplem diretamente.
Protected Variations (Variações Protegidas)
- O que faz: Protege o sistema contra o impacto de mudanças em pontos de instabilidade. Envolve a criação de uma interface estável em torno de algo que provavelmente vai mudar.
fonte: gemini pro
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo