Buscar

Padrões GRASP

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

GRASP - Padrões para Atribuições de Responsabilidades 
 
 
Conceitos 
 
 O que são Padrões? 
 Princípios, estilos e regras de programação, codificados em um formato estruturado, 
descrevendo problema/solução 
 Um Padrão é um par nomeado problema/solução, que pode ser utilizado em novos 
contextos, com conselhos sobre como utilizá-lo em novas situações. 
 Uma linguagem de padrões agrega um conjunto de padrões relacionados para um 
contexto em particular . 
 
 Motivação 
Más escolhas de atribuição de responsabilidades geram sistemas e componentes frágeis e de 
difícil manutenção, extensão e reutilização. 
A qualidade de um projeto orientado a objetos está fortemente relacionada com a 
distribuição de responsabilidades. 
 
 Quando utilizar? 
Padrões são utilizados durante a criação dos diagramas de interação. 
A principal característica da atribuição de responsabilidades está em não sobrecarregar os 
objeto com responsabilidades que poderiam ser delegadas – O objeto só deve fazer o que 
está relacionado com a sua abstração. Para isso, delega as demais atribuições para quem 
está mais apto a fazer. 
 
 O que não são Padrões? 
Novos princípios da Engenharia de Software. Ao contrário, padrões tentam codificar o 
conhecimento, idiomas e princípios existentes 
 
 Responsabilidades e Métodos 
 
 Responsabilidade - contrato ou obrigação de uma classe 
 Métodos - utilizados para implementar Responsabilidades 
 
 
 Tipos de Responsabilidades: 
 
 Fazer – ele próprio; iniciar ações em outros objetos; controlar atividades em outros 
objetos 
 Conhecer – dados privados; objetos relacionados; coisas que pode calcular e derivar. 
São dedutíveis do modelo Conceitual 
 
 
 O que são os Padrões GRASP ? 
 
 Princípios fundamentais de atribuição de responsabilidades a objetos. No contexto 
de projeto orientado a objetos foi criada uma linguagem de padrões conhecida como 
GRASP (Larman, G.; 2007) – GRASP – General Responsability Assignment Software 
Patterns 
 Os padrões GRASP descrevem os princípios fundamentais para a atribuição de 
responsabilidades em projetos OO 
 
 
 
 
 Principais Padrões GASP que abordam questões mais comuns: 
 
 Especialista 
 
 Criador 
 
 Coesão Alta 
 
 Controlador 
 
 Acoplamento Fraco 
 
 Polimorfismo 
 
 Indireção 
 
 Invensão Pura 
 
 
1- Padrão Especialista 
 
Problema: Em um sistema com centenas de classes, como selecionamos quais 
responsabilidades devem estar em quais classes? 
 
Solução: atribui a responsabilidade ao especialista da informação. O especialista é a classe 
que tem a informação necessária para satisfazer a responsabilidade. 
 
Exemplo: A partir do diagrama de classe da figura 1 – Qual a classe que deve conhecer o 
total de venda? 
 
 É necessário conhecer todas as instâncias de ítem de venda e a soma de seus 
subtotais 
 
 
 
 Figura 1 
 
 
A Classe VENDA é a especialista para o Total da Venda 
 
 Que informações são necessárias para determinar o total de um ítem de venda? 
 ItemVenda.Quantidade 
 Produto.Preço 
 ÍtemVenda conhece sua quantidade e seus Produtos associados 
 
Ítem Venda é o especialista para determinar o subtotal 
 
 ÍtemVenda deve conhecer o preço do Produto. 
 
 Produto é o especialista informar o seu preço 
 
 
 Conclusão 
 
 A satisfação de uma responsabilidade requer informações espalhadas por diferentes 
classes. 
 Desta forma existem vários especialistas parciais que colaboram com a tarefa. 
 Favorece ao acoplamento fraco uma vez que os objetos usam suas próprias informações 
para executarem as tarefas. 
 As classes ficam “leves” gerando alta coesão. 
 Distribui o comportamento uniformemente entre as classes do sistema, aumentando a 
coesão das mesmas. 
 
 
 
2- Padrão Criador 
 
Problema: Quem deveria ser responsável pela criação de uma nova instância de uma 
classe? 
 
Solução: atribua à classe B a responsabilidade de criar instâncias da classe A se: 
 B agrega objetos de A 
 B contém objetos de A 
 B registra instâncias de objetos A 
 B usa de maneira muito próxima objetos A 
 B tem os dados de inicialização que serão passados para o objeto A, quando de sua 
criação ( B é um especialista com a relação a criação de A) 
 
Exemplo: A partir do diagrama de classe da figura 1. 
 
a) Quem deveria ser responsável pela criação de um ItemVenda referente a uma 
Venda? 
 
 A Classe VENDA é a responsável por criar os ItemVenda 
 
 
b) Quem deveria ser responsável pela criação de uma Venda ? 
 
 A Classe VENDEDOR OU a classe LOJA 
 
a) Quem deveria ser responsável pela criação de uma Parcela ? 
 
 A Classe Venda 
 Conclusão 
 O objetivo do padrão é encontrar um Criador que necessita ser conectado ao objeto 
criado. 
 O criador pode ser encontrado procurando a classe que tem os dados de inicialização 
que serão passados durante a criação. 
 Não aumenta o acoplamento, pois a visibilidade entre as classes envolvidas já existia. 
 
 
 
3- Padrão Acoplamento Fraco 
 
Problema: Como suportar uma dependência baixa e aumentar a reutilização? 
 
 Modificações em uma classe forçam modificações em outras classes. 
 Dificuldade de compreensão de uma classe isoladamente. 
 Dificuldade de reutilização por excesso de dependência entre classes. 
 
Tipos de acoplamento entre as classes: 
 A classe A é subclasse da classe B. 
 A classe A tem um atributo do tipo da classe B. 
 A classe A tem um método que referencia a classe B através de parâmetro, variável 
local. ou retorno de mensagem. 
 
Solução: atribuir a responsabilidade de maneira que o acoplamento permaneça fraco. 
 
 
Conclusão: 
 Corresponde a um padrão de avaliação. 
 Não há uma medida que determine quanto um acoplamento é muito forte. 
 O importante é avaliar o grau atual de acoplamento e julgar se seu aumento trará 
problemas. 
 Se o acoplamento fraco é aplicado em excesso, leva a um projeto fraco, pois conduz a 
poucos objetos ativos, se coesão, inchados e complexos, que efetuam todo o trabalho. 
acoplamento fraco permite entendimento isolado, maior reutilização. 
 
 
 
 
4- Padrão Alta Coesão 
 
Problema: Como manter a complexidade sob controle? 
 
 As classes são difíceis de compreender. 
 As classes são difíceis de reutilizar. 
 As classes são difíceis de manter. 
 As classes são frágeis, sendo afetadas por praticamente todas as modificações. 
 
Solução: atribuir uma responsabilidade de modo que a coesão permaneça alta. Uma classe 
com Alta Coesão é uma classe com responsabilidades altamente relacionadas e que não 
executa um formidável volume de trabalho. 
 
Uma classe com Baixa Coesão é uma classe que faz muitas coisas não relacionadas ou 
executa demasiado trabalho. Gera dificuldades para manter, reutilizar, compreender, e 
constantemente afetadas por mudanças. 
 
Conclusão 
 
 Corresponde a um padrão de avaliação. 
 Como regra uma classe com coesão alta tem um número relativamente pequeno de 
métodos, com funcionalidades relacionadas e não executa muito trabalho. 
 Benefícios: 
 Clareza e facilidade de compreensão do projeto. 
 Simplificação das atividades de manutenção. 
 Favorecimento indireto do baixo acoplamento. 
 Facilidade de reutilização, graças à classe ser muito específica. 
 
 
5- Padrão Controlador 
 
Problema: Quem deveria ser responsável por tratar um evento de sistema? 
– Os eventos de sistema estão associados às mensagens de sistema, quesão geradas a 
partir dos passos dos casos de uso. 
 
O que é um Controlador? 
Um objeto de interface responsável por tratar um evento do sistema. Um controlador define 
um método para a operação do sistema. 
 
Solução: atribui a responsabilidade do tratamento de uma mensagem de um evento do 
sistema a uma classe que representa uma das escolhas: 
 
 Controlador Fachada - representa o sistema todo ou todo o negócio ou organização. 
Adequado quando existem poucos eventos do sistema. 
 
 Controlador de Papel - representa algo no mundo real que é ativo ( por exemplo o 
papel de uma pessoa) e que pode estar envolvido na tarefa. 
 
 Controlador de Caso de Uso - representa um tratador artificial de todos os eventos de 
sistema de um caso de uso. Adequado quando existem muitos eventos do sistema em 
diferentes processos. 
 
Observações: 
 Deve ser usada a mesma classe controladora para todos os eventos do sistema de um 
mesmo caso de uso. 
 Classes como interfaces externas ( janelas, applet, etc.) não devem executar eventos do 
sistema. Apenas são responsáveis por receberem estes eventos e delegarem a um 
controlador. 
 Operações do sistema que refletem processos de negócio devem ser tratadas na camada 
de objetos de domínio. 
 Os controladores devem somente coordenar a tarefa, delegando a sua execução para os 
outros objetos do sistema. 
 
 
 
6- Padrão Polimorfismo 
 
Problema: Se um programa for projetado com lógica condicional da estrutura if-then-else, 
sempre que surgir uma nova variação, uma alteração será necessária muitas vezes em um 
ponto central da solução. 
 
Solução: Aplicação de estruturas polimórficas para tratar novas variações. 
 
Vantagens: As variações são fáceis de adicionar sem necessidade de alterações no código 
existente e sem afetar os clientes. 
 
Exemplo(figura 2) : Empresa possui método diferenciado para cálculo do salário dos seus 
funcionários. Os funcionários administrativos possuem um salário fixo, já o salário dos 
vendedores depende das vendas realizadas. 
 
 
 
 Figura 2 
 
 
Padrão Indireção 
 
Problema: Como atribuir a responsabilidade para evitar o acoplamento direto entre dois ou 
mais objetos. Caso uma classe seja acoplada a serviços, será impossível reutilizar esses 
serviços. 
 
Solução: Atribui a responsabilidade a um objeto intermediário para ser o mediador 
evitando que os objetos sejam diretamente acoplados. 
 
Exemplo: (figura 3) 
 
 
:
 
Figura 3 
 
8- Invensão Pura 
 
Problema: Qual o objeto deve ter a responsabilidade quando não se quer violar a Coesão 
Alta e o Acoplamento Baixo, mas as soluções do padrão Especialista não são apropriadas. 
 
Solução: Atribui um conjunto de responsabilidade altamente coeso a uma classe artificial 
que não seja do domínio do problema. 
 
Exemplo: Em uma necessidade de salvar instâncias de uma classe Venda em um banco de 
dados relacional. Pelo padrão Especialista, as operações de salvamento deveriam ser de 
responsabilidade da classe Venda. 
 
Implicações: A tarefa exige um número grande de operações e não relacionadas ao 
conceito de venda, o que diminuiria a sua Coesão. Ainda salvar objetos é uma tarefa 
genérica que poderia ser compartilhada com outras classes. 
 
Solução para o Exemplo: Criar uma nova classe que seja responsável unicamente por 
salvar objetos em algum tipo de armazenamento persistente. 
 
Benefícios: Remove as características não coesas das classes do domínio de negócio e cria 
classes muito coesas com essas características específicas.

Outros materiais