UML 类图

类示例

1
2
3
4
5
6
7
8
9
10
11
class Circle
{
private:
double radius_;
Point center_;
public:
void setRadius(double _radius);
void setCenter(Point _center);
double getArea() const;
double getCircumfrence() const;
}

基本概念及术语

可见性(visibility)

  • - public
  • - private
  • - protected

参数的方向(parameter direction)

  • in:用于输入的参数,get the value
  • out:用于输出的参数, set the value
  • inout:既可作为输入又可作为输出, get the value and set the value

类成员(变量或者函数)的类型

  • 静态成员,下划线表示
  • 纯虚函数,斜体

类关系

  • Assocation (knows a)
  • Dependency (uses a)
  • Composition (has a)
  • Aggregation (has a)
  • Inheritance (is a)
  • Class template

类关系详解

assocation(关联)

一个对象知道另一个对象的存在,该对象持有另一个对象的指针或者引用

1
2
3
4
5
6
7
8
9
class X
{
public:
X(Y* _ptrY):ptrY_(_ptrY) {}
void setY(Y *y) { ptrY_ = y;}
void f() { ptrY_->foo();}
private/public:
Y* ptrY_; // X 类持有 Y 的一个指针,可据此调用 Y 中的成员方法
}

dependency(依赖)

当类 Y 与类 X 彼此独立,而类 Y 是类 X 成员函数的一个参数,或者 X 中成员函数的一个局部变量

1
2
3
4
5
6
7
8
9
10
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();}
...
}

Aggregation(聚合)

聚类发生的场景是:一个类是另一个类的集合或者容器,但被包含的类与容器本身并不具备相同的生命期,也就是容器销毁时,其包含的内容未必。关联(association)与聚合(aggregation)的不同之处在于,关联关系不存在一个明确的容器包含另外一个类。比如汽车和轮胎的关系,就是一种聚合关系,汽车包含着轮胎的集合,汽车的销毁,轮胎仍然可以存在。

1
2
3
4
5
6
7
class Window
{
public:
//...
private:
vectr<Shape*> ptrShapes;
}

Composition(组合)

组合(composition)是聚合(Aggregation)的增强版。组合和聚合的根本不同在于类与其所持有元素的是否具有相同的生命期,要求必须相同是一种组合关系。

1
2
3
4
5
6
7
class Circle
{
private:
...
Point center_;
...
}

继承(泛化)

类间的继承关系表达的是一种 derived class B is a base class A。

类模板

类模板意味着泛型类。

1
2
3
4
5
template<class T>
class X
{...};

X<Y> a;

UML 时序图

时序图的元素

Actor(角色)

系统角色,可以是人或者其他系统,子系统。以一个小人图标表示。

Object(对象)

对象位于时序图的顶部,以一个矩形表示。对象的命名方式一般有三种:

  • 第一种方式包括对象名和类名
  • 第二中方式只显示类名不显示对象名,即表示他是一个匿名对象
  • 第三种方式只显示对象名不显示类明

Lifeline(生命线)

生命线在顺序图中表示为从对象图标向下延伸的一条虚线,表示对象存在的时间,如下图:

Focus of Control(控制焦点)

控制焦点是顺序图中表示时间段的符号,在这个时间段内对象将执行相应的操作。用小矩形表示,如下图。

Message(消息)

消息一般分为同步消息(Synchronous Message),异步消息(Asynchronous Message)和返回消息(Return Message). 如下图所示:

  • 同步消息=调用消息(Synchronous Message)

消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。用来表示同步的意义。

  • 异步消息(Asynchronous Message)

消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作的。

  • 返回消息(Return Message)

返回消息表示从过程调用返回

Self-Message(自关联消息)

表示方法的自身调用以及一个对象内的一个方法调用另外一个方法。

Combined Fragments(组合片段)

组合片段用来解决交互执行的条件和方式,它允许在序列图中直接表示逻辑组件,用于通过指定条件或子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。组合片段共有 13 种,名称及含义如下:

一个实例