Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of...

24
Feb 2005 92.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 You should review these sections
  • date post

    21-Dec-2015
  • Category

    Documents

  • view

    214
  • download

    0

Transcript of Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of...

Page 1: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.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

You should review these sections

Page 2: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.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.

Page 3: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.3913 Ron McFadyen 3

Use Case Realizations with GRASP Patterns

By “Controller”, Register is our “façade” controller.

makeNewSale()

:Register

Page 4: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.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…

Page 5: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.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 …

Page 6: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.3913 Ron McFadyen 6

Use Case Realizations with GRASP Patterns

By “Creator”, Register creates a Sale.

makeNewSale()

:Register

create():Sale

Page 7: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.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

Page 8: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.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…

Page 9: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.3913 Ron McFadyen 9

Use Case Realizations with GRASP Patterns

By “Creator”, Register creates a Sale.

makeNewSale()

:Register

create():Sale

create() ::SalesLineItem

Page 10: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.3913 Ron McFadyen 10

Use Case Realizations with GRASP Patterns

By “Creator”, Register creates a Sale.

makeNewSale()

:Register

create():Sale

create()lineItems:

List<SalesLineItems>

3rd edition

Page 11: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.3913 Ron McFadyen 11

Use Case Realizations with GRASP Patterns

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.

Sale contains a list of line items

Page 12: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.3913 Ron McFadyen 12

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.

Page 13: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.3913 Ron McFadyen 13

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

Page 14: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.3913 Ron McFadyen 14

Use Case Realizations with GRASP Patterns

enterItem():Register :Sale

::SalesLineItem

: SalesLineItem

2:makeLineItem()

2.1:create()

2.2:add()

Message 2 … see later slide

Page 15: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.3913 Ron McFadyen 15

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<SalesLineItems>3rd edition

Page 16: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.3913 Ron McFadyen 16

Use Case Realizations with GRASP Patterns

public class Sale

{ …

public void makeLineItem (…, …)

{

lineItems.add ( new SalesLineItem (…, …) ) ;

}

The “add” message sent to the multiobject is handled within Sale. Sale has a list of line items

The “create” message for a new sales line item

Page 17: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.3913 Ron McFadyen 17

Use Case Realizations with GRASP Patterns

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

Page 18: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.3913 Ron McFadyen 18

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.

Page 19: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.3913 Ron McFadyen 19

Use Case Realizations with GRASP Patterns

enterItem():Register

::ProductSpecification

:ProductCatalog

1:getSpecification()

1.1:find()

Page 20: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.3913 Ron McFadyen 20

Use Case Realizations with GRASP Patterns

enterItem():Register

:ProductCatalog

1:getSpecification()

1.1:get()

: Map<ProductSpecifications>

3rd edition

Page 21: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.3913 Ron McFadyen 21

Use Case Realizations with GRASP Patterns

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

Page 22: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.3913 Ron McFadyen 22

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

Page 23: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.3913 Ron McFadyen 23

Use Case Realizations with GRASP Patterns

enterItem():Register :Sale

:ProductCatalog:SalesLineItem

1:getSpecification()

1.1get()

2:makeLineItem()

2.1:create()

2.2:add()

: Map<ProductSpecifications>

3rd edition

lineItems: List<SalesLineItems>

Page 24: Feb 200592.3913 Ron McFadyen1 Use Case Realizations with GRASP Patterns “The assignment of responsibilities and design of collaborations are very important.

Feb 2005 92.3913 Ron McFadyen 24

Use Case Realizations with GRASP Patterns

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

Register Sale

ProductCatalogSalesLineItem