march 200391.3913 ron mcfadyen1 ch 17: use case realizations with grasp patterns assigning...
Post on 19-Dec-2015
215 views
TRANSCRIPT
March 2003 91.3913 Ron McFadyen 1
Ch 17: Use Case Realizations with GRASP Patterns
Assigning responsibilities to objects to achieve user goals
Section 17.4 makeNewSale
Section 17.5 enterItem
Section 17.6 endSale
Section 17.7 makePayment
Section 17.8 Start Up
You should review these sections
March 2003 91.3913 Ron McFadyen 2
Ch 17: Use Case Realizations with GRASP Patterns
Who/What is going to be responsible for :
•Handling the system operation makeNewSale?
•Creating a Sale?
•Who/What should create the container of SalesLineItems?
•Handling the System operation enterItem?
•Creating a Saleslineitem?
•Finding a match for a product specification? For doing a lookup?
•Handling the system operation endSale?
•Setting the isComplete attribute of Sale to true?
•Calculating the sale total?
•Calculating the SalesLineItem subtotal?
•Providing the ProductSpecification price?
•Handling the system operation makePayment?
•Creating a Payment instance?
•……….Which GRASP pattern justified the decision?
March 2003 91.3913 Ron McFadyen 3
Ch 17: Use Case Realizations with GRASP Patterns
Section 17.4 makeNewSale
1st concern: who/what is going to be responsible for handling the system operation makeNewSale?
Decision: Using the Controller Pattern
… since there aren’t very many system operations and since Register (in our domain) represents the overall system, we choose Register as a “façade” controller.
March 2003 91.3913 Ron McFadyen 4
Ch 17: Use Case Realizations with GRASP Patterns
By “Controller”, Register is our “façade” controller.
makeNewSale()
:Register
March 2003 91.3913 Ron McFadyen 5
Ch 17: Use Case Realizations with GRASP Patterns
Page 314
public class Register
{ …
public makeNewSale()
{
…
}
We have just decided that Register must have a method makeNewSale
March 2003 91.3913 Ron McFadyen 6
Ch 17: Use Case Realizations with GRASP Patterns
2nd concern: who/what is going to be responsible for creating a Sale?
Should Register delegate the responsibility or …?
Since Register (in the domain) actually records a Sale then, by “Creator”, we decide that Register will do this. Register has the data and it needs to keep track of a Sale, so …
March 2003 91.3913 Ron McFadyen 7
Ch 17: Use Case Realizations with GRASP Patterns
By “Creator”, Register creates a Sale.
makeNewSale()
:Register
create():Sale
March 2003 91.3913 Ron McFadyen 8
Ch 17: Use Case Realizations with GRASP Patterns
Page 314
public class Register
{ …
Private Sale sale;
…
public makeNewSale()
{
sale = new Sale();
}
The method makeNewSale creates the sale object
March 2003 91.3913 Ron McFadyen 9
Ch 17: Use Case Realizations with GRASP Patterns
3rd concern: Sale needs to know of its SalesLineItems. A container for these is required.
Who/What should create this?
Since Sale will contain the lines, by “Creator”, we decide that Sale will do this…
March 2003 91.3913 Ron McFadyen 10
Ch 17: Use Case Realizations with GRASP Patterns
By “Creator”, Register creates a Sale.
makeNewSale()
:Register
create():Sale
create() ::SalesLineItem
March 2003 91.3913 Ron McFadyen 11
Ch 17: Use Case Realizations with GRASP Patterns
Page 315
public class Sale
{ private List lineItems = new ArrayList();
private Date date = new Date();
private boolean isComplete = false;
private Payment payment;
…
The constructor for Sale creates the container for the line items
March 2003 91.3913 Ron McFadyen 12
Ch 17: Use Case Realizations with GRASP Patterns
Section 17.5 enterItem
1st concern: who/what is going to be responsible for handling the system operation enterItem?
We continue using the Controller Pattern … Register is responsible for handling enterItem.
March 2003 91.3913 Ron McFadyen 13
Ch 17: Use Case Realizations with GRASP Patterns
Contract for enteritem specifies
Preconditions:
•A Sale is underway
Postconditions:
•salesLineItem is created
•It is associated with the current Sale
•Its quantity is set
•It is associated with a ProductSpecification
By Creator, Sale can do this
Sale stores the new sales line item in its collection
The product specification will need to be found
March 2003 91.3913 Ron McFadyen 14
Ch 17: Use Case Realizations with GRASP Patterns
enterItem():Register :Sale
::SalesLineItem
: SalesLineItem
2:makeLineItem()
2.1:create()
2.2:add()
Message 2 … see later slide
March 2003 91.3913 Ron McFadyen 15
Ch 17: Use Case Realizations with GRASP Patterns
Page 315
public class Sale
{ …
public void makeLineItem (…, …)
{
lineItems.add ( new SalesLineItem (…, …) ) ;
}
The “add” message sent to the multiobject
The “create” message for a new sales line item
March 2003 91.3913 Ron McFadyen 16
Ch 17: Use Case Realizations with GRASP Patterns
Page 316
public class SalesLineItem
{ private int quantity;
private ProductSpecification productSpec;
public void SalesLineItem (…spec, …quantity)
{
this.productSpec = spec ;
this.quantity = quantity
}
The constructor for a sales line item arranges that the sales line item knows its product specification and its quantity
March 2003 91.3913 Ron McFadyen 17
Ch 17: Use Case Realizations with GRASP Patterns
Section 17.5 enterItem
2nd concern: who/what is going to be responsible for finding a match for a product specification? For doing a lookup?
Who has knowledge of product specifications? Who is capable of doing a lookup?
Expert suggests the product catalogue is the best candidate. The product catalogue contains the product specifications … the product catalogue has the information, it is the expert.
March 2003 91.3913 Ron McFadyen 18
Ch 17: Use Case Realizations with GRASP Patterns
enterItem():Register
::ProductSpecification
:ProductCatalog
1:getSpecification()
1.1:find()
March 2003 91.3913 Ron McFadyen 19
Ch 17: Use Case Realizations with GRASP Patterns
Page 316
public class ProductCatalog
{ private Map productSpecifications = new HashMap();
…
public ProductSpecification getSpecification (ItemID id)
{
Return( …. productSpecifications.get ( id );
}
Collection of product specifications
Method to find a specific item
Handles the “find” message
March 2003 91.3913 Ron McFadyen 20
Ch 17: Use Case Realizations with GRASP Patterns
enterItem():Register :Sale
::ProductSpecification
:ProductCatalog
::SalesLineItem
:SalesLineItem
1:getSpecification()
1.1:find()
2:makeLineItem()
2.1:create()
2.2:add()