Title: 91.204.201 Computing IV
191.204.201 Computing IV
- Introduction to Design Pattern
- Xinwen Fu
2Outline
- Introduction to Pattern
- Gang of Four Design Pattern
- Adapter Pattern
- Introduction to UML
3What 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 - a certain context, a problem and a solution.
- Hence, the common definition of a pattern
- A solution to a problem in a context.
- Patterns can be applied to many different areas
of human endeavor, including software development
4Pattern of Porches
Classical House Styles
American Colonial Styles
Spanish and Mediterranean
Victorian House Styles
5Why 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
6Software Patterns History
- 1987 - Cunningham and Beck used Alexanders 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
7Types of Software Patterns
- Riehle and Zullighoven in Understanding and
Using Patterns in Software Development mention
three types of software patterns - Conceptual Pattern
- Pattern whose form is described by means of terms
and concepts from the application domain - Design Pattern
- 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
8Design 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
9Outline
- Introduction to Pattern
- Gang of Four Design Pattern
- Adapter Pattern
- Introduction to UML
10GoF 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.
11GoF Classification Of Design Patterns
- Purpose - what a pattern does
- Creational Patterns
- Concern the process of object creation
- Structural Patterns
- Deal with the composition of classes and objects
- Behavioral Patterns
- Deal with the interaction of classes and objects
12Purpose 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
Structural 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
Behavioral 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
Visitor (366) operations that can be applied to object(s) without changing their class(es)
13Online Materials
- Design Patterns
- Erich Gamma, Richard Helm, Ralph Johnson, and
John Vlissides, Design Patterns Elements of
Reusable Object-Oriented Software, Addison
Wesley. October 1994.
14Iterator
15Outline
- Introduction to Pattern
- Gang of Four Design Pattern
- Adapter Pattern
- Introduction to UML
16C Example
- include ltiostream.hgt
- 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
17- void oldDraw()
- cout ltlt "LegacyRectangle oldDraw. ("
ltlt x1_ ltlt "," ltlt y1_ ltlt - ") gt (" ltlt x2_ ltlt "," ltlt y2_ ltlt ")" ltlt
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 ltlt "RectangleAdapter create. (" ltlt
x ltlt "," ltlt y ltlt - "), width " ltlt w ltlt ", height " ltlt
h ltlt endl -
18Understanding the Start of an Object's Lifetime
- include ltiostreamgt
- class Foo
- public
- Foo() stdcout ltlt "Foo's constructor"
ltlt stdendl -
- class Bar public Foo
- public
- Bar() stdcout ltlt "Bar's constructor"
ltlt stdendl -
- int main()
- // a lovely elephant )
- Bar bar
19The 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
20Outline
- Introduction to Pattern
- Gang of Four Design Pattern
- Adapter Pattern
- Introduction to UML
21Use 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
22Class Adapter
- A class adapter uses multiple inheritance to
adapt one interface to another
23Object Adapter
- An object adapter relies on object composition
24Outline
- Introduction to Pattern
- Gang of Four Design Pattern
- Adapter Pattern
- Introduction to UML
25Objectives 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
26A Class in UML
- Class name Must have, other two are optional
- Attribute format
- name attribute type default value
- Operation (method) format
- Name(paramater list) return type
Mark Visibility type
Public
Protected
- Private
Package
Class name
Attribute
Operator
27Object Diagram
object name class
28Class Relationships in UML
- Inheritance
- An inheritance link triangle pointing to
superclass - Association
- 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
29Visual 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
30Backup
31(No Transcript)
32Two-Way Adapter Example in Java
- Here are the interfaces for round and square
pegs - /
- The IRoundPeg interface.
- /
- public interface IRoundPeg
- public void insertIntoHole(String msg)
-
- /
- The ISquarePeg interface.
- /
- public interface ISquarePeg
- public void insert(String str)
33RoundPeg and SquarePeg Classes
- // 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) -
34PegAdapter
- /
- The PegAdapter class.
- This is the two-way adapter class.
- /
- public class PegAdapter implements ISquarePeg,
IRoundPeg - private RoundPeg roundPeg
- private SquarePeg squarePeg
- public PegAdapter(RoundPeg peg) this.roundPeg
peg - public PegAdapter(SquarePeg peg)
this.squarePeg peg - public void insert(String str)
roundPeg.insertIntoHole(str) - public void insertIntoHole(String
msg)squarePeg.insert(msg)
35Client
- // 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...")
- // Create a two-way adapter and do an insert
with it. - ISquarePeg roundToSquare new
PegAdapter(roundPeg) - roundToSquare.insert("Inserting round
peg...") - // Do an insert using the round peg.
- roundPeg.insertIntoHole("Inserting round
peg...") - // Create a two-way adapter and do an insert
with it. - IRoundPeg squareToRound new
PegAdapter(squarePeg)
36Reference
- 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
37Types of Software Patterns
- Analysis Conceptual models
- Capture an abstraction of a situation that can
often be encountered in modeling - 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
- 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
38(No Transcript)
39UML Part II
- Introduction to UML
- Use Case Diagrams
- Class Diagrams
- Modeling Behavior and Sequence Diagrams
40Objectives 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
41Why do We Need Virtual functions?
- class Base
- protected
- public
- const char GetName() return "Base"
-
-
- class Derived public Base
- public
- const char GetName() return "Derived"
-
-
- int main()
- Derived cDerived
- Base rBase cDerived
- cout ltlt "rBase is a " ltlt rBase.GetName() ltlt
endl -
42Virtual functions
- class Base
- protected
-
- public
- virtual const char GetName() return
"Base" -
-
- class Derived public Base
- public
- virtual const char GetName() return
"Derived" -
-
- int main()
- Derived cDerived
- Base rBase cDerived
- cout ltlt "rBase is a " ltlt rBase.GetName() ltlt
endl -
- return 0
-
43Pure virtual function (abstract function)
- 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"
-
- // a normal virtual function
- virtual const char GetName() return
"Base" -
- virtual int GetValue() 0 // a pure virtual
function
44Consequences 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
45Interface 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.
46Example of Interface Class
- class IErrorLog
-
- virtual bool OpenLog(const char strFilename)
0 - virtual bool CloseLog() 0
-
- virtual bool WriteError(const char
strErrorMessage) 0
47A Class in UML
- Class name Must have, other two are optional
- Attribute format
- name attribute type default value
- Operation (method) format
- Name(paramater list) return type
Mark Visibility type
Public
Protected
- Private
Package
Class name
Attribute
Operator
48Object Diagram
object name class
49Class Relationships in UML
- Inheritance
- An inheritance link triangle pointing to
superclass - Association
- 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
50Generalization
- An is-a relationship
- Abstract class
51UML 2.0 Interface
52Association
- 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
53Examples of Association
- Bi-directional association
- Uni-directional association
54Complicated 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)
55Dependency
- 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
56Dependency 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 - class A
- public B returns_a_B()
- void has_a_B_argument(B)
- void has_a_B_in_its_implementation()
-
- Avoid has_a_B_in_its_implementation() B b
57Which Relation is Right?
- Aggregation aka is-part-of, is-made-of,
contains - Do not confuse part-of (aggregation) with is-a
(generation)