Beruflich Dokumente
Kultur Dokumente
Objetivos
Aprender a aplicar cinco dos princpios ou padres
GRASP para POO.
Padres GRASP
Projeto orientado a objetos :
Adicionar mtodos em objetos presentes no modelo
de domnio
Definir as mensagens entre objetos
quem colabora com quem
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
Padres GRASP
Responsabilidades de Fazer
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
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
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
Padres GRASP
Padres GRASP
Criador
Problema:
Quem deve criar objetos LinhaDeItemVenda?
Soluo (conselho)
Permita que Venda o faa
Venda contm LinhaDeItemVenda conforme o Modelo
de Domnio
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.
Padres GRASP
Especialista
Um dos padres mais comuns
Normalmente, um conjunto de pequenos especialistas
se colaboram
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
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
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
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?
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?
Padres GRASP
Questes sobre o controlador (cont.)
No atribua muitas responsabilidades a um nico
controlador.
Lembre-se da Coeso !
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
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.