03/12/2001 © bennett, mcrobb and farmer 2002 1 design patterns based on chapter 15 of bennett,...
Post on 20-Dec-2015
227 views
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