march 200391.3913 ron mcfadyen1 ch 17: use case realizations with grasp patterns assigning...

21
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

Post on 19-Dec-2015

215 views

Category:

Documents


0 download

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()

March 2003 91.3913 Ron McFadyen 21

Ch 17: Use Case Realizations with GRASP Patterns

Given the previous collaboration, what methods/responsibilities have been assigned to the various classes?

Register Sale

ProductCatalogSalesLineItem