DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

52
DESIGN PATTERNS NOTES

Transcript of DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Page 1: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

DESIGN PATTERNS

NOTES

Page 2: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Design Patterns:

Elements of Reusable Object – Oriented Software

Page 3: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Design Pattern Introduction: why a design pattern?

History of design pattern

What is a design pattern

How we describe design pattern

Classification of desing pattern

Examples of design pattern

Conclusions

Bibliography

Page 4: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Why a Design Pattern

Reusability:one of Wasserman’s rules(1996)for an efficient and actual SE discipline

Helping new designers to have a more flexible and reusable design

Improving the documentation and maintenance of existing system by furnishing an explicit specification of class and object interactions and their intent

Page 5: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

History of Design Pattern

1979:Christopher Alexander,architect, “The Timeless Way of Building”,Oxford Press

1987:OOPSLA (Object Oriented Programming System),Orlando, presentation of design pattern to the community OO by Ward Cunningham and Kent Beck

1995:Group of Four alias E.Gamma, R.Helm,R.Johnson and J.Vlissides : “Design Pattern:Elements of Reusable OO software”

Page 6: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

What Is a Design PatternA design pattern is a descriptions of communicating

objects and classes that are customized to solve a general design problem in a particular context

A pattern is made by four elements:nameproblemsolutionconsequences

Page 7: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Name of Design Pattern

Describe a design problems and its solutions in a word or two

Used to talk about design pattern with our colleagues

Used in the documentation

Increase our design vocabulary

Have to be coherent and evocative

Page 8: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Problem

Describes when to apply the patterns

Explains the problem and its context

Sometimes include a list of conditions that must be met before it makes sense to apply the pattern

Have to occurs over and over again in our environment

Page 9: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Solution

Describes the elements that make up the design, their relationships, responsibilities and collaborations

Does not describe a concrete design or implementation

Has to be well proven in some projects

Page 10: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Consequences

Results and trade-offs of applying the pattern

Helpful for describe design decisions, for evaluating design alternatives

Benefits of applying a pattern

Impacts on a system’s flexibility,extensibility or portability

Page 11: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Description of Design Pattern Pattern name and classificationPattern name and classification

contains the essence of pattern succinctly

Become part of your design vocabulary

IntentIntentWhat does the pattern do ?

What particular problem does it address ?

Page 12: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Description of Design Pattern

MotivationMotivationIllustrate a design problem and how the class and the object structures solve the

problem

ApplicabilityApplicabilityIn which situations the pattern can be applied?

How can you recognize these situations?

Page 13: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Description of Design Pattern

StructureStructureGraphical representation of the classes and their collaborations in the

pattern

ParticipantsParticipantsClass

Objects

Responsibilities

Page 14: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Description of Design PatternCollaborationsCollaborations

How the participants collaborate to carry out their responsibilities

ConsequencesConsequencesHow does the pattern support its objectives?

What are the trade-offs and results of using the pattern?

Page 15: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Description of Design Pattern

ImplementationImplementation

Sample CodeSample Code

Known UsesKnown UsesExamples of the pattern found in real systems

Page 16: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Description of Design Pattern

Related PatternsRelated PatternsWhat design patterns are closely related to this one?

What are the important differences?

Page 17: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

By purpose and by scope

Creational patternsCreational patterns

Abstract the instantiation process

Make a system independent to its realization

Class Creational use inheritance to vary the instantiated classes

Object Creational delegate instantiation to an another object

Classification of Design Pattern

Page 18: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Classification of Design Pattern Structural patternsStructural patterns

Class Structural patterns concern the aggregation of classes to form largest structures

Object Structural pattern concern the aggregation of objects to form largest structures

Page 19: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Classification of Design Pattern Behavioral patternsBehavioral patterns

Concern with algorithms and assignment of responsibilities between objects

Describe the patterns of communication between classes or objects

Behavioral class pattern use inheritance to distribute behavior between classes

Behavioral object pattern use object composition to distribute behavior between classes

Page 20: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Classification of design patterns ( a view)

InterpreterAdapterFactory Method

Visitor

Strategy

StateProxy

ObserverFlyweight

MementoFaçade

MediatorDecoratorSingleton

IteratorCompositePrototype

CommandBridgeBuilder

Chain of Responsibility

AdapterAbstract Factory

Template Method

BehavioralBehavioralStructuralStructuralCreationalCreational

ObjectObject

ClassClass

purpose

Scope

Page 21: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Creational Pattern

SingletonEnsure a class only has one instance

Provide a global point of access to it

Abstract Factory:Provide an interface for creating families of related or dependent objects

without specifying their concrete classes

Page 22: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Creational PatternFactory Method:

Define an interface for creating an object but let subclasses decide which class to instantiate

Lets a class defer instantiation to subclasses

Prototype Specify the kinds of objects to create using a prototypical instance

Create new objects by copying this prototype

Page 23: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Creational Pattern

Builder:Separate the construction of a complex object from its representation so that the

same construction process can create different representations

Page 24: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Structural PatternComposite

Compose objects into tree structures to represent part-whole hierarchies

Lets clients treat individual objects and compositions of objects uniformly

DecoratorAttach additional responsibilities to an object dynamically

Provide a flexible alternative to subclassing for extending functionality

Page 25: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Structural Pattern

Adapter:Convert the interface of a class into another interface clients expectLets classes work together that couldn’t otherwise because of incompatible

interfaces

Bridge:Decouple an abstraction from its implementation so that the two can vary

independently

Page 26: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Structural PatternFaçade

Provide a unified interface to a set of interfaces in a subsystem

Defines an higher-level interface that makes the system easier to use

FlyweightUse sharing to support large numbers of fine-grained objects efficiently

Page 27: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Structural Pattern

ProxyProvide a surrogate or placeholder for another object to control access to it

Page 28: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Behavioral PatternIterator

Provide a way to access the elements of an aggregate object without exposing its representation

CommandEncapsulate a request as an object, thereby letting you parameterize clients

with different requests

Page 29: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Behavioral PatternInterpreter

Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language

MediatorDefine an object that encapsulate how a set of objects interact

Promotes loose coupling by keeping objects from referring to each other explicitly

Lets you vary their interaction independently

Page 30: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Behavioral PatternMemento

Capture and externalize an object’s internal state

ObserverDefine a one-to-many dependency between objects so when one of them

change state all its dependents are updated automatically

Page 31: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Behavioral PatternState

Allow an object to alter its behavior when its internal state changes

The object will appear to change its class

VisitorRepresent an operation to be performed on the elements of an object

structure

Lets you define a new operation without changing the classes of the elements on which operates

Page 32: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Behavioral PatternStrategy

Define a family of algorithms

Encapsulate each one

Make them interchangeable

Lets the algorithms vary independently from clients that use it

Chain of responsibilitiesAvoid coupling the sender of a request to its receiver by giving more then one

object a chance to handle the request

Chain the receiving objects and pass the request along the chain until an object handles it

Page 33: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Singleton PatternMotivation

we need to have exactly only one instance for a class (ex. Printer spooler)

Make the class itself responsible for keeping track of its sole instance

The class provide a way to access the instance

ApplicabilityThere must be only one instance of a class accessible from a well-known

point

Page 34: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Singleton PatternStructure

Singleton

Static Instance()SingletonOperation()GetSingletonData()

Static uniqueInstanceSingletonData

Return uniqueInstance

Page 35: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Singleton PatternParticipants

Singleton class

CollaborationsAccess only through Singleton’s instance operation

ConsequencesControlled access to sole instance

Permits refinement of operation and representation

More flexible than class operations

Page 36: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Example of Singleton use“Lotteria Algebrica”

We had to have only one instance for class Director. We simply solve our problem using Singleton PatternDirector

Static Instance()Given(n_ticket:int):void

Error():void

Static UniqueInstance

Page 37: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Decorator PatternMotivation

Add responsibilities to individual object not to an entire class

conforming the interface of the component decorated

Page 38: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Decorator PatternStructure Component

Operation()

ConcreteComponent

Operation()

Decorator

Operation()

ConcreteDecoratorAOperation()AddedState

ConcreteDecoratorBOperation()

Addedbehavior

Page 39: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Decorator PatternParticipants

ComponentDefine the interface for objects that can have responsibilities

added to them dinamically

Concrete ComponentDefines an object to which additional responsibilities can be

attached

Decorator Mantains a reference to a Component object and defines an

interface that conforms to Component’s interface

ConcreteDecoratorAdded responsibilities to the component

Page 40: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Decorator PatternConsequences

More flexibility than static inheritance

Avoids feature-laden classes high up in the hierarchy

A decorator and its component are not identical

Lots of little objects

Page 41: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Example of Decorator

MotivationIf you have a TextView object that displays text in a Window

TextView has no scroll bars by default

TextView has no bord by default …

Page 42: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Example of DecoratorStructure

aBorderDecorator

component

aScrollDecorator

component

aTextView

Page 43: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Example of DecoratorStructureVisualComponent

Draw()

TextView

Draw()

Decorator

Draw()

ScrollDecorator BorderDecorator

Draw()ScrollTo()

ScrollPosition

Draw()DrawBorder()

BorderWidth

Page 44: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Iterator PatternAlso know as

Cursor

MotivationProvide more way to access to the elements of an aggregate

List

Count()Append(Element)Remove(Element)

ListIterator

First()Next()

IsDone()CurrentItem

Index

Page 45: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Iterator Pattern

ApplicabilityAccess an aggregate object’s contents

Support multiple traversals of aggregate objects

Provide an uniform interface

Page 46: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Iterator PatternStructureAggregate

CreateIterator()

ConcreteAggregate

CreateIterator()

Iterator

First()Next()

IsDone()CurrentItem()

ConcreteIterator

Return newConcreteIterator(This)

Client

Page 47: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Iterator PatternParticipants

IteratorDefines interfaces for accessing elements

ConcreteIteratorImplements the Iterator interface

Keeps track of the current position in the traversal of the aggregate

AggregateDefines an interface for creating an Iterator object

Concrete AggregateImplements the Iterator creation interface

Return an instance of ConcreteIterator

Page 48: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Iterator PatternConsequences

Simplify the Aggregate interface

More that one traversal can be pending on an aggregate

Variations in the traversal of an aggregate

Page 49: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

Patterns and Frameworks

Design patterns are more abstract than frameworks

Design patterns are smaller architectural elements than frameworks

Design patterns are less specialized than frameworks

Framework is executable software, design pattern represent knowledge about software

Frameworks are the physical realization of one or more software pattern solutions,pattern are instructions for how to implement those solutions

Set of cooperating classes that make up reusable design for a specific class of software. Provides

architectural guidance by partitioning the design into abstract classes and defining their responsibilities

and collaborations.A developer customizes a framework to a particular application by subclassing and composing instances

of framework classes.

Page 50: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

ConclusionsAt present, the software community is using pattern

largely for software architecture and design

More recently the software community is using pattern also for software development processes and o organizations

Several object-oriented software design notations/methods have added support for the modeling and representation of design patterns

Page 51: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

BibliographyFor the pattern catalogue:

Erich Gamma, Richard Helm,Ralph Johnson,John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. ADDISON-WESLEY 1995

For the pattern origin:

Cristopher Alexander. The Timeless Way of Building. Oxford Press 1979

For “Night Patterns”:

James O.Coplien,Douglas C.Schmidt.Pattern Languages of Program Design. ADDISON-WESLEY 1995

Page 52: DESIGN PATTERNS NOTES. Design Patterns: Elements of Reusable Object – Oriented Software.

More InformationHere you can find some example in Italian of design patterns.

http://www.ugolandini.net/PatternsHome.htmlHere you can find some general information about patterns

http://www.mokabyte.it/1998/10/pattern.htm

http://www.c2.comA complete Web site about pattern

http://www.enteract.com/~bradapp/docs/patterns-intro.html