GRASP Submitted To: Submitted by: Fizza Durrani 11073 7 th Semester UET(A) October 15, 2014 1 Lahore Garrison University
GRASP “The critical design tool for software development is a mind well educated in design principles. It is not the UML or any other technology.“ Craig Larman Thus, GRASP is really a mental toolset, a learning aid to help in the design of object-oriented software. 2 Lahore Garrison University
GRASP It stands for: General Responsibilities Assignment Software Patterns (Principles) 3 Lahore Garrison University
GRASP Responsibility A contract / obligation that a class / module / component must accomplish Knowledge Private state Computed state Behavior Send messages itself and modify its private state Instantiate another objects Send messages to another objects 4 Lahore Garrison University
Responsibility-Driven Design “doing” responsibilities Doing something itself, such as creation an object or doing a calculation. Initiating action in other objects Controlling and coordinating activities in other objects. “knowing” responsibilities Knowing about encapsulated data. Knowing about related objects. Knowing about things it can derive or calculate. 5 Lahore Garrison University
GRASP Patterns 6 Lahore Garrison University
GRASP Patterns Informational Expert Creator Low Coupling High Cohesion Controller Polymorphism Pure Fabrication Indirection Controlled Variation 7 Lahore Garrison University
8 Lahore Garrison University
Informational Expert Problem: Which class possesses information about object A? More common question: What is a general principle of assigning responsibilities to objects? Assign the responsibility to the class that knows the necessary information for performing required action and fulfill the responsibility. 9 Lahore Garrison University
Informational Expert A B C D DO GetDataX () GetDataY () GetDataZ () return Z return Y return X 10 Lahore Garrison University
Informational Expert A B C D DO DoAction () DoAction (X) DoAction (Y) 11 Lahore Garrison University
12 Lahore Garrison University
Creator Problem: Who should be responsible for creating object A? Class B must have that responsibility if: B is composed by A (composition) B knows the necessary information in order to instantiate A objects B depends heavily on A 13 Lahore Garrison University
The goal is to define creator-object, which will be related to all created objects. Board Square 64 Square Board create create Creator 14 Lahore Garrison University
15 Lahore Garrison University
Low Coupling Problem: How to minimize dependencies between classes ? Coupling is the degree, defines how tightly one component linked to other components, or how much information it knows about other components. Examples Inheritance Composition / aggregation / association A send messages to B 16 Lahore Garrison University
Low Coupling Assign a responsibility so that coupling remains low. Low Coupling is an evaluative pattern, which dictates how to assign responsibilities to support: lower dependency between the classes, change in one class having lower impact on other classes, higher reuse potential. 17 Lahore Garrison University
18 Lahore Garrison University
High Cohesion Problem: How to keep objects focused, understandable, manageable, and support low coupling? Cohesion is a measure of how strongly related or focused the responsibilities of a single module are. High Cohesion is an evaluative pattern that attempts to keep objects appropriately focused, manageable and understandable. 19 Lahore Garrison University
High Cohesion Alternatively, low cohesion is a situation in which a given element has too many unrelated responsibilities (“God Object”) Low Cohesion implies: Hard to reuse Hard to maintain Constantly changing 20 Lahore Garrison University
A A ?? ?? DoA () DoB () DoC () DoA () DoB () DoC () High Cohesion 21 Lahore Garrison University
22 Lahore Garrison University
Controller Problem: Who should be responsible for handling events and messages from external actors (UI, …)? Assign the responsibility to a class, such as: A class that represents the overall system, device, or subsystem. Façade Controller Pattern A class that represent a use case, whereby performs handling particular system operation. Use Case Controller Pattern Generally does not perform operation by itself, but delegate responsibility to component objects. 23 Lahore Garrison University
24 Lahore Garrison University
Polymorphism Problem: How to act different depending in object’s class, or how to design pluggable components? In case of class behavior might changes, responsibilities segregates to different behavior specific classes, using polymorphic operations for this class. Advise: Do not use type checking, but conditional logic for implementation different variations based on object type. 25 Lahore Garrison University
There are (roughly) 3 types a polymorphism: Ad hoc Polymorphism Parametric Polymorphism Subtype Polymorphism Polymorphism Player Square landedOn RegularSquare landedOn GoSquare landedOn OtherSquare landedOn 26 Lahore Garrison University
27 Lahore Garrison University
Problem: How to assign responsibilities if applying the Informational Expert principle decreases cohesion and increases coupling? Assign the responsibility to an artificial class that does not belongs to the domain model. Pure Fabrication is a class that does not reflect any business domain object, but required only for increase cohesion and decrease coupling. Pure Fabrication 28 Lahore Garrison University
29 Lahore Garrison University
Problem: How to assign responsibilities in order to avoid direct coupling between two components, and keep ability for reuse. Assign responsibility to intermediate class for providing linking between objects not linking directly. Related design patterns: Adapter, Bridge, Mediator. Indirection 30 Lahore Garrison University
31 Lahore Garrison University
Problem: How to design system and subsystems, that changes in these components does not affects on other components. Identify points of possible variations and instability; create stable interfaces upon instable components. Open-Closed Principle almost equivalent to CV pattern. Controlled Variation 32 Lahore Garrison University
There are 2 types of points: Variation point – branching point on existing system or in requirements. For example we need to support several types of interfaces for tax payment system Evolution point – supposed branching point, which might occur in future, but does not declared by existing requirements. Protected variation pattern applying for both variation and evolution points. Controlled Variation 33 Lahore Garrison University
Informational Expert Assign a responsibility to the class that has the information needed to fulfill it. Creator Assign class B the responsibility to create an instance of class A if one of these is true (the more the better): B "contains" or compositely aggregates A. B records A. B closely uses A. B has the initializing data for A that will be passed to A when it is crated. Thus B is an Expert with respect to creating A. Controller Assign the responsibility to a class representing one of the following choices: Major subsystem classes A use case scenario classes within which the system event occurs Low Coupling Assign a responsibility so that coupling remains low. High Cohesion Assign a responsibility so that cohesion remains high. Overview 34 Lahore Garrison University
Polymorphism The same name operations (methods) in the difference classes is defined. And assign a responsibility to the class the class that the behavior is changed. Pure Fabrication Define a class for convenience' sake that doesn't express the concept of the problem area at all. Indirection Assign the responsibility to an intermediate object to mediate between other components or services, so that they are not directly coupled. Protected Variations Assign responsibility to create a stable interface around an unstable or predictably variable subsystem or component. Overview 35 Lahore Garrison University
http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29 http://www.slideshare.net/snmgian/grasp-principles http://www.slideshare.net/eduardo_diederichsen/design-talk-grasp-patterns?related=1 http://www.slideshare.net/eduardo_diederichsen/design-talk-grasp-patterns?related=1 Bibliography 36 Lahore Garrison University