Conception OBJET GRASP Patterns

Slides:



Advertisements
Similar presentations
GRASP: Designing Objects with Responsibilities
Advertisements

Object Design Examples with GRASP
Object-Oriented Analysis and Design CHAPTER 17, 25: GRASP PATTERNS 1.
Oct 2, Ron McFadyen1 From the Merriam-Webster’s online dictionary ( Main Entry: an·thro·po·mor·phism Pronunciation: -"fi-z&m Function:
Feb R. McFadyen1 From the Merriam-Webster’s online dictionary ( Main Entry: an·thro·po·mor·phism Pronunciation: -"fi-z&m Function:
NJIT More GRASP Patterns Chapter 22 Applying UML and Patterns Craig Larman Prepared By: Krishnendu Banerjee.
February Ron McFadyen1 From the Merriam-Webster’s online dictionary ( Main Entry: an·thro·po·mor·phism Pronunciation: -"fi-z&m.
Object-Oriented Software Engineering Practical Software Development using UML and Java Design Patterns Sources: Chapter 6: Using Design Patterns, and Chapter.
Object-Oriented Analysis and Design
GRASP : Designing Objects with Responsibilities
October 20, 2005Architectural Design, ECEN Architectural Design Architecture Business Cycle Design for Maintainability ECEN 5543 / CSCI 5548 SW Eng.
Fall 2009ACS-3913 Ron McFadyen1 From the Merriam-Webster’s online dictionary ( Main Entry: an·thro·po·mor·phism Date: 1753 an interpretation.
Feb 4, Ron McFadyen1 founded on principles of good OO design idea was first put forth by Christopher Alexander (1977) in their work concerning.
GRASP Design Patterns: Designing Objects with Responsibilities
Object-Oriented Software Engineering Practical Software Development using UML and Java Design Patterns Sources: Chapter 6: Using Design Patterns, and Chapter.
GRASP Pattern Zhen Jiang West Chester University
GRASP Principles. How to Design Objects The hard step: moving from analysis to design How to do it? –Design principles (Larman: “patterns”) – an attempt.
GRASP Patterns Presented By Dr. Shazzad Hosain. Patterns A pattern describes a problem and solution, and given a name. Examples are Singleton, Adapter,
GRASP PATTERNS Information Expert (Expert) Creator Controller © Lethbridge/Laganière 2001 Chapter 6: Using design patterns1.
Chapter 17. GRASP General Responsibility Assignment Software Patterns (Principles) OOD: after identifying requirements, create domain model, define responsiblities.
1 Chapter 17 GRASP Design Patterns: Designing Objects with Responsibilities.
SOEN 6011 Software Engineering Processes Section SS Fall 2007 Dr Greg Butler
Architecture GRASP Realization of use cases in interaction diagrams Design class diagram Design ( how )
Chapter 7: Object Design Examples with GRASP. Objective Design use case realizations. Apply GRASP to assign responsibilities to classes. Apply UML to.
BTS430 Systems Analysis and Design using UML Design Patterns.
GRASP: Designing Objects With Responsibilities Chapter 17 Applying UML and Patterns -Craig Larman.
GRASP: Designing Objects With Responsibilities
Object Design Examples with GRASP (Ch. 18)
17. GRASP—Designing Objects with Responsibilities III CSE5324 Lecture Quiz 17 due at 5 PM Thursday, 8 October 2015.
GoF Design Patterns (Ch. 26). GoF Design Patterns Adapter Factory Singleton Strategy Composite Façade Observer (Publish-Subscribe)
Chapter 17 GRASP: Designing Objects with Responsibilities. 1CS6359 Fall 2011 John Cole.
Design Patterns. Patterns “Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution.
COMP 6471 Software Design Methodologies Winter 2006 Dr Greg Butler
Copyright © Craig Larman All Rights Reserved Responsibility-Driven Design with the GRASP Patterns.
Object-Oriented Design Part 2
Next Gen POS Example GRASP again. Same Patterns Different Example!
GRASP: Designing Objects with Responsibilities
IntellAgile Copyright © 2002 Craig Larman. All rights reserved. Object Design and Use- Case Realizations with GRASP Patterns.
What to remember from Chap 13 (Logical architecture)
Object-Oriented Analysis and Design Mar 9, 2008.
OO Methodology Elaboration Iteration 2 - Design Patterns -
Patterns Roberto Damiani Mendes. Roteiro Definition; Definition; Architecture Patterns; Architecture Patterns; Design Patterns; Design Patterns; GRASP.
OO Design Roshan Chitrakar. Analysis to Design Do the RIGHT thing Do the RIGHT thing Requirement Analysis Requirement Analysis Domain Modeling with addition.
Copyright © Craig Larman All Rights Reserved COMP-350 Object-Oriented Analysis and Design GRASP: Designing Objects with Responsibilities Reference:
GRASP: Designing Objects With Responsibilities
Chapter 17 Designing with Responsibilities. Fig
References: Applying UML and patterns Craig Larman
OO Methodology Elaboration Phase Iteration 1- Part 3.
Design. 2 The Need for Software Blueprints Knowing an object-oriented language and having access to a library is necessary but not sufficient in order.
GRASP: More Patterns for Assigning Responsibilities Presented By Dr. Shazzad Hosain.
Oct 3, Ron McFadyen1 GRASP Patterns 1.Expert 2.Creator 3.Controller 4.Low Coupling 5.High Cohesion.
General Principles in Assigning Responsibilities Responsibilities Responsibility-Driven Design CRC Cards GRASP.
OO Methodology Elaboration Phase Iteration 1- Part 2.
Elaboration: Iteration 2. Elaboration: Iteration 2 Basics Iteration 1 ends with : All the software has been tested: The idea in the UP is to do early,
Object Design Examples with GRASP
GRASP – Designing Objects with Responsibilities
TK2023 Object-Oriented Software Engineering
GoF Patterns (GoF) popo.
Chapter 12: Collaboration Diagram - PART2
DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS
TK2023 Object-Oriented Software Engineering
Presentation on GRASP Patterns Submitted by
Apply Expert, Creator, Controller, Low Coupling, High Cohesion
GRASP : Designing Objects with Responsibilities
GoF Design Patterns (Ch. 26). GoF Design Patterns Adapter Factory Singleton Strategy Composite Façade Observer (Publish-Subscribe)
GRASP Design Patterns: Designing Objects with Responsibilities
GoF Design Patterns (Ch. 26)
SOEN 343 Software Design Computer Science and Software Engineering Department Concordia University Fall 2004 Instructor: Patrice Chalin.
Next Gen POS Example GRASP again.
GoF Patterns Ch. 26.
Presentation transcript:

Conception OBJET GRASP Patterns General Responsibility Assignment Software Patterns

Grasp Patterns Recognize that according to Craig Larman: “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.”

Resources www.unf.edu/~broggio/cen6017/38.DesignPatters -Part2.ppt www.academic.marist.edu/~jzbv/.../DesignPatterns /GRASP.pp …

Grasp Patterns During Object Design Make choice about the assignment of responsibilities to software classes

Responsibility

Expert Pattern Sale example Who is responsible for knowing the total of the sale ? Who has the information to determine the total

(Information) Expert Pattern Look in the Domain Model Domain Model : conceptual classes Design Model : software classes So Choose a domain model class Create a new class based on Domain Model class

Expert Pattern – Using Domain Model There is a Sale class in the domain model Sale date time SalesLineItem quantity Product Specification description price itemID 1 * Described by Contains

Add Sale Class to the design model Add the responsibility of knowing its total Method getTotal() :Sale date time getTotal() New method ------ t := getTotal() : Sale

And then What information is needed to determine the line item subtotals? We need: SalesLineItem.quantity and ProductSpecification.price t := getTotal() : Sale : SalesLineItem 1 *: st := getSubtotal() :Sale date time getTotal() :SalesLineItem quantity getSubtotal()

How the domain model is used And we need to know the product price The design class must include a method getPrice() The design classes show how entities are used

Finally Responsabilities are placed with the object that had the information needed to fulfill it

Design Model considerations Often requires spanning several classes Collaboration between partial information experts these “information experts” do things relative to the information they ‘know.’

Be careful Who should be responsible for saving Sale in the database ? Each entity cannot be responsible for that Problem of Cohesion and coupling Reuse and duplication

But why ???

Cohesion and Coupling SQL/JDBC Code in the Sale Class It is not anymore only a sale (decreased cohesion) This is a new responsibility (saving itself) (Separate I/O from data manipulation)

Cohesion and coupling Coupling Sale with the database service Sale belong to the domain layer Coupled to other domain objects Difficult to change the storage service

Final : be careful Keep application logic in one place Keep database logic in another place Separation of concern is good for cohesion and coupling

Benefits of expert Maintain encapsulation Supports low coupling Behavior distributed accross classes that have the required information High cohesion, Better reuse

Creator Pattern Who is responsible for creating new instances of some classes

Solution Assign class B the responsibility to create an instance of class A if one or more of the following is true: B aggregates A (simple aggregate; shared attributes) B contains A (composition; non-shared attributes) 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 (thus B is an Expert with respect to creating A) e.g. queue collection class; queue driver class; stack …. If more than one option applies, prefer a class B which aggregates or contains class A.

Creator Creation of objects is very common We have a State class and we create instances of State objects, or We have a CD class, and we create instances (an array?) of CD objects…. Creator results in low coupling, increased clarity, encapsulation and reusability

Creator Example Who is responsible for creating SalesLineItem

Sale aggregates SalesLineItems Sale is a good candidate to have the responsibility of creating SalesLineItems Seems very obvious

The sequence diagram helps

Benefits Creator connected to the created object Creator has the initializing data needed for the creation Cf Larman book Creator is a kind of expert

Creator Pattern Sometimes it is better to delegate creation to a helper Class The Factory pattern

Low Coupling Assign a responsibility to keep the coupling low Support low dependency, low change impact and increased use High coupling is not desirable Hard to change, understand, reuse

Example Register is coupled to payment

Alternative Payment known from Sale. Sale has to know Payment

Common form of coupling TypeX has an attribute that refers to TypeY TypeX instance call a service on a TypeY instance TypeX has a method that references an instance of TypeY (parameter, local variable) TypeX is a subclass of TypeY TypeY is an interface and TypeX implements it

High Cohesion Assign responsibility to keep cohesion high Measure of the relation between an element responsibilities Low cohesion mean Hard to comprehend, reuse and maintain

Example Register creates payment

Same alternative Register has less responsibilities – Higher cohesion

Scenarios (Booch94)

Controller Assign the responsibility for handling event message Facade Controller Use Case or Session controler This is not a UI class Who is responsible for handling input system event

Example

Two possibilities

The controller delegates It does not do the work by itself It coordinates/controls the activity

Allocation of operations

Issues Avoid bloated controllers (low cohesion) Add more controllers The controller delegates the responsibility to fulfill operation on to other objects.

Two couples

Creating a Sale

Enter an Item to the Sale

Making payment

Initialisation

Remember Low Coupling/High Cohesion Expert Creator Controller Not exactly patterns but strong guidelines.

More patterns (or principles) Polymorphism Indirection Pure Fabrication Protected Variation

Polymorphism When behavior vary by type assign the responsibility to the type for which the type vary. Corollary: Do not test for the type of an object and use conditional logic to perform varying alternatives based on type. How to create pluggable component ? How to handle alternatives based on types ?

Example : Multiple tax calculator

Final Very easy to extend and add variations New implementations can be added with affecting the client Do it only if there are known variations (no future proofing)

Pure Fabrication A class to save cohesion and coupling – a creation of imagination

Indirection Assign the responsibility to an intermediate object to mediate between component or services so that they are not directly coupled How to decouple objects to increase reuse.

Example : an adapter 

Finally Reduce coupling Protect from variations Indirections are often Pure Fabrication PersistenceStorage

Protected Variation Identify points of predicted variation and instability. Assign responsibilities to create a stable interface around them