UML类图

类图

UML规定属性的表示方式为:可见性 名称 : 类型 [ = 默认值]

UML规定操作的表示方式为:可见性 名称(参数列表) : 返回类型

其中可见性包括公有(public)、私有(private)和受保护(protected)三种,在类图中分别用符号'+'、'-'和'#'表示。

用以下代码举例:

  1. class Employee
  2. {
  3. private:
  4.     string name;
  5.     int age;
  6.     string email;
  7.  
  8. public:
  9.     void modifyInfo();
  10. };

在UML类图中,该类显示如下:

关联关系

(1)双向关联

双向关联用实现表示。比如顾客和商品具有双向关联。

(2)单向关联

单向关联用带箭头的实现表示。比如顾客拥有地址。

(3)自关联

在系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关联关系成为自关联。这里我使用自己容易理解的示例,举了链表的例子。

(4)重数性关联

多重性关联关系又称为重数性关联关系,表示一个类的对象与另一个类的对象连接的个数。在UML中多重关系可以直接在关联直线上增加一个数字(范围)表示与之对应的另一个类对象的个数。

如上图所示,靠近类的数字表示此类可能包含的数量,再结合两个类的关系说明含义:一个Form类对象可以有零个或多个Button,但是某一具体的Button类对象只能与一个Form类对象关联。

(5)聚合关系

在UML中,聚合关系用带空心菱形的直线表示。比如汽车发动机是汽车的组成部分,但是汽车发动机可以独立存在。因此,汽车和发动机是聚合关系。

(6)组合关系

在UML中,组合关系用带实心菱形的直线表示。比如嘴巴是头的组成部分之一,而且如果头没了,嘴巴也就没了,因此头和嘴巴是组合关系。书中举的这个例子应该要说明的是组合中的类具有相同的生命周期

依赖关系

大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。

如以下示例,示例中的标签框代表注释。自己觉得如果按照上述定义,依赖关系太普遍了,可能不是UML绘制中的重点。

泛化关系

泛化关系也就是继承关系,也称为"is-a-kind-of"关系,泛化关系用于描述父类和子类之间的关系,父类又称作基类或超类,子类又称作派生类。在UML中,泛化关系用带空心三角形的直线表示。

用以下代码举例:

  1. class Person
  2. {
  3. protected:
  4.     string name;
  5.     int age;
  6.  
  7. public:
  8.     void move();
  9.     void say();
  10. };
  11.  
  12. class Student : public Person
  13. {
  14. private:
  15.     string studentNo;
  16.  
  17. public:
  18.     void study();
  19. };
  20.  
  21. class Teacher : public Person
  22. {
  23. private:
  24.     string teacherNo;
  25.  
  26. public:
  27.     void teach();
  28. };

在UML类图中,各类关系如下:

接口与实现关系

在很多面向对象语言中都引入了接口的概念,如Java和C#等,在接口中,一般没有属性,而且所有的操作都是抽象的,只有操作的声明,没有操作的实现。在UML中,用与类的表示方法类似的方式表示接口,类与接口之间的实现关系用带空心三角形的虚线来表示。这边的线也对应了virtual关键字。

用以下代码举例:

  1. class Vehicle
  2. {
  3. public:
  4.     virtual void move() = 0;
  5. };
  6.  
  7. class Ship : public Vehicle
  8. {
  9. public:
  10.     virtual void move() override;
  11. };
  12.  
  13. class Car : public Vehicle
  14. {
  15. public:
  16.     virtual void move() override;
  17. };

在UML类图中,各类关系如下: