03/12/2001 © bennett, mcrobb and farmer 2002 1 design patterns based on chapter 15 of bennett,...

32
03/12/2001 © Bennett, McRobb and Farmer 2002 1 Design Patterns Design Patterns Based on Chapter 15 of Bennett, McRobb and Farmer: Object Oriented Systems Analysis and Design Using UML, (2 nd Edition), McGraw Hill, 2002.

Post on 20-Dec-2015

227 views

Category:

Documents


0 download

TRANSCRIPT

03/12/2001 © Bennett, McRobb and Farmer 2002 1

Design PatternsDesign Patterns

Based on Chapter 15 of Bennett, McRobb and Farmer: Object Oriented Systems Analysis and Design Using UML, (2nd Edition), McGraw Hill, 2002.

© Bennett, McRobb and Farmer 2002 2

In This Lecture You Will In This Lecture You Will Learn:Learn:

What types of patterns have been identified in software development

How to apply design patterns during software development

The benefits and difficulties that may arise when using patterns

© Bennett, McRobb and Farmer 2002 3

Patterns vs. FrameworksPatterns vs. Frameworks

Frameworks are partially completed software systems that may be targeted at a specified type of application

However patterns– are more abstract and general than

frameworks– cannot be directly implemented in a

particular software environment– are more primitive than frameworks

© Bennett, McRobb and Farmer 2002 4

Catalogues & LanguagesCatalogues & Languages

A pattern catalogue is a group of patterns that are related to some extent and may be used together or independently of each other

The patterns in a pattern language are more closely related, and work together to solve problems in a specific domain

© Bennett, McRobb and Farmer 2002 5

Key PrinciplesKey Principles

Key principles that underlie patterns– abstraction– encapsulation– information hiding– modularization– separation of concerns

© Bennett, McRobb and Farmer 2002 6

Key PrinciplesKey Principles

– Coupling and cohesion– Sufficiency – Completeness and primitiveness– Separation of policy and implementation– Separation of interface and

implementation– Single point of reference – Divide and conquer

Buschmann et al. (1996)

© Bennett, McRobb and Farmer 2002 7

Non-functional PropertiesNon-functional Properties

Buschmann et al. (1996) identify the important non-functional properties of a software architecture

changeability interoperability efficiency reliability testability reusability

© Bennett, McRobb and Farmer 2002 8

Pattern TemplatePattern Template Name—meaningful that reflects the knowledge

embodied by the pattern Problem—description of the problem that the

pattern addresses (the intent of the pattern). Context—represents the circumstances or precon-

ditions under which it can occur. Forces—embodied in a pattern are the constraints

or issues that must be addressed by the solution Solution—description of the static and dynamic

relationships among the components of the pattern

© Bennett, McRobb and Farmer 2002 9

Other Aspects of TemplatesOther Aspects of Templates

An example of the use of a pattern that serves as a guide to its application

The context that results from the use of the pattern

The rationale that justifies the chosen solution

Related patterns

© Bennett, McRobb and Farmer 2002 10

Other aspects of TemplatesOther aspects of Templates Known uses of the pattern that validate it

(Some suggest that until the problem and its solution have been used successfully at least three times—the rule of three—they should not be considered as a pattern)

A list of aliases for the pattern (‘also known as’ or AKA)

Sample program code and implementation details (commonly used languages include C++, Java and Smalltalk)

© Bennett, McRobb and Farmer 2002 11

GOF Design PatternsGOF Design Patterns

Catalogue of 23 design patterns presented by Gamma et al. (1995) patterns known as Gang of Four—hence GOF Patterns

Classifies patterns as creational, structural or behavioural

Typically address issues concerning changeability, and involve several different aspects: maintainability, extensibility, restructuring and portability

© Bennett, McRobb and Farmer 2002 12

Creational PatternsCreational Patterns

Concerned with the construction of object instances

Separate the operation of an application from how its objects are created

Gives the designer considerable flexibility in configuring all aspects of object creation

© Bennett, McRobb and Farmer 2002 13

Creational Patterns: Creational Patterns: SingletonSingleton

How does one ensure that only one instance of the company class is created?

Company

companyName

companyAddress

companyRegistrationNumber

getCompanyDetails( )

© Bennett, McRobb and Farmer 2002 14

Creational Patterns: Creational Patterns: SingletonSingleton

Solution—restrict access to the constructor!

Company

- companyInstance

- companyName

- companyAddress

- companyRegistrationNumber

+ getCompanyInstance( )

+ getCompanyDetails( )

Class-scope (or static) attribute

(or static) operation

- Company( ) Private constructor

The use of class-scope operations allows global access

Class-scope

© Bennett, McRobb and Farmer 2002 15

Creational Patterns: Creational Patterns: SingletonSingleton

Company

- companyInstance

- companyName

- companyAddress

+ getCompanyInstance( )

+ getCompanyDetails( )

- Company( )

+ getCompanyDetails( ):String- UkCompany( ):UkCompany

- companyRegistrationNumber

UKCompany

+ getCompanyDetails( ):String- USACompany( ):USACompany

- companyRegistrationNumber

USACompany

+ getCompanyDetails( ):String- FrenchCompany( ):FrenchCompany

- companyRegistrationNumber

FrenchCompany

The attribute companyRegistrationNumber

has been moved to the subclasses where it is defined

differently in each.

The operation getCompanyDetails()

has been moved to the subclasses where it is

polymorphically redefined in each.

•Different subclasses of Company can be instantiated as needed, depending on run-time circumstances

© Bennett, McRobb and Farmer 2002 16

Creational Patterns: Creational Patterns: SingletonSingleton

+ getInstance( )

Singleton

- uniqueInstance

- singletonData

+ getSingletonData( )

+ singletonOperation( )

- Singleton( )

Holds object identifier for the Singleton instance

Returns object identifier for the unique instance

Private constructor —only accessible via getInstance()

General form of Singleton pattern

© Bennett, McRobb and Farmer 2002 17

Structural PatternsStructural Patterns

Concerned with the way in which classes and objects are organized

Offer effective ways of using object-oriented constructs such as inheritance, aggregation and composition to satisfy particular requirements

© Bennett, McRobb and Farmer 2002 18

Structural Patterns: Structural Patterns: CompositeComposite

MediaClip

play( )

VideoClip

play( )

SoundClip

play( )

• How can we present the same interface for a media clip whether it is composite or not?

© Bennett, McRobb and Farmer 2002 19

Structural Patterns: Structural Patterns: CompositeComposite

Delegates to the play()

operation in the

components.

play() is

polymorphically

redefined

VideoClip

play( )

SoundClip

play( )

AdSequence

play( )

addClip( )

removeClip( )

getChild( )

* *

1

How can we incorporate composite structures?

© Bennett, McRobb and Farmer 2002 20

Composite applied to AgateComposite applied to Agate

Collection of MediaClip

object identifiers

for all m in mediaClipCollection

m.play()

Delegates to the play()

operation in the

components.

play() is

polymorphically

redefined

AdSequence

mediaClipCollection

play( )

addClip( )

removeClip( )

getChild( )

changeSequence( )

*

1

MediaClip

play( )

addClip( )

removeClip( )

getChild( )

VideoClip

play( )

SoundClip

play( )

Advert

{Ordered}

© Bennett, McRobb and Farmer 2002 21

Composite Pattern Composite Pattern General FormGeneral Form

anOperation( )

addComponent( )

removeComponent( )

getChild( )

Collection of Component

object identifiers

for all c in componentCollection

c.anOperation()

Delegates to the anOperation()

operation in the

components.

anOperation() is

polymorphically

redefined

Composite

componentCollection

anOperation( )

addComponent( )

removeComponent( )

getChild( )

*

1

Component

Leaf

anOperation( )

OtherLeaf

anOperation( )

Client{Ordered}

© Bennett, McRobb and Farmer 2002 22

Behavioural PatternsBehavioural Patterns

Address the problems that arise when assigning responsibilities to classes and when designing algorithms

Suggest particular static relationships between objects and classes and also describe how the objects communicate

© Bennett, McRobb and Farmer 2002 23

Behavioural Patterns: StateBehavioural Patterns: State

Consider the class Campaign. It has four states—Commissioned, Active, Completed and Paid

A Campaign object has different behaviour depending upon which state it occupies

Operations have case statements giving this alternative behaviour

The class factored into separate components —one for each of its states

© Bennett, McRobb and Farmer 2002 24

Behavioural Patterns: StateBehavioural Patterns: State

Contains the object identifier of the current state object

CampaignState

addAdvert( )

calcCosts( )

Commissioned

addAdvert( )

calcCosts( )

Campaign

currentStateIdentifier

addAdvert( )

changeState( )

calcCosts( )

Active

addAdvert( )

calcCosts( )

Completed

addAdvert( )

calcCosts( )

Paid

addAdvert( )

calcCosts( )

State pattern applied to the class Campaign

© Bennett, McRobb and Farmer 2002 25

Behavioural Patterns: StateBehavioural Patterns: State

A:Campaign

B:Campaign

D:Campaign C:Campaign

:Commissioned

:Active

:Completed

:Paid

E:Campaign F:Campaign

Some State pattern objects for Agate – note that there are 6 Campaign objects sharing the four State objects.

© Bennett, McRobb and Farmer 2002 26

General form of State General form of State PatternPattern

State

operation( )

ConcreteStateA

operation( )

ConcreteStateB

operation( )

Context

operation( )

© Bennett, McRobb and Farmer 2002 27

Before Using PatternsBefore Using Patterns Before using a pattern to resolve

the problem ask– Is there a pattern that addresses a similar

problem?– Does the pattern trigger an alternative

solution that may be more acceptable?– Is there a simpler solution? Patterns should

not be used just for the sake of it

© Bennett, McRobb and Farmer 2002 28

Before Using PatternsBefore Using Patterns

– Is the context of the pattern consistent with that of the problem?

– Are the consequences of using the pattern acceptable?

– Are there constraints imposed by the software environment that would conflict with the use of the pattern?

© Bennett, McRobb and Farmer 2002 29

Using PatternsUsing Patterns

After selecting a suitable pattern1. Read the pattern to get a complete

overview2. Study the Structure, Participants and

Collaborations of the pattern in detail3. Examine the Sample Code to see an

example of the pattern in use

© Bennett, McRobb and Farmer 2002 30

Using PatternsUsing Patterns

4. Choose names for the pattern’s participants (i.e. classes) that are meaningful to the application

5. Define the classes6. Choose application specific names for the

operations7. Implement operations that perform the

responsibilities and collaborations in the pattern

© Bennett, McRobb and Farmer 2002 31

SummarySummary

In this lecture you have learned about: What types of patterns have been

identified in software development How to apply design patterns during

software development The benefits and difficulties that may

arise when using patterns

© Bennett, McRobb and Farmer 2002 32

ReferencesReferences

Gamma et al. (1995) (For full bibliographic details, see

Bennett, McRobb and Farmer)