ppt

advertisement
91.204.201
Computing IV
Introduction to Design Pattern
Xinwen Fu
Outline
Introduction to Pattern
 Gang of Four Design Pattern
 Adapter Pattern
 Introduction to UML

By Dr. Xinwen Fu
CS@UML
2
What is a Pattern?

Current use comes from the work of the architect
Christopher Alexander

Alexander studied ways to improve the process of
designing buildings and urban areas

“Each pattern is a three-part rule, which expresses a
relation between


Hence, the common definition of a pattern:


a certain context, a problem and a solution.”
“A solution to a problem in a context.”
Patterns can be applied to many different areas of
human endeavor, including software development
By Dr. Xinwen Fu
CS@UML
3
Pattern of Porches
Classical House Styles
American Colonial Styles
Victorian House Styles
CS@UML
Spanish and Mediterranean
By Dr. Xinwen Fu
4
Why Patterns?

"Designing object-oriented software is hard and
designing reusable object-oriented software is even
harder." - Erich Gamma

Experienced designers reuse solutions that have
worked in the past

Well-structured object-oriented systems have
recurring patterns of classes and objects

Knowledge of the patterns that have worked in the
past allows a designer to be more productive and the
resulting designs to be more flexible and reusable
By Dr. Xinwen Fu
CS@UML
5
Software Patterns History

1987 - Cunningham and Beck used Alexander’s ideas to
develop a small pattern language for Smalltalk

1990 - The Gang of Four (Gamma, Helm, Johnson and
Vlissides) begin work compiling a catalog of design patterns

1991 - Bruce Anderson gives first Patterns Workshop at
OOPSLA

1993 - Kent Beck and Grady Booch sponsor the first meeting
of what is now known as the Hillside Group

1994 - First Pattern Languages of Programs (PLoP) conference

1995 - The Gang of Four (GoF) publish the Design Patterns
book
By Dr. Xinwen Fu
CS@UML
6
Types of Software Patterns

Riehle and Zullighoven in “Understanding and Using
Patterns in Software Development” mention three types of
software patterns

Conceptual Pattern


Design Pattern


Pattern whose form is described by means of terms and concepts
from the application domain
Pattern whose form is described by means of software design
constructs, such as objects, classes, inheritance and aggregation
Programming Pattern (Programming Idiom)

Pattern whose form is described by means of programming
language constructs
By Dr. Xinwen Fu
CS@UML
7
Design Pattern: Levels of Abstraction

Complex design for an entire application
or subsystem - Conceptual Pattern

Solution to a general design problem in a
particular context - Design Pattern

Simple reusable design class such as a
linked list, hash table, etc. - Programming
Pattern
By Dr. Xinwen Fu
CS@UML
8
Outline
Introduction to Pattern
 Gang of Four Design Pattern
 Adapter Pattern
 Introduction to UML

By Dr. Xinwen Fu
CS@UML
9
GoF Design Patterns

The GoF design patterns are in the middle of
these levels of abstraction

“A design pattern names, abstracts, and
identifies key aspects of a common design
structure that makes it useful for creating a
reusable object-oriented design.”

The GoF design patterns are “descriptions of
communicating objects and classes that are
customized to solve a general design problem
in a particular context.”
By Dr. Xinwen Fu
CS@UML
10
GoF Classification Of Design Patterns

Purpose - what a pattern does

Creational Patterns


Structural Patterns


Concern the process of object creation
Deal with the composition of classes and objects
Behavioral Patterns

Deal with the interaction of classes and objects
By Dr. Xinwen Fu
CS@UML
11
Purpose
Design Pattern
Aspect(s) That Can Vary
Creational
Abstract Factory (99)
families of product objects
Builder (110)
how a composite object gets created
Factory Method (121)
subclass of object that is instantiated
Prototype (133)
class of object that is instantiated
Singleton (144)
the sole instance of a class
Adapter (157)
interface to an object
Bridge (171)
implementation of an object
Composite (183)
structure and composition of an object
Decorator (196)
responsibilities of an object without subclassing
Facade (208)
interface to a subsystem
Flyweight (218)
storage costs of objects
Proxy (233)
how an object is accessed; its location
Chain of Responsibility
(251)
object that can fulfill a request
Command (263)
when and how a request is fulfilled
Interpreter (274)
grammar and interpretation of a language
Iterator (289)
how an aggregate's elements are accessed, traversed
Mediator (305)
how and which objects interact with each other
Memento (316)
what private information is stored outside an object, and when
Observer (326)
number of objects that depend on another object; how the dependent
objects stay up to date
State (338)
states of an object
Strategy (349)
an algorithm
Template Method (360)
steps of an algorithm
Structural
Behavioral
CS@UML Visitor (366)
operations that can be applied to object(s) without changing their class(es)
Online Materials

Design Patterns

Erich Gamma, Richard Helm, Ralph
Johnson, and John Vlissides, Design
Patterns: Elements of Reusable ObjectOriented Software, Addison Wesley.
October 1994.
By Dr. Xinwen Fu
CS@UML
13
Iterator
By Dr. Xinwen Fu
CS@UML
14
Outline
Introduction to Pattern
 Gang of Four Design Pattern
 Adapter Pattern
 Introduction to UML

By Dr. Xinwen Fu
CS@UML
15
C++ Example
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
#include <iostream.h>
using namespace std;
typedef int Coordinate;
typedef int Dimension;
// Desired interface
class Rectangle {
public:
virtual void draw() = 0;
};
// Legacy component
class LegacyRectangle {
public:
LegacyRectangle(Coordinate x1, Coordinate y1, Coordinate x2, Coordinate y2) {
x1_ = x1;
y1_ = y1;
x2_ = x2;
y2_ = y2;
cout << "LegacyRectangle: create. (" << x1_ << "," << y1_ << ") => ("
<< x2_ << "," << y2_ << ")" << endl;
}
By Dr. Xinwen Fu
CS@UML
16
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
void oldDraw() {
cout << "LegacyRectangle: oldDraw. (" << x1_ << "," << y1_ <<
") => (" << x2_ << "," << y2_ << ")" << endl;
}
private:
Coordinate x1_;
Coordinate y1_;
Coordinate x2_;
Coordinate y2_;
};
// Adapter wrapper
class RectangleAdapter: public Rectangle, private LegacyRectangle {
public:
RectangleAdapter(Coordinate x, Coordinate y, Dimension w, Dimension h):
LegacyRectangle(x, y, x + w, y + h) {
cout << "RectangleAdapter: create. (" << x << "," << y <<
"), width = " << w << ", height = " << h << endl;
}
virtual void draw() {
cout << "RectangleAdapter: draw." << endl;
oldDraw();
}
};
int main() {
Rectangle *r = new RectangleAdapter(120, 200, 60, 40);
r->draw();
}
By Dr. Xinwen Fu
CS@UML
17
Understanding the Start of an Object's
Lifetime
1.
2.
3.
4.
5.
6.
7.
8.
9.
#include <iostream>
class Foo {
public:
Foo() { std::cout << "Foo's constructor" << std::endl; }
};
class Bar : public Foo {
public:
Bar() { std::cout << "Bar's constructor" << std::endl; }
};
int main() {
11.
// a lovely elephant ;)
12.
Bar bar;
13. }
10.
By Dr. Xinwen Fu
CS@UML
18
The Adapter Pattern

Intent




Convert the interface of a class into another interface
clients expect
Adapter lets classes work together that couldn't otherwise
because of incompatible interfaces
Also Known As Wrapper
Motivation



Sometimes a toolkit or class library cannot be used
because its interface is incompatible with the interface
required by an application
We cannot change the library interface, since we may not
have its source code
Even if we did have the source code, we probably should
not change the library for each domain-specific application
By Dr. Xinwen Fu
CS@UML
19
Outline
Introduction to Pattern
 Gang of Four Design Pattern
 Adapter Pattern
 Introduction to UML

By Dr. Xinwen Fu
CS@UML
20
Use of Adapter pattern

Applicability: Use the Adapter pattern when



You want to use an existing class, and its interface does
not match the one you need
You want to create a reusable class that cooperates with
unrelated classes with incompatible interfaces
Implementation Issues

How much adapting should be done?



Simple interface conversion that just changes operation
names and order of arguments
Totally different set of operations
Does the adapter provide two-way transparency?

A two-way adapter supports both the Target and the
Adaptee interface. It allows an adapted object (Adapter) to
appear as an Adaptee object or a Target object
By Dr. Xinwen Fu
CS@UML
21
Class Adapter

A class adapter uses multiple inheritance to adapt
one interface to another
By Dr. Xinwen Fu
CS@UML
22
Object Adapter

An object adapter relies on object composition
By Dr. Xinwen Fu
CS@UML
23
Outline
Introduction to Pattern
 Gang of Four Design Pattern
 Adapter Pattern
 Introduction to UML

By Dr. Xinwen Fu
CS@UML
24
Objectives of UML


UML is the result of an effort to simplify and
consolidate the large number of OO development
methods and notations
UML is a general purpose notation that is used to
visualize,
 specify,
 construct, and
 document
the artifacts of a software system

25
CS@UML
A Class in UML


Class name: Must have, other two
Visibility
are optional
Mark
type
Attribute format


name : attribute type = default value
Operation (method) format

Name(paramater list): return type
+
Public
#
Protected
-
Private
~
Package
Class name
Attribute
Operator
26
CS@UML
Object Diagram
object name : class
27
CS@UML
Class Relationships in UML

Inheritance


Association




An inheritance link: triangle pointing to superclass
-Role1
*
-Role2
0..1
A relationship between instances of the two classes
Two ends: an end can have a role name to clarify the
nature of the association
The number of possible instances of the class
associated with a a single instance at the other end
Dependency

One depends on another if changes in the other could
possibly force changes in the first
28
CS@UML
Visual Paradigm for UML 10.1 Community
Edition
Visual Paradigm for UML is a UML
modeling software that supports UML,
SysML, ERD, BPMN, DFD, ArchiMate, etc.
UML diagrams, use case, SysML
requirements, enterprise architecture,
code engineering and database design are
supported for effective system analysis
and design.
 Youtube videos on UML

By Dr. Xinwen Fu
CS@UML
29
Backup
By Dr. Xinwen Fu
CS@UML
30
By Dr. Xinwen Fu
CS@UML
31
Two-Way Adapter Example in Java

Here are the interfaces for round and square pegs:
1.
/**
*The IRoundPeg interface.
*/
public interface IRoundPeg {
public void insertIntoHole(String msg);
}
2.
3.
4.
5.
6.
/**
8. *The ISquarePeg interface.
9. */
10. public interface ISquarePeg {
11.
public void insert(String str);
12. }
7.
By Dr. Xinwen Fu
CS@UML
32
RoundPeg and SquarePeg Classes
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
// The RoundPeg class.
public class RoundPeg implements IRoundPeg {
void insertIntoHole(String msg) {
System.out.println("RoundPeg insertIntoHole(): " + msg);
}
}
// The SquarePeg class.
public class SquarePeg implements ISquarePeg {
public void insert(String str) {
System.out.println("SquarePeg insert(): " + str);
}
}
By Dr. Xinwen Fu
CS@UML
33
PegAdapter
1.
2.
3.
4.
5.
6.
7.
/**
* The PegAdapter class.
* This is the two-way adapter class.
*/
public class PegAdapter implements ISquarePeg, IRoundPeg {
private RoundPeg roundPeg;
private SquarePeg squarePeg;
8.
public PegAdapter(RoundPeg peg) {this.roundPeg = peg;}
9.
public PegAdapter(SquarePeg peg) {this.squarePeg = peg;}
10.
public void insert(String str) {roundPeg.insertIntoHole(str);}
11.
public void insertIntoHole(String msg){squarePeg.insert(msg);}
12.
}
By Dr. Xinwen Fu
CS@UML
34
Client
1.
2.
3.
4.
5.
6.
// Test program for Pegs.
public class TestPegs {
public static void main(String args[]) {
// Create some pegs.
RoundPeg roundPeg = new RoundPeg();
SquarePeg squarePeg = new SquarePeg();
// Do an insert using the square peg.
squarePeg.insert("Inserting square peg...");
7.
8.
// Create a two-way adapter and do an insert with it.
ISquarePeg roundToSquare = new PegAdapter(roundPeg);
roundToSquare.insert("Inserting round peg...");
9.
10.
11.
// Do an insert using the round peg.
roundPeg.insertIntoHole("Inserting round peg...");
12.
13.
14.
15.
16.
17.
18.
}
}
// Create a two-way adapter and do an insert with it.
IRoundPeg squareToRound = new PegAdapter(squarePeg);
squareToRound.insertIntoHole("Inserting square peg...");
By Dr. Xinwen Fu
CS@UML
35
Reference
1.
2.
3.
4.
5.
6.
Java Design Patterns At a Glance, November 30, 2009
Allen Holub, Allen Holub's UML Quick Reference, Version
2.1.2, 2007/08/10
Laurent Grégoire, UML Quick Reference Card, 2001
UML® Resource Page, 2009
Randy Miller, Practical UML: A Hands-On Introduction for
Developers, 2009
Design Patterns (with C++, C#, Java, PHP, and Delphi
examples), 2011
By Dr. Xinwen Fu
CS@UML
36
Types of Software Patterns

Analysis: Conceptual models





Design: A solution to a problem in a context
Organizational: Recurring structures of relationship, usually
in a professional organization, that help the organization
achieve its goals
Process: Common template for software development
process
Project Planning: Part of project management


Capture an abstraction of a situation that can often be
encountered in modeling
Relates to the use of schedules such as Gantt charts to plan
and subsequently report progress within the project
environment
Configuration Management: a field of management

Focuses on establishing and maintaining consistency of a
system's or product's performance and its functional and
physical attributes with its requirements, design, and
operational information throughout its life
By Dr. Xinwen Fu
CS@UML
37
By Dr. Xinwen Fu
CS@UML
38
UML Part II
Introduction to UML
 Use Case Diagrams
 Class Diagrams
 Modeling Behavior and Sequence
Diagrams

39
CS@UML
Objectives of UML


UML is the result of an effort to
simplify and consolidate the large
number of OO development
methods and notations
UML is a general purpose notation
that is used to
visualize,
 specify,
 construct, and
 document
the artifacts of a software system

40
CS@UML
Why do We Need Virtual functions?
1.
2.
3.
4.
5.
class Base {
protected:
public:
const char* GetName() { return "Base"; }
};
6.
7.
8.
9.
10.
class Derived: public Base {
public:
const char* GetName() { return "Derived"; }
};
11.
12.
13.
14.
15.
16.
int main() {
Derived cDerived;
Base &rBase = cDerived;
cout << "rBase is a " << rBase.GetName() << endl;
}
41
CS@UML
Virtual functions
1.
2.
class Base {
protected:
3.
4.
5.
6.
public:
virtual const char* GetName() { return "Base"; }
};
7.
8.
9.
10.
11.
class Derived: public Base {
public:
virtual const char* GetName() { return "Derived"; }
};
12.
13.
14.
15.
16.
int main() {
Derived cDerived;
Base &rBase = &cDerived;
cout << "rBase is a " << rBase.GetName() << endl;
17.
return 0;
18.
19.
}
42
CS@UML
Pure virtual function (abstract function)


1.
2.
3.
4.
A pure virtual function (or abstract function) that has no
body at all
When we add a pure virtual function to our class, we are
effectively saying, “it is up to the derived classes to
implement this function”.
class Base {
public:
// a normal non-virtual function
const char* SayHi() { return "Hi"; }
5.
6.
7.
// a normal virtual function
virtual const char* GetName() { return "Base"; }
8.
9.
};
CS@UML
10.
virtual int GetValue() = 0; // a pure virtual function
43
Consequences of Using Pure Virtual Function

First, any class with one or more pure
virtual functions becomes an abstract
base class


which means that it can not be instantiated!
Second, any derived class must define a
body for this function, or that derived
class will be considered an abstract base
class as well
44
CS@UML
Interface classes

An interface class is a class that has no members
variables, and where all of the functions are pure
virtual!

In other words, the class is purely a definition,
and has no actual implementation.

Interfaces are useful when you want to define the
functionality that derived classes must
implement, but leave the details of how the
derived class implements that functionality
entirely up to the derived class.
45
CS@UML
Example of Interface Class
1.
2.
3.
4.
class IErrorLog
{
virtual bool OpenLog(const char *strFilename) = 0;
virtual bool CloseLog() = 0;
5.
virtual bool WriteError(const char *strErrorMessage) = 0;
6.
7.
};
46
CS@UML
A Class in UML


Class name: Must have, other two
Visibility
are optional
Mark
type
Attribute format


name : attribute type = default value
Operation (method) format

Name(paramater list): return type
+
Public
#
Protected
-
Private
~
Package
Class name
Attribute
Operator
47
CS@UML
Object Diagram
object name : class
48
CS@UML
Class Relationships in UML

Inheritance


Association




An inheritance link: triangle pointing to superclass
-Role1
*
-Role2
0..1
A relationship between instances of the two classes
Two ends: an end can have a role name to clarify the
nature of the association
The number of possible instances of the class
associated with a a single instance at the other end
Dependency

One depends on another if changes in the other could
possibly force changes in the first
49
CS@UML
Sensor
Generalization
CalibratingSensor
•An is-a relationship
•Abstract class
+currentValue()
+calibrate()
WindDirectionSensor
HistoricalSensor
+currentDirection()
-highestValue
-lowestVale
+resetHighest()
+resetLowest()
TrendSensor
-trend
TemperatureSensor
CS@UML
HumiditySensor
WindspeedSensor
-humidity
-speed
+currentHumidity()
+currentSpeed()
Barometer
-temp
-pressure
+currentTemp()
+currentPressure()
50
UML 2.0: Interface
51
CS@UML
Association

Structural relationship between peer classes (or objects)

Association can have a name and direction (indicated by an
open arrowhead), or be bi-directional (solid line)

Role names for each end of the association

Multiplicity of the relationship
52
CS@UML
Examples of Association

Bi-directional association

Uni-directional association
53
CS@UML
Complicated Association: Aggregation and
Composition

Basic aggregation is a
shared containment. Many
other classes may have the
same type of aggregate.
E.g., string, list

Composition is aggregates
that can not stand by
themselves (e.g., foot,
arm, etc)
54
CS@UML
Dependency

Represents a using relationship

If a change in specification in one class effects another class
(but not the other way around) there is a dependency

In an e-commerce application, a Cart class depends on a
Product class because the Cart class uses the Product class
as a parameter for an add operation.


In a class diagram, a dependency relationship points from the
Cart class to the Product class.
The Cart class is the client, and the Product class is the supplier
Product
55
CS@UML
Dependency Example

Here is a simple rule for when a dependency
occurs. If the code for one class contains the
name of another class in the diagram, and no
other connection exists in the diagram between
them then there should be a dashed dependency
arrow from the first to the second class
1.
2.
3.
4.
5.
6.
class A
{
public: B returns_a_B();
void has_a_B_argument(B);
void has_a_B_in_its_implementation();
};
A::void has_a_B_in_its_implementation(){ B b; }
56
CS@UML
Which Relation is Right?

Aggregation – aka is-part-of, is-made-of,
contains

Do not confuse part-of (aggregation) with
is-a (generation)
57
CS@UML
Download