Fall 2009ACS-3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of...
-
Upload
prosper-cole -
Category
Documents
-
view
212 -
download
0
Transcript of Fall 2009ACS-3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of...
Fall 2009 ACS-3913 Ron McFadyen 1
Use Case Realizations with GRASP Patterns
“The assignment of responsibilities and design of collaborations are very important and creative steps during design”
“there is no ‘magic’ or unjustifiable decisions in object design”
“A use-case realization describes how a particular use case is realized within the design model, in terms of collaborating objects”
makeNewSale
enterItem
endSale
makePayment
startUp
read these sections
Fall 2009 ACS-3913 Ron McFadyen 2
Ch 17: Use Case Realizations with GRASP Patterns
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.
Fall 2009 ACS-3913 Ron McFadyen 3
Use Case Realizations with GRASP Patterns
By “Controller”, Register is our “façade” controller.
makeNewSale()
:Register
Fall 2009 ACS-3913 Ron McFadyen 4
Use Case Realizations with GRASP Patterns
public class Register
{ …
public makeNewSale()
{
…
}
We have just decided that Register must have a method makeNewSale
Here, we are looking ahead to some code written to support the design
Register
makeNewSale()…
Fall 2009 ACS-3913 Ron McFadyen 5
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 …
Fall 2009 ACS-3913 Ron McFadyen 6
Use Case Realizations with GRASP Patterns
By “Creator”, Register creates a Sale.
makeNewSale()
:Register
create():Sale
Fall 2009 ACS-3913 Ron McFadyen 7
Use Case Realizations with GRASP Patterns
public class Register
{ …
Private Sale sale;
…
public makeNewSale()
{
sale = new Sale();
}
The method makeNewSale creates the sale object
Here, we are looking ahead to some code written to support the design
Fall 2009 ACS-3913 Ron McFadyen 8
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…
Fall 2009 ACS-3913 Ron McFadyen 9
Use Case Realizations with GRASP Patterns
By “Creator”, Register creates a Sale.
makeNewSale()
:Register
create():Sale
create()lineItems: List<SalesLineItem>
Fall 2009 ACS-3913 Ron McFadyen 10
Use Case Realizations with GRASP Patterns
public class Sale
{ private List<SalesLineItem> lineItems =
new ArrayList<SalesLineItem>();
private Date date = new Date();
private boolean isComplete = false;
private Payment payment;
…
The constructor for Sale creates the container for the line items.
Sale contains a list of line items
Fall 2009 ACS-3913 Ron McFadyen 11
Use Case Realizations with GRASP Patterns
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.
Fall 2009 ACS-3913 Ron McFadyen 12
Use Case Realizations with GRASP Patterns
Contract for enteritem specifies
Preconditions:
•A Sale is underway
Postconditions:
•salesLineItem created
•It is associated with the current Sale
•Its quantity is set
•It is associated with a ProductDescription
By Creator, Sale can do this
Sale stores the new sales line item in its collection
The product description will need to be found
Fall 2009 ACS-3913 Ron McFadyen 13
Use Case Realizations with GRASP Patterns
enterItem():Register :Sale
: SalesLineItem
2:makeLineItem()
2.1:create()
2.2:add()
Message 2 … see later slide
lineItems: List<SalesLineItem>
Fall 2009 ACS-3913 Ron McFadyen 14
Use Case Realizations with GRASP Patterns
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.
Fall 2009 ACS-3913 Ron McFadyen 15
Use Case Realizations with GRASP Patterns
enterItem():Register
:Map<ProductDescription>
:ProductCatalog
1:desc=getProductDesc(id)
1.1:desc=get(id)
Fall 2009 ACS-3913 Ron McFadyen 16
Use Case Realizations with GRASP Patterns
enterItem():Register :Sale
:ProductCatalog:SalesLineItem
1:desc=getProductDesc(id)
1.1desc=get(id)
2:makeLineItem()
2.1:create()
2.2:add()
: Map<ProductDescription>lineItems: List<SalesLineItems>
Fall 2009 ACS-3913 Ron McFadyen 17
Use Case Realizations with GRASP Patterns
Given the previous collaboration, what methods/responsibilities have been assigned to the various classes?
Register Sale
ProductCatalogSalesLineItem