object design examples with grasp chapter 18 applying uml and patterns craig larman

41
Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Upload: tess-postlethwaite

Post on 16-Dec-2015

230 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Object Design Examples with GRASP

Chapter 18Applying UML and Patterns

Craig Larman

Page 2: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Objectives Design use-case realizations. Apply the GRASP patterns to assign

responsibilities to classes. Use the UML interaction diagram notation to

illustrate the design of objects.

Assign responsibilities and design object collaborations Important and creative steps during design While diagramming or programming.

Page 3: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Use-Case Realizations A Use Case Realization describes how a

particular use case is realized in the design model, in terms of collaborating objects.

UML interaction diagrams are used to illustrate use-case realizations.

Principles and Patterns can be applied during this design work.

The interaction diagrams involve message interaction between software objects

Names come from conceptual classes in the Domain Model, plus other classes of objects

Page 4: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Creating Interaction Diagrams

Create a separate interaction diagram for each system operation

Using the contract responsibilities and post conditions and use case description as a starting point, design a system of interacting objects to fulfill the tasks.

Apply the GRASP and other patterns to develop a good design.

Page 5: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Communication Diagram Using the controller pattern, the Register

class could be chosen as the controller for handling the events of Process Sale.

Page 6: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Sequence Diagram example One Sequence Diagram and system event

message handling.

Page 7: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Multiple Sequence Diagram However, it is often that the sequence

diagram is too complex or long.

Page 8: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Contracts and Use-Case Realizations Contract responsibilities, post-conditions, and

use-cases are starting point for designing system of interacting objects to fulfill tasks. It may be possible to design use-case

realizations directly from the use-case text. For each contract, we work through the

responsibilities and post-condition state changes, and design message interactions to satisfy requirements.

Page 9: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Partial Interaction Diagram

Page 10: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Omitting Contracts If we omit the contract creation we could still

construct the interaction diagrams By returning to the use-cases and thinking

through what must be achieved. However, the contracts

Organize and isolate the information in a workable format and

Encourage investigative work during the analysis phase rather than the design phase.

Page 11: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Domain Model and Use-Case Realization Some of the software objects that interact via

messages in the interaction diagrams are inspired from the Domain Model. The existing domain model is not likely to be

perfect. Errors and omissions are to be expected. You will discover new conceptual classes that

were previously missed, ignore conceptual classes that were previously identified, and do likewise with associations and attributes.

Page 12: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Object Design : Contract Name : makeNewSale() Responsibilities : Make a new sale for a cashier

to request to start a new sale, after a customer has arrived with things to buy.

Cross-References: Use Cases : Process Sale Pre-Conditions: None Post-Conditions: A Sale instance si was createdsi was associated with the current registerAttributes of the si were initialized.

Page 13: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Choosing the Controller Class Our design choice involves choosing the

controller for the system operation message makeNewSale().

Using the Controller pattern, here are some choices:

Represents the overall system, device, or subsystem: Register, PoS system.

Represents a receiver or handler of all system events of a use-case scenario : ProcessSaleHandler, ProcessSaleSession.

Page 14: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Applying the GRASP Controller Pattern From those choices, we choose the register

as our controller. By applying the GRASP controller pattern, we

can design a use-case realization by drawing an interaction diagram which begins by sending a makeNewSale message to Register software object.

Page 15: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Creating a New Sale A software sale object must be created, and

the GRASP creator pattern suggests assigning the responsibility for creation to a class that aggregates, contains, or records the object to be created.

The register is also a good choice to create the sale object by the creator pattern.

Page 16: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Creating a New Sale Communication Diagram

Page 17: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Use-Case Realization Design The design was not difficult. But the point of its careful explanation in

terms of Controller and Creator was to illustrate that the details of a design can be rationally and methodically decided and explained in terms of principles and patterns, such as GRASP.

Page 18: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Contract for enterItem ( ) Name: enterItem(itemID : itemID, quantity :

integer) Responsibilities : Enter sale of an item and

add it to the sale. Display the item description and price.

Cross References : Use-Cases : ProcessSale.

Pre-Conditions: There is an underway sale.

Post-Conditions: A SalesLineItem instance ‘sli’ was created. (instance created)

Page 19: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Contract for enterItem ( ) sli was associated with current sale.

(association formed) sli.quantity became quantity.(attribute

modification) sli was associated with a ProductSpecification,

based on itemID match.(association formed)

Page 20: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Choosing the Controller Class By the controller pattern, here are the

choices. Register or Retail System : represents the

entire system(facade-controller) Store : represents the overall business or

organization. Cashier : represents something in the real-

world that is active or involved in the task. (role controller)

ProcessSaleHandler : represents an artificial handler of all system operations of a use-case. (use-case controller)

Page 21: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Choosing the Controller Class Applying the GRASP Controller Pattern. Choose a façade-controller like Register.

If not taking on too many responsibilities. The register instance is a software

abstraction that represents the register.

Page 22: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Creating a new SalesLineItem The contract post condition indicate a

responsibility to create a SalesLineItem instance.

A Sale contains SalesLineItem objects. By creator pattern, the sale is an appropriate

candidate for creating line items. GRASP creator pattern

Assign the responsibility for creation to a class that aggregates, contains or records.

Page 23: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Making a new SalesLineItem Sale Creation

Page 24: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Finding a product specification The SalesLineItem needs to be associated

with the ProductSpecification that matches the incoming itemID.

Who should be responsible for looking up the ProductSpecification based on the itemID match?

By the Expert pattern, ProductCatalog is a good candidate for the responsibility, since it logically contains all the ProductSpecifications.

Page 25: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Visibility to a product catalog Who should send the Specification message

to the ProductCatalog to ask for a ProductSpecification. Assumption: A Register and a ProductCatalog

instances were created during the initial Start Up use-case, and there is a permanent connection between them.

Based on this assumption, then it is possible to the Register to send the specification message to the ProductCatalog.

Page 26: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Visibility to a product catalog(2) This implies another concept, visibility. ‘Visibility’ is the ability of one object to ‘see’ or

to have reference to another object. In order for an object to send a message to

another object it must have visibility to it.

Page 27: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Retrieving ProductSpecification Retrieving ProductSpecification from a

database. It is unlikely that all the Product -

Specifications will actually be in memory. They will most likely be stored in a relational

or object DB and retrieved on demand. However the issues surrounding information

retrieval will be deferred for now for simplicity.

Page 28: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Interaction Diagram : enterItem Object Design based on the GRASP patterns.

Page 29: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Message to multi-objects Notice that although the default interpretation

of a message sent to a multi-object is that it is implicitly sent to all elements of the collection/container, it may have alternatively be interpreted as a message to the collection object itself.

Page 30: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Object Design : endSale The endSale system operation occurs when a

cashier presses a button indicating the end of sale.

A collaborating diagram can be constructed to satisfy the post-conditions of endSale.

The GRASP patterns will be used to choose and justify the messages.

Page 31: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Object Design : endSale Contract Name : endSale() Responsibilities : Record that it is the end of

entry of sale items, and display sale total. Cross References : Use Cases : Process

Sale Exceptions : If a sale is not underway,

indicate that it was an error. Pre-Conditions:

There is an underway sale. Post-Conditions:

sale.isComplete became true.

Page 32: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Choosing the Controller Class Based on the Controller Pattern, as for

enterItem, we will continue to use register as a controller.

Page 33: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Setting the Sale.isComplete attribute The contract post-condition state: Sale.isComplete became true. As always, Expert should be the first pattern

considered unless it is a controller or creation problem (which is not).

Who should be responsible for setting the Sale.isComplete attribute of the Sale to true. By Expert, it should be the Sale itself.

Page 34: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Communication Diagram : endSale Setting the Sale.isComplete attribute (2)

Page 35: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Display of Information It states in the responsibilities of the endSale

contract that the sale total must be displayed. Who should be responsible for the display of

information: Model-View Separation Pattern. Ignore any requirements that involve the display

of information, with the following exception: Ensure that all the information that must be

displayed is known and available from the domain objects. For example, the sale total must be known by some object.

Page 36: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Constraints and Notes

Page 37: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Calculating the Sale Total By Expert the Sale itself should be

responsible for knowing its total. How to find it?

State the responsibility. Who should be responsible for knowing the

sale total. Summarize the information needed.

Page 38: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Calculating the Sale Total (2) The sale total is the sum of the subtotals of all

the saleslineitems. Sales Line Item subtotal : line item quantity *

product description price. List the information required until to fulfill this

responsibility and the classes that know this information.

Page 39: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Calculating the Sale Total (3)

Page 40: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Communication Diagram Sale getTotal Communication Diagram

Page 41: Object Design Examples with GRASP Chapter 18 Applying UML and Patterns Craig Larman

Communication Diagram (2) Sale getTotal Communication Diagram