UML类图符号含义
UML类图的各符号含义
- 类图基本符号可拆分为虚线,箭头,实线,空心右三角,实心右三角,空心菱形和实心菱形。
- 由这些基本的图形进行组合构成了类图的基本符号。这里要注意这几个符号的顺序,代表了类与类之间关系的耦合程度。越向右耦合度越高。
- 虚线+箭头 表示即依赖的关系,实线+箭头表示关联的关系
- 虚线+空心右三角表示implements
- 实线+空心右三角表示的是泛化,即类的继承关系
- 实线+空心菱形表示的是聚合的关系
- 实线+实心菱形则表示组合的关系
- 另外一点是在看类图的时候要注意。类图的思想其实也还没有脱离面向对象的思想,以某个类为中心,有些线是射入的而有些线是射出的。射入的线表示的是这个类被哪些类所调用而射出的线则表示该类调用了哪些类,包括泛化,关联,依赖,聚合和组合四种关系。这类似于离散数学中有关图部分的描述。
类(class)
-
使用三层矩形框表示
- 第一层显示类的名称,如果是抽象类,则就用斜体显示。
- 第二层是字段和属性。
- 第三层是类的方法。
- 注意前面的符号,‘+’表示public,‘-’表示private,‘#’表示protected。
接口
- 使用两层矩形框表示,与类图的区别主要是顶端有<>显示 。
- 第一行是接口名称。
- 第二行是接口方法。
继承类(extends)
- 用空心三角形+实线来表示。
实现接口(implements)
- 用空心三角形+虚线来表示
关联(Association)
- 用实线箭头来表示,例如:燕子与气候
聚合(Aggregation)
- 用空心的菱形+实线箭头来表示
- 聚合:表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分,例如:公司和员工
组合(Composition)
- 用实心的菱形+实线箭头来表示
- 组合:部分和整体的关系,并且生命周期是相同的。例如:人与手
依赖(Dependency)
- 用虚线箭头来表示,例如:动物与氧气
基数
- 连线两端的数字表明这一端的类可以有几个实例,比如:一个鸟应该有两只翅膀。如果一个类可能有无数个实例,则就用‘n’来表示。关联、聚合、组合是有基数的。
类之间的关系
-
UML把类之间的关系分为以下5种
- 关联:类A与类B的实例之间存在特定的对应关系
- 依赖:类A访问类B提供的服务
- 聚集:类A为整体类,类B为局部类,类A的对象由类B的对象组合而成
- 泛化:类A继承类B
- 实现:类A实现了B接口
关联(Association)
-
关联指的是类之间的特定对应关系,在UML中用带实线的箭头表示。
-
按照类之间的数量对比,关联可以分为以下三种:
- 一对一关联
- 一对多关联
- 多对多关联
-
注意:关联还要以分为单向关联和双向关联
依赖(Dependency)
- 依赖指的是类之间的调用关系,在UML中用带虚线的箭头表示。如果类A访问类B的属性或者方法, 或者类A负责实例化类B,那么可以说类A依赖类B。和关联关系不同,无须在类A中定义类B类型的属性。
聚集(Aggregation)
- 聚集指的是整体与部分之间的关系,在UML中用带实线的菱形箭头表示。
- 聚集关系还可以分为两种类型:
- 被聚集的子系统允许被拆卸和替换,这是普通聚集关系。
- 被聚集的子系统不允许被拆卸和替换,这种聚集称为强聚集关系,或者组成关系。
- 注:强聚集(组成)可用带实线的实心菱形箭头表示。
泛化(Generalization)
- 泛化指的是类之间的继承关系,在UML中用带实线的三角形箭头表示。
实现(Realization)
- 实现指的是类与接口之间的关系,在UML中用带虚线的三角形箭头表示。
以下是GOF设计模式中的描述
- 箭头和三角表示子类关系。
- 虚箭头线表示一个类实例化另一个类的对象,箭头指向被实例化的对象的类。
- 普通的箭头线表示相识(acquaintance也叫关联或者引用),意味着一个对象仅仅知道另一个对象。相识的对象可能请求彼此的操作,但他们不为对方负责,它只标示了对象间较松散的耦合关系。
- 尾部带有菱形的箭头线表示聚合(aggregation),意味着一个对象拥有另一个对象或者对另一个对象负责。一般我们称一个对象包含另一个对象,或者是另一个对象的一部分。聚合意味着聚合对象和其所有者具有相同的生命周期。
- 抽象类名以斜体表示,抽象操作也以斜体表示。图中可以包括实现操作的伪代码,代码将出现在带有褶角的框中,并用虚线将该褶角框与代码所实现的操作相连。
如下实线箭头表示, 继承, 从一个非接口类的继承
如下那条连线表示双向关联
看左边, Flight扮演assignedFights角色, 有0到1个Plane跟他关联(一个航班要么取消了没有飞机,要么只能对应一架飞机)
看右边, Plane扮演着assignedPlane角色, 有0到多个Flight跟他关联(一个飞机可以参与多个航班, 也可以停在仓库里面烂掉)
如下那条连线表示单向关联
基本的意义跟上面的是一样的, 唯一不同的是, 右边的类对左边的类是一无所知的.
如下软件包框图
那个大的包围的框叫软件包, 名字为Account, 就一些可以归类的类包装起来
如下虚线的箭头表示实现一个接口
如下关联连线
水平的连线还是表示上面所说的关联, 但从关联连线中引伸出来的虚线, 这意味当Flight类的一个实例关联到 FrequentFlyer 类的一个实例时,将会产生 MileageCredit 类的一个实例.
如下聚合连线1
带菱形的箭头表示基本聚合, 由上图知道, Wheel类扮演wheels角色, 聚合4个到Car对象里面去,
空心的菱形表示Wheel对象并不随Car的创建而创建,销毁而销毁.
如下聚合连线2
意义和上面类似, 唯一不同的是, 实心菱形表示Department对象随Company对象的创建而创建,销毁而销毁.
如下反射关联连线
表示反射关联, 显示一个Employee类如何通过manager / manages角色与它本身相关。当一个类关联到它本身时,这并不意味着类的实例与它本身相关,而是类的一个实例与类的另一个实例相关。