210 likes | 480 Views
GRASP Pattern. Zhen Jiang West Chester University zjiang@wcupa.edu . Outline. Introduction Information Expert Creator Low Coupling High Cohesion Controller. Introduction. Design process What’s GRASP pattern What’s responsibility Responsibilities and methods
E N D
GRASP Pattern Zhen Jiang West Chester University zjiang@wcupa.edu
Outline • Introduction • Information Expert • Creator • Low Coupling • High Cohesion • Controller
Introduction • Design process • What’s GRASP pattern • What’s responsibility • Responsibilities and methods • Responsibilities and Interaction Diagrams
Design Process • After identifying your requirements and creating a domain model, then add methods to the software classes, and define the messaging between the objects to fulfill the requirements.
What’s GRASP pattern • This approach to understanding and using design principles is based on patterns of assigning responsibilities. • The GRASP patterns are a learning aid to help one understand essential object design, and apply design reasoning in a methodical, rational, explainable way.
What’s responsibility • Doing: • Doing something itself, such as creating an object or doing a calculation • Initiating action in other objects • Controlling and coordinating activities in other objects. • Knowing: • Knowing about private encapsulated data • Knowing about related objects • Knowing about things it can derive or calculate
Responsibilities and methods :Sale makePayment create :Payment makePayment implies Sale object has a responsibility to create a Payment object
Responsibilities and Interaction Diagrams • Interaction diagrams show choices in assigning responsibilities to objects. • GRASP patterns guide choices in where to assign responsibilities. • GRASP patterns are a codification of widely used basic principles.
Information Expert • Assign a responsibility to the information expert – the class that has the information necessary to fulfill the responsibility. • What is a general principle of assigning responsibilities to objects? • Who should be responsible for knowing/doing …? • Domain model (domain expert, domain analysis) to design model (software classes). • Any existing to any representative.
Example: What information is needed to determine the grand total? Sale Product date description price itemID
Sale date Product SalesLineItem description price itemID quantity Who is information expert?
Sale date getTotal Product SalesLineItem description price itemID quantity getSubTotal getPrice
Creator • Who should be responsible for creating a new instance of some class? • Creational Design Pattern • Assign class B the responsibility to create an instance of class A if one or more of the following is true: • B aggregates A • B contains A • B records instance of A objects • B closely use A objects • B passes initializing data to A
Low Coupling • Coupling is a measure of how strongly one element is connected to, has knowledge of, or relies on other elements. • Payment, register, and sale. • Time sequence? • Classes?
create :Payment makePayment :Register :Sale addPayment makePayment :Sale makePayment :Register :Payment create
High Cohesion • How to keep complexity manageable? • Time sequence of the above example. • More tasks? • Key role, key object, key class, key relations • Modular Design (indirect control)
Yin and Yang • Yin and Yang • The light color area which indicates more sunlight is called Yang (Sun). The dark color area has less sunlight (more moonlight) and is called Yin (Moon). Yang is like man. Yin is like woman. Yang wouldn't grow without Yin. Yin couldn't give birth without Yang. • Interdependent influence • Trade-off
Controller • Assign the responsibility for receiving or handling a system event message to a class representing one of the following choices: • Represents the overall system, device, or subsystem • Represents a use case within which the system event occurs. • Who should be the controller for system events such as enterItem and endSale? • Which class should be responsible for receiving system event message? • Interface layer does not handle system events. • The controller receives the service request from the UI layer and coordinates their fulfillment, ie., Command, Façade, and etc.