Pattern-Oriented Software Design
Introduction to
UML Class Diagrams
CSIE Department, NTUT
Woei-Kae Chen
UML: Unified Modeling Language
z Successor to OOA&D methods
z late 1980s and early 1990s
z Unifies GoF Book
z Jacobson & OMT (Booch & Rumbaugh)
z Graphical notation used to express
designs
z Use cases
z Class diagrams
z Interaction diagrams
z Sequence diagrams
z Collaboration diagrams
z Package diagrams
z State diagrams
z Activity diagrams
z Deployment diagrams
1
UML class diagrams
z Three perspectives
z Conceptual
z represents of the domain under study
z relate to the class that implement them, but often
no direct mapping
z Specification
z looking at types rather than classes
z a type represents an interface that may have
different implementations
z Implementation
z looking at classes for our POSD class
UML: a class
+ public
# protected
- private
Abstract
Concrete
•data type
•parameter
2
Example: OBSort1.cpp
Example: OBSort1.cpp
Let’s think of
main() as a class
relationship
3
UML: class relationship
z Association X Y (knows a)
z Dependency X Y (uses a)
z Composition X Y (has a)
z Aggregation (has a)
X Y
z Inheritance Y (is a)
X
z Class template Y (parameterized
X class)
“Uses a” Ù “Knows a” relationship
z “Uses a”
z Dependency
z One object issues a function X Y
call to a member function of
another object
z “Knows a”
z Association
z One object is aware of
another; it contains a pointer X Y
or reference to another object
4
“Is a” Ù “Has a” relationship
z “Is a” relationships X
z Inheritance
z A class is derived from
another class Y
z “Has a” relationships
z Composition or Aggregation X Y
z A class contains other
classes as members
X Y
Aggregation Ù Composition
X Y X Y
z Both are “Has a” or “part-of” relationship
z Composition
z A stronger variety of aggregation
z The part object may belong to only one
whole
z Expected to live and die with the whole
z delete whole Æ delete part Following Larman OOAD:
z Aggregation use of aggregation is NOT
z Cascading delete is often recommended
z An aggregated instance can be shared
5
Example: “has a” relationship
Delete Polygon Æ delete Point a Point may appear in only
Delete Polygon Æ
X delete Style one Polygon or Circle
Larman: use
association instead
of aggregation
a Style may be shared by
Multiplicity
many Polygons and Circles
Relationship Examples
z Car Ù Engine ? Æ Composition
z Person Ù Cell Phone ? Æ Association/Composition/Dependency
z Human Ù Brain ? Æ Composition
z Fighter Ù Bomb ? Æ Association
z Fighter Ù F16 Æ Inheritance
z Bomb Ù Explosive Æ Composition/Association/Inheritance
z Bomb Ù Nuclear Bomb Æ Inheritance
z MyComplex Ù Math ? Æ Dependency
z Tree Node Ù Child Node ? Æ Composition
z Tree Node Ù Parent Node ? Æ Association (if needed)
z Hero Ù Life ? Æ Composition/Attribute
z Hero Ù Score ? Æ Association/Dependency
z Hero Ù Map ? Æ Association/Dependency
6
Relationship Examples
z Flight 123 Ù Airplane ? Æ Association/Dependency
z Flight 123 Ù Airport ? Æ Association
z Flight 123 Ù Passenger ? Æ Association/Dependency
z Flight 123 Ù Flight Captain ? Æ Association/Dependency
z Flight 123 Ù Flight Attendant ? Æ Association/Dependency
z Airplane Ù Boeing 747 ? Æ Inheritance
z Airplane Ù Seat ? Æ Composition
z Airplane Ù Fuel ? Æ Composition/Attribute
z Passenger Ù Flight ? Æ Association/Dependency
z Passenger Ù Ticket ? Æ Association/Dependency
z Passenger Ù Travel Agent ? Æ Association/Dependency
z Ticket Ù Price ? Æ Composition/Attribute
UML Example (C++): Association
X Y
class X {
X(Y *y) : y_ptr(y) {}
void SetY(Y *y) {y_ptr = y;}
void f() {y_ptr->Foo();}
...
Y *y_ptr; // pointer
};
7
UML Example (C++): Association
X Y
How is an association created?
Example #1 Example #2
… …
Y an_y(); Y an_y();
X an_x(&an_y); X an_x();
an_x.f(); …
… an_x.SetY(&y);
… …
an_x.f();
UML Example (C++): Dependency
X Y
class X {
...
void f1(Y y) {…; y.Foo();}
void f2(Y *y) {…; y->Foo();}
void f3(Y &y) {…; y.Foo();}
void f4() {Y y; y.Foo();…}
void f5() {…; Y::StaticFoo();}
};
8
Example: OBSort3.cpp
uses
•getSize()
•operator[]
UML Example (C++): Composition 1
X Y
class X {
Java?
...
Y a; // 1; Composition
Y b[10]; // 0..10; Composition
};
9
UML Example (C++): Composition 2
X Y
class X {
X() { a = new Y[10]; }
~X(){ delete [] a; }
...
Y *a; // 0..10; Composition
};
NOT Association
UML Example (C++): Composition 3
X vector<Y> Y
Implementation detail
X Y
class X {
Hiding
... implementation detail
vector<Y> a;
}; Composition of NOT Composition
vector<Y> of Y
10
UML Example: OBSort3.cpp
UML Example (C++): Aggregation
z No example here
z Use Association instead of Aggregation
X Y
X Y
11
UML Example (C++): Inheritance
class Y {
... Y
};
class X : public Y {
... X
};
“is a” relationship
Example: OOSort2.cpp
12
UML Example (C#): Implementation
public interface Y {
int Foo();
}
No fields
Y
class X : Y
{ X implements Y
public int Foo()
{ X
…
}
} “Can do” relationship
UML Example (C++): Implementation
class Y {
... Y
No variables
}; Only pure virtual functions
class X : public Y {
... X
};
C++ allows multiple inheritance
13
UML Example (C++):
Template Class
template <class T> Y
class X { X
...
... ...
... X<Y> a;
}; ...
14
Abstract class
15
C++ static member
16