Sie sind auf Seite 1von 62

Utilizando UML e Padres

Captulo 17 GRASP: Projeto de Objetos


com Responsabilidades

Objetivos
Aprender a aplicar cinco dos princpios ou padres
GRASP para POO.

O que vem a seguir?

Padres GRASP
Projeto orientado a objetos :
Adicionar mtodos em objetos presentes no modelo
de domnio
Definir as mensagens entre objetos
quem colabora com quem

Realizar os requisitos atravs de um sistema


orientado a objetos.

Padres GRASP
O Projeto orientado a objetos uma atividade
complexa
O melhor professor a experincia.
Usando padres, podemos aprender daqueles mais
experientes.
essencial entender princpios de projeto antes de
fazer o projeto orientado a objetos.

Padres GRASP
Projeto Dirigido por Responsabilidades - RDD
Termo cunhado no incio dos anos 90 por Wirfs-Brock
Objetos em termos do que eles sabem ou fazem
metfora do trabalhador humano

Uma obrigao do objeto que ofertado para outros


objetos.
Contrato

Padres GRASP
Responsabilidades de Fazer

Criar outro objeto


Executar um clculo
Iniciar uma ao em um objeto
Controlar/coordenar atividades de objetos.

Padres GRASP
Responsabilidades de Saber:
Seu prprio dado encapsulado
Sobre outros objetos
Coisas que ele pode calcular ou derivar.

Padres GRASP
Granularidade da responsabilidade
Escala pequena
Um nico objeto preenche a responsabilidade

Escala mdia
Um grupo de objetos colaboram.

Escala grande
Um sistema inteiro ou subsistema necessrio

Responsabilidades e mtodos
Algum envia uma mensagem para Venda solicitando a
criao de um pagamento.
No significa que Venda cria um Pagamento diretamente

Padres GRASP
Padro
Uma soluo nomeada para um problema
recorrente.
Eficincia comprovada por experincia anterior.
Elimina a reinveno da roda
Facilita a comunicao
Indica limitao e prs e contras.

Padres GRASP
GRASP
Do ingls General Responsability Assignment
Software Patterns
Tcnicas fundamentais para Projeto dirigido por
responsabilidades.
Devemos entender GRASP para fazer um bom projeto
orientado a objetos.

Padres GRASP
5 padres neste captulo

Criador
Especialista da Informao
Baixo acoplamento
Controlador
Alta coeso

Padres GRASP
Criador
Problema
Quem deve criar um objeto A?

Soluo (sugesto)
Deixe B fazer isso se:
B contm ou agrega A
B registra A
B usa A de maneira muito prxima
B contm os dados iniciais de A

Padres GRASP
Banco Imobilirio
Quando voc inicia o jogo, quem cria as casas do
tabuleiro?
Deixe Tabuleiro criar j que ele que contm as casas.

Banco Imobilirio

O Padro Criador

Agregao Composta
Tabuleiro possui uma relao de composio com
Casa.

Padres GRASP
Especialista da Informao
Problema:
Qual o princpio bsico de Projeto Dirigido por
Responsabilidades?
Quem deveria executar uma tarefa?

Soluo (conselho)
Atribua responsabilidade ao objeto que tem a
informao necessria.
Diga ao especialista para fazer.

Padres GRASP
Banco Imobilirio
Problema:
Quem deveria obter (retornar) uma Casa, dado um
determinado identificador?

Soluo (Conselho):
Deixe o Tabuleiro fazer isto pois ele sabe sobre as
Casas.

O Padro Especialista
Tabuleiro contm uma coleo de Casas, portanto
ele tem a responsabilidade de obter uma Casa em
particular.

Padres GRASP
Acoplamento Baixo
Problema:
Como reduzir o impacto de mudana?

Soluo (conselho):
Atribuir
responsabilidade
para
minimizar
acoplamento entre objetos.
Avaliar alternativas de projeto
Escolher a opo que minimiza o acoplamento

O Padro Acoplamento Baixo


Se Cachorro obter a Casa, ento Cachorro e
Tabuleiro ficam acoplados Casa !

Padres GRASP
Controlador
Problema:
As camadas GUI e Domnio devem ser fracamente acopladas
Que objeto deve coordenar mensagens entre a GUI e outros
objetos do domnio?

Soluo (conselho):
Atribua a responsabilidade a um objeto representando:
O sistema ou um objeto raiz
Loja, Banco

Um dispositivo/subsistema
SistemaContabilidade, CaixaEletronico

Um cenrio de caso de uso


TratadorJogarBancoImobiliario

DSS para o jogo Banco Imobilirio


O usurio interage diretamente com a GUI e no
com a camada de domnio
Que objeto deve retransmitir operaes do sistema
da GUI para a camada de Domnio?

Viso em Camadas
Traduo entre eventos GUI em operaes do
sistema
Quem o mediador entre a GUI e a camada de
domnio?

O Padro Controlador
Deixe BancoImobiliario ser o controlador
Ele representa o sistema e no existem muitas
operaes do sistema.

Padres GRASP
Coeso Alta
Problema:
Como manter os objetos focados, inteligveis e gerenciveis?
Como apoiar o Baixo Acoplamento?

Soluo (conselho)
Atribua responsabilidades de modo que a coeso permanea
alta.
Use isso para avaliar alternativas

Padres GRASP
Coeso x Acoplamento
Para minimizar o acoplamento, conjunto reduzido de
objetos com todas as responsabilidades
Objetos no coesos

Para maximizar a coeso, um grande nmero de


objetos com responsabilidade limitada
Objetos fortemente acoplados

Escolha a melhor relao custo benefcio a partir de


projetos alternativos

Alternativas de projeto para suporte Alta


Coeso

Alternativas de projeto para suporte Alta


Coeso

Padres GRASP

Aplicao dos padres GRASP ao estudo de caso do


PDV

Padres GRASP
Criador
Problema:
Quem deve criar objetos LinhaDeItemVenda?

Soluo (conselho)
Permita que Venda o faa
Venda contm LinhaDeItemVenda conforme o Modelo
de Domnio

Modelo de Domnio parcial

Diagrama de Sequencia parcial


Precisamos
de
um
mtodo
criarLinhaDeItemDeVenda(quantidade) em Venda
No aumentamos o acoplamento pois Venda j
possui visibilidade para LinhaDeItemVenda

Padres GRASP
Especialista
Quem deve ser o responsvel por saber o total de
uma Venda?
Soluo (conselho)
Permita que Venda seja responsvel j que ela sabe de
todos os itens da venda.

Modelo de Domnio parcial


Venda pode calcular seu total solicitando o subtotal
de cada LinhaDeItemVenda

Diagrama de Seqncia Parcial


Adicione o mtodo obterTotal() Venda

Iterando por itens de venda


Venda precisa do subtotal de cada item de venda
Crie o mtodo getSubtotal( ) em LinhaDeItemVenda

Subtotal necessita do preo unitrio


De
acordo
com
o
Especialista,
DescricaoDoProduto sabe o preo unitrio.
Adicione obterPreco( ) na classe DescricaoDoProduto

Padres GRASP
Especialista
Um dos padres mais comuns
Normalmente, um conjunto de pequenos especialistas
se colaboram

Por exemplo, para obter o total de uma venda


Venda obtm o subtotal de cada item da venda que
por sua vez obtm o preo a partir da descrio do
produto.

Padres GRASP
Baixo Acoplamento
Problema:
Quem deve criar um pagamento e associ-lo com uma
Venda?

Alternativas:
Pelo Especialista, Registradora deveria criar as informaes
de Pagamento e associ-las com a Venda
Registradora e Venda ficam acopladas Pagamento

Por Baixo Acoplamento, Registradora delega Venda a


criao de um Pagamento.
Apenas Venda fica acoplada Pagamento.

Primeira alternativa
Registradora cria Pagamento e o adiciona Venda.
Registradora e Venda ficam acopladas Pagamento.

Segunda Alternativa
Registradora delega a criao de Pagamento
Venda
Pelo Criador, Venda cria Pagamento
Apenas Venda fica acoplada a Pagamento. Um
relacionamento necessrio

Padres GRASP
O acoplamento cria dependncias
Acoplamentos tpicos (Tipos X e Y)
X possui um atributo do tipo Y
X tem um mtodo que referencia Y
Parmetro no mtodo do tipo Y
Varivel local do tipo Y
Retorno do mtodo com tipo Y

X uma subclasse direta ou indireta de Y


X implementa uma interface Y

Padres GRASP
As classes se beneficiam do Baixo Acoplamento, pois
ficam:

Mais independentes
Mais fceis de serem reutilizadas
Mais fcil de serem entendidas
Mais fcil de realizar manutenes

Padres GRASP
Baixo Acoplamento
Levado ao extremo, poucos objetos no coesos
realizam todo o trabalho.
A severidade do acoplamento depende da
instabilidade do objeto a que est acoplado
Classes de bibliotecas Java so estveis, portanto o
acoplamento a elas aceitvel.
APIs proprietrias so normalmente instveis,
portanto o acoplamento pode levar a ficar preso ao
fabricante.

Padres GRASP
Controlador
Problema:
Qual objeto da camada de domnio deve ser responsvel
pelas operaes do sistema?

Soluo (Conselho):
Selecione o objeto raiz no modelo de domnio do PDV
Loja

Selecione um objeto que representa um dispositivo chave


Registradora

Crie um objeto que trata um caso de uso


TratadorProcessarVenda

Operaes do sistema
Diagramas de Seqncia do Sistema so locais
temporrios para operaes do sistema.
Um objeto Controlador deve conter estas operaes
Quem deve ser o controlador?

Quem deve ser o controlador?

Duas alternativas para o controlador


Registradora um dispositivo chave.
TratadorProcessarVenda trata as operaes do
Sistema para um caso de uso.

Duas alternativas para o controlador

Registradora como controlador

A GUI enviando mensagem para o objeto


Venda
Este projeto insere mais lgica de negcios na GUI
do que usando Registradora como controlador?

Padres GRASP
Questes sobre o Controlador
Para o sistema PDV, por que no usar Loja como
Controlador?
Ao usar controladores de casos de uso, Larman
recomenda um Tratador para cada caso de uso
Por que no permitir um controlador para casos de uso
relacionados?

Um controlador essencialmente delega tarefas para


objetos do domnio
Gerentes, no trabalhadores

Eles mantm o estado do caso de uso


Onde ns estamos..

Padres GRASP
Questes sobre o controlador (cont.)
No atribua muitas responsabilidades a um nico
controlador.
Lembre-se da Coeso !

Tornam GUIs mais plugveis e reutilizveis


Ajudam a manter o estado de um caso de uso

Exemplos de cdigo de controladores para clientes


gordo (desktop) e magro (web)
Pginas 324-326

Padres GRASP
Coeso Alta
Problema:
Quem dever ser responsvel por criar um Pagamento?

Soluo (Conselho):
Pelo Criador, Registradora deveria ser a escolha j que
ela possui a informao a respeito
Registradora pode perder coeso se ela tiver muitas
operaes
Permita que registradora delegue para Venda a
responsabilidade

Registradora criando Pagamento


Baixa Coeso
Registradora deve adicionar Pagamento Venda

Registradora delegando a criao de


Pagamento
Alta coeso e menor acoplamento

Padres GRASP
Nveis de Coeso:
Muito baixa: Classe com muitas responsabilidades
no relacionadas.
Baixa: Responsvel por uma tarefa complexa em
determinada rea.
Moderada: Responsabilidades exclusivas em algumas
reas logicamente relacionadas ao conceito da classe,
mas no umas com as outras.
Alta: Responsabilidades moderadas em uma rea e
colaborao com outras classes.

Padres GRASP
Coeso
Classes coesas tendem a possuir poucos mtodos
Coeso muito similar a programao modular em
linguagens no orientada a objetos.

Das könnte Ihnen auch gefallen