Escolar Documentos
Profissional Documentos
Cultura Documentos
Definição:
Responsabilidades
Básicos
Expert
Problema:
Solução
O que o padrão propõe:
Benefícios
Creator
Problema:
Solução:
O que o padrão propõe:
Benefícios:
High Cohesion (Alta Coesão)
Coesão
Problema:
Solução:
O que o padrão propõe:
Benefícios:
Low Coupling (Baixo Acoplamento)
Acoplamento
Problema:
Solução:
O que o padrão propõe:
Benefícios:
Controller
Problema:
Solução:
O que o padrão propõe:
Controlador de Fachada:
Controlador de Caso de Uso:
Benefícios:
Avançados
Polymorphism (Polimorfismo)
Problema:
Solução:
O que o padrão propõe:
Benefícios:
Padrão GRASP 1
Pure Fabrication
Problema:
Solução:
O que o padrão propõe:
Benefícios:
Indirection
Problema:
O que o padrão propõe:
Benefícios:
Don’t Talk to Stranges
Problema:
Solução:
O que o padrão propõe:
Benefícios:
Definição:
GRASP é um acrônimo para General Responsibility Assignment Software Patterns,
que é um conjunto de padrões de projeto que ajudam a atribuir responsabilidades
claras e específicas para as classes em um sistema orientado a objetos. Esses
padrões ajudam a melhorar a manutenibilidade, flexibilidade e escalabilidade do
sistema.
Responsabilidades
São contratos ou obrigações de um tipo de classe e estão relacionadas às
obrigações de um objeto em termos do seu comportamento. As responsabilidades
podem ser de fazer de um objeto, que incluem iniciativas de ações em outros
objetos, controle e coordenação de atividades em outros objetos, ou de conhecer de
um objeto, que incluem a capacidade de um objeto de conhecer informações sobre
outros objetos.
Básicos
Expert
Problema:
Padrão GRASP 2
Qual é o princípio mais básico para atribuir responsabilidades em projeto orientado
a objetos?
Solução
Atribuir responsabilidade ao especialista da informação.
Esse padrão é baseado na ideia de que uma classe deve ser responsável por
uma tarefa se ela tiver a maior quantidade de informações necessárias para
executá-la.
Benefícios
Padrão GRASP 3
Mantém o encapsulamento: Como as responsabilidades são atribuídas às
classes que possuem a informação necessária, isso ajuda a manter o
encapsulamento, que é um dos princípios fundamentais da programação
orientada a objetos.
Creator
Problema:
Quem deve ser responsável por criar uma instância de uma classe?
Solução:
Atribuir a responsabilidade de criação de objetos a uma classe que tenha a
informação necessária para fazê-lo.
Padrão GRASP 4
:Venda possui dados iniciais do pagamento
Benefícios:
Ajuda a manter o encapsulamento.
Problema:
Como garantir que cada classe tenha uma única responsabilidade bem
definida?
Solução:
Atribuir responsabilidades de forma que cada classe tenha uma única
responsabilidade bem definida.
É aceitavel nesse exemplo isolado, mas é possivel ver que esse exemplo leva a um
situação onde o TPV vai assumir muitas funções, perdendo sua coesão
Padrão GRASP 5
Já nesse exemplo cada classe tem sua função (responsabilidade) bem definida
Benefícios:
Ajuda a manter o encapsulamento
Problema:
Como reduzir a dependência entre as classes?
Solução:
Atribuir responsabilidades de forma que as classes tenham o mínimo possível
de dependência entre si.
Padrão GRASP 6
Isso ajuda a manter o encapsulamento e a tornar o sistema mais flexível e fácil
de manter.
Alto acoplamento pois tanto pagamento quanto venda estão ligados ao TPV, ou
seja, não são independentes
Benefícios:
Ajuda a manter o encapsulamento.
Controller
Problema:
Como evitar um controlador inchado, com excesso de responsabilidades e falta
de foco?
Padrão GRASP 7
Solução:
Atribuir responsabilidades de forma que o controlador tenha foco e trate apenas
as responsabilidades necessárias.
Controlador de Fachada:
É um objeto do domínio que representa o ponto principal ou central para todas
as chamadas provenientes da interface com o usuário ou de outros sistemas.
Padrão GRASP 8
É responsável por receber e tratar as requisições do usuário para um caso de
uso específico.
Benefícios:
Ajuda a manter a coesão e o foco do controlador.
Avançados
Polymorphism (Polimorfismo)
Problema:
Como tratar alternativas com base no tipo?
Solução:
Padrão GRASP 9
Atribuir responsabilidades aos tipos usando operações polimórficas.
Benefícios:
Ajuda a manter a coesão e o foco das classes.
Pure Fabrication
Problema:
A quem atribuir responsabilidade quando todas as opções ferem os princípios
da coesão alta e acoplamento fraco?
Solução:
Padrão GRASP 10
Criar classes artificiais, que não representam o mundo real, para atribuir
responsabilidades e suportar coesão alta, acoplamento fraco e reutilização.
Benefícios:
Ajuda a manter a coesão e o foco das classes.
Indirection
Problema:
Onde atribuir responsabilidade de modo a evitar o acoplamento direto?
Solução:
Padrão GRASP 11
Esse objeto intermediário cria uma indireção para outros componentes,
permitindo que eles se comuniquem sem se acoplarem diretamente.
Benefícios:
Ajuda a manter a coesão e o foco das classes.
Solução:
Atribuir responsabilidade a um objeto "familiar" de um objeto cliente, para o
"familiar" colaborar com o objeto "estranho" evitando que o objeto cliente fale
com "estranhos" para obter, por exemplo, uma requisição.
Padrão GRASP 12
Benefícios:
Fortalece o encapsulamento e a coesão das classes.
Padrão GRASP 13