Escolar Documentos
Profissional Documentos
Cultura Documentos
Lar 16 GRASP
Lar 16 GRASP
Objetos com
Responsabilidades
makePayment(cashTendered)
create(cashTendered)
: Payment
• 1. Information Expert
• 2. Creator
• 3. High Cohesion
• 4. Low Coupling
• 5. Controller
methods
date
time
1
Contains
1..*
Product
Sales Specification
LineItem * Described-by1
description
quantity price
itemID
t := getTotal() Sale
:Sale
date
time
Sale
date
time
t := getTotal() 1 *: st := getSubtotal() :SalesLineItem
: Sale :SalesLineItem getTotal()
*
SalesLineItem
quantity
date
time
t := getTotal() 1 *: st := getSubtotal() :SalesLineItem
: Sale :SalesLineItem getTotal()
*
1.1: p := getPrice() SalesLineItem
quantity
:Product getSubtotal()
Specification
Product
Specification
description
price
itemID
New method getPrice()
Sale
date
time
1
Contains
1..*
Product
Sales Specification
LineItem * Described-by1
description
quantity price
itemID
: Register : Sale
makeLineItem(quantity)
create(quantity)
: SalesLineItem
2: addPayment(p)
:Sale
Solução alternativa:
1.1. create()
:Payment
Sale deve ser naturalmente
acoplada ao conhecimento de
Payment. Esta solução não
aumenta acoplamento
MC 426 IC Unicamp – M. Cecilia C. Baranauskas 27
Discussão sobre P3 –
Baixo Acoplamento
• Baixo acoplamento é um princípio para ter em
mente durante as decisões de design
• É um princípio avaliativo que o designer aplica
avaliando decisões
• Apoia o design de classes mais independentes,
reduzindo o impacto de mudanças
• Uma subclasse é fortemente acoplada à sua
superclasse [precisa ser considerado
cuidadosamente]
• O caso extremo de baixo acoplamento é qdo não há
acoplamento entre classes [isto não é desejável]
MC 426 IC Unicamp – M. Cecilia C. Baranauskas 28
P4 – Alta Coesão
• Problema: Como manter a complexidade
gerenciável?
• Solução: Atribua responsabilidades de modo que
coesão permaneça alta
• Coesão [funcional] é uma medida de quão
fortemente relacionadas e focadas são as
responsabilidades de um elemento
• Um elemento com responsabilidades
relacionadas e que não fazem muito trabalho têm
alta coesão [classes, subsistemas, etc.]
MC 426 IC Unicamp – M. Cecilia C. Baranauskas 29
Coesão
: Register : Sale
makePayment()
create() p : Payment
addPayment( p )
: Register : Sale
makePayment()
makePayment()
create()
: Payment
endSale()
enterItem()
makeNewSale()
makePayment()
...
presses button
: Cashier
actionPerformed( actionEvent )
Interface
:SaleJFrame
Layer
system event message
enterItem(itemID, qty)
enterItem(id, quantity)
:Register
enterItem(id, quantity)
:ProcessSaleHandler
endSale() ...
enterItem()
Durante
makeNewSale() endSale()
makePayment() enterItem()
makeNewSale()
design as
makeNewReturn() makePayment()
enterReturnItem()
... makeNewReturn()
operações
enterReturnItem()
...
system operations
discovered during system
allocation of system
operations during design,
identificadas
behavior analysis using one facade controller
do sistema
são atribuídas
a uma ou
ProcessSale HandleReturns
System Handler Handler
mais classes
endSale() ... ...
enterItem()
makeNewSale() endSale() enterReturnItem()
enterItem() makeNewReturn()
controladoras
makePayment()
makeNewSale() ...
enterReturnItem() makePayment()
makeNewReturn()
...
allocation of system
operations during design,
using several use case
controllers
presses button
: Cashier
actionPerformed( actionEvent )
1: enterItem(itemID, qty)
controller
presses button
Cashier
actionPerformed( actionEvent )
1: makeLineItem(itemID, qty)
Domain Layer :Sale
Use-case controllers
MakeReservationHandler
ManageSchedulesHandler
ManageFaresHandler