Transcript
Page 1: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

1

GRASP: Designing Objects with Responsibilities

Chapter 17

Applying UML and Patterns

Craig Larman

Page 2: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

2

GRASP : Designing Objects With Responsibilities Learning aid to help understand essential

object design Apply design reasoning in a methodical,

rational, explainable way

Page 3: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

3

Design Activities During design and coding we apply various

OO design principles, among them software design patterns such as the GRASP and GoF (Gang of Four) patterns.

Our metaphor is Responsibility Driven Design (RDD), because our chief design emphasis is on assigning responsibilities to objects.

Page 4: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

4

Design Model Relationships

Domain Model

Use Case Model

Interaction Diagrams

Glossary

Design

Requirements

Business Model

Some object namesand

attributesEvents andfunctionalrequirements

Item details

Supplementary

Specification

Domain rulesNon-func reqs

System Sequence Diagram

Page 5: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

5

Responsibilities and Methods

Responsibilities are realized as methods Approach to understanding and using design

principles is based on patterns of assigning responsibilities.

Definition of Responsibility:

“A contract or obligation of a classifier” Responsibility types are Knowing or Doing

Page 6: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

6

Responsibilities and interaction diagrams Interaction diagrams show choices in

assigning responsibilities to objects. Decisions in responsibility assignment are

reflected in the messages sent to different classes of objects

Page 7: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

7

Patterns

Principles and idioms codified in a structured format describing the problem, solution, and given a name are called patterns.

A “New Pattern” is an oxymoron. Patterns are tried and true, established ways of doing things. They are not new things or new ways of doing things.

Page 8: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

8

Definition of a Pattern Pattern is a named problem/solution pair that

can be applied in new contexts, Includes advice on how to apply it in novel

situations and discussion of its trade-offs.

Page 9: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

9

All Patterns have suggestive names. Naming a pattern, technique, or a principle

has the following advantages : It supports chunking and incorporating that

concept into our understanding and memory It facilitates communication

Naming Patterns

Page 10: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

10

GRASP Name chosen to suggest importance of

grasping principles to successfully design object-oriented software

It is an acronym for General Responsibility Assignment Software Patterns

Describes fundamental principles of object design and responsibility assignment, expressed as patterns

Page 11: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

11

Five GRASP Patterns : Information Expert Creator High Cohesion Low Coupling Controller

Page 12: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

12

UML Class diagram notation

Three sections:

Class Name

attributes

methods

Third section is for methods

Page 13: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

13

Creator Pattern Problem: Who should be responsible for

creating a new instance of some class ? Object creation is one of the most common

activities in an object-oriented system. It is useful to have a general principle for

assignment of creation responsibilities. Supports low coupling, increased clarity,

encapsulation, and reusability.

Page 14: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

14

Solution to Creator Problem Assign class B the responsibility to create an

instance of class A if one or more of the following is true : B aggregates A objects . B contains A objects. B records instances of A objects. B closely uses A objects. B has the initializing data that will be passed to

A when it is created B is a creator of A objects.

Page 15: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

15

Creator Discussion Creator guides assigning responsibilities related

to creation of objects, a very common task. Intent is to find a creator that needs to be

connected to the created object in any event. Aggregator aggregates Part Container contains Content Recorder records.

Sometimes a creator is found by looking for the class that has the initializing data that will be passed in during creation.

Page 16: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

16

Information Expert Pattern

Problem: What is a general principle of assigning responsibilities to objects?

Solution: Assign a responsibility to the information expert – a class that has the information necessary to fulfill the responsibility

Also known as Expert pattern.

Page 17: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

17

Information Expert Discussion A basic guiding principle used continuously in

object design. Objects do things related to information they have Often requires information spread across different

classes of objects Objects will need to interact via messages to share

the work

Page 18: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

18

Contraindications Using Expert Solution suggested by expert may be

undesirable, Usually because of problems in coupling and

cohesion. Keep the application logic in one place,

database in another Rather than intermingling different system

concerns in the same component.

Page 19: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

19

Information encapsulation is maintained Objects use their own information to fulfill tasks. Supports low coupling More robust, maintainable systems

Behavior distributed across classes having the required information More cohesive “lightweight” class definitions Easier to understand and maintain.

High cohesion is usually supported.

Benefits of Using Expert

Page 20: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

20

Low Coupling Pattern Coupling is a measure of how strongly one

element is connected to, has knowledge of, or relies on other element.

Problem: How to support a low dependency, low change impact ,and increased reuse?

Solution: Assign a responsibility so that coupling remains low.

Is an underlying goal to continually consider

Page 21: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

21

Benefits of Low Coupling Objects are not affected by changes in other

components Objects are simple to understand in isolation Objects are convenient to reuse

Page 22: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

22

Controller Pattern A non–user interface object Responsible for receiving or handling a system

event Defines methods for system operation.

Page 23: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

23

Controller Problem Problem: Who should be responsible for

handling an input system event? Assumes the Model-View-Controller

architectural (not software) pattern Separates the user interface (Views) from the

functionality of the system Uses controllers to access other functionality

(Models).

Page 24: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

24

Controller Solution Solution: Assign the responsibility for

receiving or handling a system event message to a class representing either: The overall system, device, or subsystem A use case scenario (or group of use cases)

within which the system event occurs

Page 25: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

25

Controller Discussion Controller pattern provides guidance for

generally accepted, suitable choices. Often desirable to use the same controller

class for all system events of one use case Controller maintains information about the

state of the use case

Page 26: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

26

Facade Controller Suitable when there are not “too many”

system events Suitable when it is not possible for the user

interface (UI) to redirect system event messages to alternating controllers such as in message processing system.

Page 27: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

27

Use–Case controller

When placing the responsibilities in a façade controller leads to design with low cohesion or high coupling, Use Case Controller is preferred as an alternative.

When there are many system events across different processes; it factors their handling into manageable separate classes.

Page 28: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

28

High Cohesion Pattern Problem: How can complexity be kept

manageable? Solution: Assign responsibility so that

cohesion remains high Is a measure of how strongly related the

responsibilities of something are High Cohesion: An element with highly

related responsibilities, which does not do a tremendous amount of work This is an underlying goal to consider constantly.

Page 29: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

29

High Cohesion Benefits

Clarity and ease of comprehension of design is increased.

Maintenance and enhancements are simplified

Low coupling is often supported.

Page 30: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

30

High Cohesion Contraindications Sometimes desirable to create fewer and larger,

less cohesive server objects If they provide an interface for many operations

Page 31: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

31

High Cohesion/Low Coupling Low Coupling and High Cohesion go together

naturally. One usually leads to the other. Both are outcomes of the OO principle of

“chunking,” (aka decomposition) breaking up a large problem into manageable pieces.

If the pieces are too simple there will be too many of them.

If the pieces are too complex, each will not be understandable.

Page 32: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

32

Very Low Cohesion – Class is solely responsible for many different functional areas.

Low Cohesion – Class has sole responsibility for a complex task in one functional area.

Moderate Cohesion – Class has lightweight and sole responsibilities in few areas that are logically related to class concept, but not to each other

High Cohesion – Class has moderate responsibilities in one functional area and collaborates with other classes to fulfill tasks.

Varying Degrees of Functional Cohesion

Page 33: 1 GRASP: Designing Objects with Responsibilities Chapter 17 Applying UML and Patterns Craig Larman

33

Summary The skillful assignment of responsibilities is

extremely important in object design. Determining the assignment of

responsibilities often occurs during the creation of interaction diagrams , and certainly during programming.

Patterns are named problem/solution pairs that codify good advice and principles often related to assignment of responsibilities.


Top Related