Presentation is loading. Please wait.

Presentation is loading. Please wait.

Ch 17: Use Case Realizations with GRASP Patterns

Similar presentations


Presentation on theme: "Ch 17: Use Case Realizations with GRASP Patterns"— Presentation transcript:

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


Download ppt "Ch 17: Use Case Realizations with GRASP Patterns"

Similar presentations


Ads by Google