0% found this document useful (0 votes)
7 views

2 Patterns Overview

The document discusses how to become a master software developer by leveraging design patterns and recurring design structures. It introduces patterns as a way to capture proven design experiences and describes how patterns can help make software more robust to changes.

Uploaded by

ims
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views

2 Patterns Overview

The document discusses how to become a master software developer by leveraging design patterns and recurring design structures. It introduces patterns as a way to capture proven design experiences and describes how patterns can help make software more robust to changes.

Uploaded by

ims
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 28

Overview of Patterns

Douglas C. Schmidt
[email protected]
www.dre.vanderbilt.edu/~schmidt

Professor of Computer Science


Institute for Software
Integrated Systems

Vanderbilt University
Nashville, Tennessee, USA
Overview of Patterns Douglas C. Schmidt

Topics Covered in this Module


• Motivate the importance of
design experience & leveraging
recurring design structure to
become a master software
developer

2
Overview of Patterns Douglas C. Schmidt

Topics Covered in this Module


• Motivate the importance of Subject Observer
design experience & leveraging state
* update

recurring design structure to observerList


state = X;
become a master software setData notify();
getData
developer notify ConcreteObserver
attach update
• Introduce patterns as a means detach doSomething

of capturing & applying proven for all observers


design experience that makes in observerList do
update()
s->getData()

software more robust to change

3
Overview of Patterns Douglas C. Schmidt

Topics Covered in this Module


• Motivate the importance of
design experience & leveraging
recurring design structure to
become a master software
developer
• Introduce patterns as a means
of capturing & applying proven
design experience that makes
software more robust to change
• Describe a process for
successfully applying patterns
to software development
projects
4
Overview of Patterns Douglas C. Schmidt

Becoming a Master Software Developer


• Software methods emphasize design notations, such as UML
• Fine for specification & documentation

5
Overview of Patterns Douglas C. Schmidt

Becoming a Master Software Developer


• Software methods emphasize design notations, such as UML
• Fine for specification & documentation
• But software is more than drawing diagrams
• Good draftsmen are not necessarily
good architects!

6
Overview of Patterns Douglas C. Schmidt

Becoming a Master Software Developer


• Software methods emphasize design notations, such as UML
• Fine for specification & documentation
Subject Observer
state * update

• But software is more than drawing diagrams


observerList
state = X;
setData notify();
getData
• Good draftsmen are not necessarily notify
attach
ConcreteObserver
update

good architects! detach doSomething

for all observers


• Good software developers rely on design experience inupdate()
observerList do s->getData()

• At least as important as knowledge of programming languages

7
Overview of Patterns Douglas C. Schmidt

Becoming a Master Software Developer


• Software methods emphasize design notations, such as UML
• Fine for specification & documentation
Subject Observer
state * update

• But software is more than drawing diagrams


observerList
state = X;
setData notify();
getData
• Good draftsmen are not necessarily notify
attach
ConcreteObserver
update

good architects! detach doSomething

for all observers


• Good software developers rely on design experience inupdate()
observerList do s->getData()

• At least as important as knowledge of programming languages


• Design experience can be codified via design & code reuse
• Design reuse: Match problem(s) to design
experience & best practices
• Code reuse: Reify proven designs within
a particular set
of domains &
development
environments

8
Overview of Patterns Douglas C. Schmidt

Leveraging Recurring Design Structures


Well-designed software systems exhibit recurring structures that promote
• Abstraction
• Flexibility
• Reuse
• Quality
• Elegance
• Modularity
Therein lies valuable design knowledge

Challenge: extracting, documenting,


communicating, applying, & preserving
this knowledge without undue time,
effort, & risk in the face of continual
change to the software!

9
Overview of Patterns Douglas C. Schmidt

Making Software that’s Robust to Changes


• Change is intrinsic to software development as requirements, use-cases,
technologies, platforms, & quality goals evolve
• Robustness to change means that software can be modified locally without
endangering overall structure
• It is a quality that
reflects ease of evolution
& maintenance costs

What is needed is a means


to address particular design
aspects of software & allow
controlled variation &
evolution of these aspects

10
Overview of Patterns Douglas C. Schmidt

Key to Mastery: Knowledge of Software Patterns


• A patterns describes solution(s) to common problem(s) arising within a
context by
• Naming a recurring design structure

Jug
Handle
pattern

11
Overview of Patterns Douglas C. Schmidt

Key to Mastery: Knowledge of Software Patterns


• A patterns describes solution(s) to common problem(s) arising within a
context by
Subject
• Naming a recurring design structure
Observer

ConcreteObserver
Observer
pattern

“define a one-to-many dependency


between objects so that when one
object changes state, all
dependents are notified & updated”

12
Overview of Patterns Douglas C. Schmidt

Key to Mastery: Knowledge of Software Patterns


• A patterns describes solution(s) to common problem(s) arising within a
context by
Subject
• Naming a recurring design structure
Observer
* update
state
• Specifying design structure explicitly observerList state = X;
notify();
by identifying key classes/objects* setData
ConcreteObserver
getData
• Roles & relationships notify Observer update
pattern
attach doSomething
• Dependencies detach

• Interactions for all observers


in observerList do s->getData()
• Conventions update()

*Interpret “class” & “object” loosely: patterns


13 are for more than OO languages!
Overview of Patterns Douglas C. Schmidt

Key to Mastery: Knowledge of Software Patterns


• A patterns describes solution(s) to common problem(s) arising within a
context by
Subject
• Naming a recurring design structure
Observer
* update
state
• Specifying design structure explicitly observerList state = X;
notify();
by identifying key classes/objects setData
ConcreteObserver
getData
• Roles & relationships notify Observer update
pattern
attach doSomething
• Dependencies detach

• Interactions for all observers


in observerList do s->getData()
• Conventions update()

• Abstracting from concrete design


elements, e.g., problem domain,
programming language, vendor, etc.

14
Overview of Patterns Douglas C. Schmidt

Key to Mastery: Knowledge of Software Patterns


• A patterns describes solution(s) to common problem(s) arising within a
context by
Subject
• Naming a recurring design structure
Observer
* update
state
• Specifying design structure explicitly observerList state = X;
notify();
by identifying key classes/objects setData
ConcreteObserver
getData
• Dependencies notify Observer update
pattern
attach doSomething
• Roles & Relationships detach

• Interactions for all observers


in observerList do s->getData()
• Conventions update()

• Abstracting from concrete design


elements, e.g., problem domain,
programming language, vendor, etc.
• Distilling & codifying knowledge gleaned
from successful design experience

15
Overview of Patterns Douglas C. Schmidt

Common Characteristics of Patterns


• They are independent of
programming languages &
implementation techniques

16
Overview of Patterns Douglas C. Schmidt

Common Characteristics of Patterns


• They are independent of Subject Observer
programming languages & * update
implementation techniques state
observerList
• They define “micro-architectures” state = X;
setData notify();
• i.e., a “society of objects” getData
notify ConcreteObserver
attach update
detach doSomething

for all observers


in observerList do s->getData()
update()

17
Overview of Patterns Douglas C. Schmidt

Common Characteristics of Patterns


• They are independent of public class EventHandler extends Observer {
programming languages & public void update(Observable obj,
implementation techniques Object arg)
{ /* … */ }
• They define “micro-architectures” …
• i.e., a “society of objects” public class EventSource extends Observable,
implements Runnable {
• They aren’t code or (concrete) public void run()
designs, so they must be reified { /* … */ notifyObservers(/* … */); }
& applied in particular languages …
EventSource eventSource =
new EventSource();
EventHandler eventHandler =
Observer new Event_Handler();
pattern in Java eventSource.addObserver(eventHandler);
Thread thread = new Thread(eventSource);
thread.start();

18
Overview of Patterns Douglas C. Schmidt

Common Characteristics of Patterns


• They are independent of class Event_Handler : public Observer { public:
programming languages & virtual void update(Observable obj,
implementation techniques Object arg)
{ /* … */ }
• They define “micro-architectures” …
• i.e., a “society of objects”class Event_Source : public Observable,
public Runnable { public:
• They aren’t code or (concrete) virtual void run()
designs, so they must be reified { /* … */ notify_observers(/* … */); }
& applied in particular languages …
Event_Source event_source =
Observer pattern in C++ new Event_Source_Impl;
(uses the GoF Bridge pattern Event_Handler event_handler =
with reference counting to new Event_Handler_Impl;
simplify memory event_source->add_observer(event_handler);
management & ensure Thread thread = new Thread(event_source);
exception-safe semantics) thread->start();

19
Overview of Patterns Douglas C. Schmidt

Common Characteristics of Patterns


• They are independent of
programming languages &
implementation techniques
• They define “micro-architectures”
• i.e., a “society of objects”
• They aren’t code or (concrete)
designs, so they must be reified
& applied in particular languages
• They are not methods, but can be used
an adjunct to other methods
• e.g., Rational Unified Process, Agile, etc.
• There are also patterns for organizing
effective software development teams &
navigating other complex settings

20
Overview of Patterns Douglas C. Schmidt

Common Parts of a Pattern Description


• Name & statement of pattern intent
• Problem addressed by pattern
• Including “forces” & “applicability”
• Solution
• Visual & textual descriptions of
pattern structure & dynamics
• Consequences
• Pros & cons of applying the pattern
• Implementation guidance
• May include source code examples
• Known uses
• “rule of three”
• Related patterns
• Tradeoffs between alternative patterns
21for more info on pattern forms
See c2.com/cgi/wiki?PatternForms
Overview of Patterns Douglas C. Schmidt

Process for Applying Patterns


• To apply patterns successfully,
software developers need to:
• Have broad knowledge of patterns
relevant to their domain(s)

22
Overview of Patterns Douglas C. Schmidt

Process for Applying Patterns


• To apply patterns successfully,
software developers need to:
• Have broad knowledge of patterns
relevant to their domain(s)
• Evaluate trade-offs & impact of using Template
certain patterns in their software Method
pattern

Strategy
pattern

23
Overview of Patterns Douglas C. Schmidt

Process for Applying Patterns


• To apply patterns successfully,
software developers need to: Content Content
• Have broad knowledge of patterns Observable Observer
* onChange
relevant to their domain(s) state
observerList
• Evaluate trade-offs & impact of using
certain patterns in their software registerObserver
unregisterObserver
notifyChange
• Make design & implementation EventHandler

decisions about how best to apply onChange



the selected patterns for all observers
in observerList do
onChange()
• Patterns may require slight
modifications for particular contexts
One use of the Observer
Pattern in Android

24
Overview of Patterns Douglas C. Schmidt

Process for Applying Patterns


• To apply patterns successfully,
software developers need to:
Context Broadcast
• Have broad knowledge of patterns Receiver
* onReceive
relevant to their domain(s) state
observerList
• Evaluate trade-offs & impact of using
certain patterns in their software registerReceiver
unregisterReceiver
sendBroadcast
• Make design & implementation BroadcastHandler

decisions about how best to apply onReceive



the selected patterns for all observers
in observerList do
onReceive()
• Patterns may require modifications
for particular contexts
A different use of the
Observer Pattern in Android

25
Overview of Patterns Douglas C. Schmidt

Process for Applying Patterns


• To apply patterns successfully, If (uniqueInstance == 0)
software developers need to: uniqueInstance =
new Singleton;
return uniqueInstance;
• Have broad knowledge of patterns
relevant to their domain(s) Singleton pattern vs.
• Evaluate trade-offs & impact of using Double-Checked
Locking Optimization
certain patterns in their software
Pattern
class Singleton {
• Make design & implementation public:
decisions about how best to apply static Singleton *instance () {
// First check
the selected patterns if (instance_ == 0) {
Guard<Thread_Mutex> g(lock_);
• Patterns may require modifications if (instance_ == 0) // Double check
instance_ = new Singleton;
for particular contexts }
return instance_;
}
private:
static Singleton *instance_;
static Thread_Mutex lock_;
};

26
Overview of Patterns Douglas C. Schmidt

Process for Applying Patterns


• To apply patterns successfully,
software developers need to:
• Have broad knowledge of patterns
relevant to their domain(s)
• Evaluate trade-offs & impact of using
certain patterns in their software
• Make design & implementation
decisions about how best to apply
the selected patterns
• Patterns may require modifications
for particular contexts
• Combine with other patterns &
implement/integrate with code

27
Overview of Patterns Douglas C. Schmidt

Summary
• Patterns support • Patterns can be applied in all
• Design at a more abstract level software lifecycle phases
• Treat many class/object • Analysis, design, & reviews
interactions as a conceptual unit • Implementation &
• Emphasize design qua design, not documentation
(obscure) language features • Testing & optimization
• Provide ideal targets for design • Reuse & refactoring
refactoring • Resist urge to brand everything as
• Variation-oriented design process a pattern
1. Determine which design elements • Articulate specific benefits &
can vary demonstrate general
2. Identify applicable pattern(s) applicability
3. Vary patterns & evaluate trade-offs • e.g., find three different
existing examples from code
4. Repeat…
other than your own!

28 but can apply to non-OO languages


Patterns often equated with OO languages,

You might also like