UML类图
类图
UML规定属性的表示方式为:可见性 名称 : 类型 [ = 默认值]。
UML规定操作的表示方式为:可见性 名称(参数列表) : 返回类型。
其中可见性包括公有(public)、私有(private)和受保护(protected)三种,在类图中分别用符号'+'、'-'和'#'表示。
用以下代码举例:
- class Employee
- {
- private:
- string name;
- int age;
- string email;
- public:
- void modifyInfo();
- };
在UML类图中,该类显示如下:
关联关系
(1)双向关联
双向关联用实现表示。比如顾客和商品具有双向关联。
(2)单向关联
单向关联用带箭头的实现表示。比如顾客拥有地址。
(3)自关联
在系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关联关系成为自关联。这里我使用自己容易理解的示例,举了链表的例子。
(4)重数性关联
多重性关联关系又称为重数性关联关系,表示一个类的对象与另一个类的对象连接的个数。在UML中多重关系可以直接在关联直线上增加一个数字(范围)表示与之对应的另一个类对象的个数。
如上图所示,靠近类的数字表示此类可能包含的数量,再结合两个类的关系说明含义:一个Form类对象可以有零个或多个Button,但是某一具体的Button类对象只能与一个Form类对象关联。
(5)聚合关系
在UML中,聚合关系用带空心菱形的直线表示。比如汽车发动机是汽车的组成部分,但是汽车发动机可以独立存在。因此,汽车和发动机是聚合关系。
(6)组合关系
在UML中,组合关系用带实心菱形的直线表示。比如嘴巴是头的组成部分之一,而且如果头没了,嘴巴也就没了,因此头和嘴巴是组合关系。书中举的这个例子应该要说明的是组合中的类具有相同的生命周期。
依赖关系
大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。
如以下示例,示例中的标签框代表注释。自己觉得如果按照上述定义,依赖关系太普遍了,可能不是UML绘制中的重点。
泛化关系
泛化关系也就是继承关系,也称为"is-a-kind-of"关系,泛化关系用于描述父类和子类之间的关系,父类又称作基类或超类,子类又称作派生类。在UML中,泛化关系用带空心三角形的直线表示。
用以下代码举例:
- class Person
- {
- protected:
- string name;
- int age;
- public:
- void move();
- void say();
- };
- class Student : public Person
- {
- private:
- string studentNo;
- public:
- void study();
- };
- class Teacher : public Person
- {
- private:
- string teacherNo;
- public:
- void teach();
- };
在UML类图中,各类关系如下:
接口与实现关系
在很多面向对象语言中都引入了接口的概念,如Java和C#等,在接口中,一般没有属性,而且所有的操作都是抽象的,只有操作的声明,没有操作的实现。在UML中,用与类的表示方法类似的方式表示接口,类与接口之间的实现关系用带空心三角形的虚线来表示。这边的虚线也对应了virtual关键字。
用以下代码举例:
- class Vehicle
- {
- public:
- virtual void move() = 0;
- };
- class Ship : public Vehicle
- {
- public:
- virtual void move() override;
- };
- class Car : public Vehicle
- {
- public:
- virtual void move() override;
- };
在UML类图中,各类关系如下: