Download presentation
1
Ch 17: Use Case Realizations with GRASP Patterns
(assigning responsibilities to objects to achieve user goals) Section 17.3 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.
2
Ch 17: Use Case Realizations with GRASP Patterns
By “Controller”, Register is our “façade” controller. :Register makeNewSale()
3
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
4
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 …
5
Ch 17: Use Case Realizations with GRASP Patterns
By “Creator”, Register creates a Sale. :Register makeNewSale() create() :Sale
6
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
7
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…
8
Ch 17: Use Case Realizations with GRASP Patterns
By “Creator”, Register creates a Sale. :Register makeNewSale() create() :Sale : create() :SalesLineItem
9
Ch 17: Use Case Realizations with GRASP Patterns
The constructor for Sale creates the container for the line items Page 315 public class Sale { private List lineItems = new ArrayList(); private Date date = new Date(); private boolean isComplete = false; private Payment payment; …
10
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.
11
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
12
Ch 17: Use Case Realizations with GRASP Patterns
Message 2 … see later slide enterItem() 2:makeLineItem() :Register :Sale 2.1:create() 2.2:add() : SalesLineItem : :SalesLineItem
13
Ch 17: Use Case Realizations with GRASP Patterns
Page 315 public class Sale { … public void makeLineItem (…, …) { lineItems.add ( new SalesLineItem (…, …) ) ; } The “create” message for a new sales line item The “add” message sent to the multiobject
14
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 itemarranges that the sales line item knows its product specification and its quantity
15
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.
16
:ProductSpecification
Ch 17: Use Case Realizations with GRASP Patterns enterItem() :Register 1:getSpecification() :ProductCatalog 1.1:find() : :ProductSpecification
17
Ch 17: Use Case Realizations with GRASP Patterns
Collection of product specifications Page 316 public class ProductCatalog { private Map productSpecifications = new HashMap(); … public ProductSpecification getSpecification (ItemID id) { Return( …. productSpecifications.get ( id ); } Method to find a specific item Handles the “find” message
18
:ProductSpecification
Ch 17: Use Case Realizations with GRASP Patterns enterItem() 2:makeLineItem() :Register :Sale 1:getSpecification() 2.1:create() 2.2:add() :ProductCatalog :SalesLineItem 1.1:find() : :SalesLineItem : :ProductSpecification
19
Ch 17: Use Case Realizations with GRASP Patterns
Given the previous collaboration, what methods/responsibilities have been assigned to the various classes? Register Sale ProductCatalog SalesLineItem
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.