UML类图详解

UML类图简介

一、UML类图简介

​ 在UML建模中类图(Class diagram)主要是显示了模型的静态结构,特别是模型中存在的类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。它既用于应用程序的系统分类的一般概念建模,也用于详细建模,将模型转换成编程代码。

​ 类图中最基本的元素是类或者接口。

​ 类图主要用在面向对象软件开发的分析和设计阶段,描述系统的静态结构。类图图示了所构建系统的所有实体、实体的内部结构以及实体之间的关系。即,类图中包含从用户的客观世界模型中抽象出来的类、类的内部结构和类与类之间的关系,它是构建其他设计模型的基础,没有类图,就没有对象图状态图协作图等其他UMI。动态模型图也就无法表示系统的动态行为。类图也是面向对象编程的起点和依据。类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。

——————以上来自百度百科。

二、UML中类的表达方式

​ 在UML类图中,一个类主要包含类名、属性以及方法。将三部分用矩形框起来并加上分割线就表示一个类。如下图所示:

图 1

上图展示了枚举、接口以及类的表示方式,如果类的表示方式中蓝色部分的类名称使用斜体,则表示该类为抽象类。

实际上,属性的完整表示方式是这样的:

可见性 名称 :类型 [ = 缺省值]

方法的完整表示方式如下:

可见性 名称(参数列表) [ : 返回类型]

其中,中括号中的内容是可选的。

属性前边的符号含义如下:

  • -表示属性为private
  • +表示属性为public
  • #表示属性为 protected

三、类与类之间关系表示方式

3.1 关联关系

关联关系包括:单向关联、双向关联、自关联。

3.1.1 单向关联

定义:单向关联表示一个类A将另一个类B作为类内部的成员,类A可以调用类B中的公共属性和方法。如下图所示:

图 2

在UML类图中单向关联用一个带箭头的实线表示。上图表示每个顾客都有一个地址,这通过让Consumer类持有一个类型为Address的成员变量类实现 。

3.1.2 双向关联

定义: 双向关联就是双方各自持有对方类型的成员变量 ,都可以调用对方的公共属性和方法。具体表示如下图:

图 3

在UML类图中,双向关联用一个不带箭头的实线表示。上图中在Consumer类中维护一个Product[]数组,表示一个顾客购买了那些产品;在Product类中维护一个Consumer类型的成员变量表示这个产品被哪个顾客所购买。

3.1.3 自身关联

定义:自身关联也叫反身关联,自己引用自己,带着一个自己的引用。如下图所示:

图 4

自身关联在UML类图中用一个带有箭头且指向自身的实线表示。上图的意思就是Node类包含类型为Node的成员变量,也就是“自己包含自己”。

3.2 聚合关系

定义: 聚合用来表示集体与个体之间的关联关系 。如下图所示:

图 5

UML中聚合关系用实线加空心菱形表示。聚合关系强调是“集体”包含“个体”,但是“个体”可以脱离“集体”而单独存在。比如上图中班级包含了学生,而学生脱离了班级也能单独存在。

3.3 组合关系

定义: 组合又叫复合,用来表示个体与组成部分之间的关联关系, 如下图所示:

图 6

组合关系与聚合关系见得最大不同在于:这里的“部分”脱离了“整体”便不复存在 。

聚合与组合的对比:
(1)聚合关系没有组合紧密。
学生不会因为班级的解散而无法存在,聚合关系的类具有不同的生命周期;而学生如果没有心脏将无法存活,组合关系的类具有相同的生命周期。

这个从构造函数可以看出。聚合类的构造函数中包含另一个类的实例作为参数,因为构造函数中传递另一个类的实例,因此学生可以脱离班级体独立存在。组合类的构造函数包含另一个类的实例化。因为在构造函数中进行实例化,因此两者紧密耦合在一起,同生同灭,学生不能脱离心脏而存在。

(2)信息的封装性不同。
在聚合关系中,客户端可以同时了解Classes类和Student类,因为他们是独立的。

在组合关系中,客户端只认识Student类,根本不知道Heart类的存在,因为心脏类被严密地封装在学生类中。

理解聚合与复合的区别,主要在于聚合的成员可独立,复合的成员必须依赖于整体才有意义。

3.3 依赖关系

定义: 依赖关系是五种关系中耦合最小的一种关系。类A要完成某个功能引用了类B,则类A依赖类B。依赖在代码中主要体现为类A的某个成员函数的返回值、形参、局部变量或静态方法的调用,则表示类A引用了类B。 如下图所示:

图 7

Driver的drive方法只有传入了一个Car对象才能发挥作用,因此我们说Driver类依赖于Car类。在UML类图中,依赖关系用一条带有箭头的虚线表示。

3.4 继承关系

定义: 继承关系对应的是extend关键字,如果一个类别B“继承自”另一个类别A,就把这个B称为“A的子类”,而把A称为“B的父类别”也可以称“A是B的超类”。继承可以使得子类具有父类别的各种属性和方法,而不需要再次编写相同的代码。 如下图所示:

图 8

在UML类图中用带空心三角形的直线表示 。

3.5 接口实现关系

这种关系对应implement关键字,在UML类图中用带空心三角形的虚线表示。如下图中,Car类与Ship类都实现了Vehicle接口。

图 9

参考资料:

五分钟读懂UML类图

认识 UML 类关系——依赖、关联、聚合、组合、泛化


   转载规则


《UML类图详解》 anhua 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录