最近刚好有空,遂决定对应 UML 常用的一些图进行整理,供自己以及需要的人查阅。
UML 分为静态模型与动态模型。静态模型描述一个系统的静态特征,固定的框架结构。包括用例图、类图、对象图、组件图、部署图;动态模型包括时序图、协作图、状态图、活动图。本文将主要对用例图、类图、时序图、状态图的使用进行了简要介绍。
- 一、静态建模
- 1 用例图(use case )
- 1.1 作用
- 1.2 要素
- 1.3 语法
- 1.4 举例
- 2 类图
- 2.1 作用
- 2.2 要素
- 2.3 语法
- 2.4 举例
- 3 对象图
- 3.1 作用
- 3.2 要素
- 3.3 语法
- 4 组件图
- 4.1 作用
- 4.2 要素
- 4.3 语法
- 5 部署图
- 5.1 作用用来表现用于部署软件的物理设备信息。
- 5.2 要素
- 5.3 语法
- 二、动态建模
- 1 时序图
- 1.1 作用
- 1.2 要素
- 1.3 语法
- 1.4 举例
- 2 协作图
- 2.1 作用
- 2.2 要素
- 2.3 语法
- 2.4 举例
- 3 状态图
- 3.1 作用
- 3.2 要素
- 3.3 语法
- 3.4 举例
- 4 活动图
- 4.1 作用
- 4.2 要素
- 4.3 语法
- 4.4 举例
- 三、总结
一、静态建模
1 用例图(use case )
1.1 作用
展示系统的核心功能及与其交互的用户。系统可以是整个系统,也可以是某个局部,但用户一定是在该系统外。
1.2 要素
用例(use case):也就是一个相对独立的功能。
参与者(actor):与用例存在交互关系的外部实体。
关系:包括参与者与用例间的关系,参与者之间的关系,以及用例间的关系。
1.3 语法
用例 用椭圆表示,中间写上功能名。
参与者 一般是一个小人的形状。
关系 用带箭头的直线表示,箭头表示信息传输方向,如果不关注信息的流向,也可省略箭头。
1.4 举例
如图是某视频软件播放系统的用例图,我们能从中获取的最主要信息是什么呢?显然是普通用户能使用播放、暂停、选集、查历史记录的功能,而会员用户还能使用投屏功能。
2 类图
类图是我们使用较多且相当实用的一种图。
2.1 作用
展现多个类的特性,以及类之间的协作与交互,用来对系统的静态结构进行建模。
2.2 要素
类:包括类名、属性和方法三部分。
接口:这里指的是接口类,不可被实例化,只可被实现。
关系:类之间的关系主要有以下几种:
- 关联 事物之间的一种基本关系,如老师和学生间有教学关系,员工和公司间是雇佣关系。
- 组成关系 包括组合金额聚集,前者部分与整体的联系更紧密。(1)聚集 表示多个同类型的部分构成了整体,如森林是树木的聚集,蚁群是蚂蚁的聚集。(2)组合 同一事物整体与局部的紧密组成关系。如人组合了眼睛,眼睛组合了眼球。
- 依赖 这个关系不好描述,如农民使用锄头种地,鱼依赖水存活,程序员通过chatgpt 干活。
- 泛化 类图里就是继承。
- 实现 实现某个接口。
需要明白,类之间的关系并不总是那么明确,比如关联和依赖,有时间就不太好判定。个人认为,也没必要过于较真究竟是哪种关系,在面向对象写法中,主要就是继承和组合,类图能传递出该用哪种就足够了。
2.3 语法
类 用一块矩形表示。从上到下依次是类名、属性和方法。属性后可加上属性的类型,方法的括号中也可写上参数,但个人比较喜欢下图这种最简略的写法。属性和方法名前需加上符号说明访问权限:
- + 表示公有
- - 表示私有
- # 表示保护
接口 用一个圆圈表示
关系 关系的表示直接看下面的图吧,当然,部分图有不同的画法,不再赘述。
2.4 举例
下面是我 YY 的一个视频播放系统的类图,主要是看看各种关系怎么画,对照着回顾一下 2.3 中的内容。(1)继承,普通用户和会员用户都继承了用户这个类;(2)依赖,用户依赖于播放管理器进行各种操作;(3)组合,播放管理器组合了多媒体控制器、启停管理器、资源管理器;(4)实现,多媒体控制器需要实现投屏这个接口;(5)关联,资源管理和视频资源间存在管理关系。
3 对象图
个人似乎还没有使用过。
3.1 作用
描述在某一时刻,类图中各个对象之间的关系。在不同时刻,类图中每一个类对应的对象数目是不一样的,也就是说同一个类图的对象图会随着时间变化。
3.2 要素
对象结点:某时刻类对应的对象。
关系:对象间的关系,通过链来联系。
3.3 语法
对象结点 的表示方法与类相似,只是对象名下加下划线,与类作区分。
关系 用直线表示,有向关系加箭头。
4 组件图
也称为构建图,是被封装起来的软件逻辑部件,软件系统正是由这些部件构成。与类相似,但是其范围更大,可以是包含多个类的子系统,当然也可以是单独一个类。
4.1 作用
描述一个系统所分解的构建及其关系,用来封装系统中的一组类,从而使这组类实现的功能可被复用。
4.2 要素
组件:包括接口和端口。接口是指其向外部提供或从外部获取的操作,与类中的接口类似;端口是一个部件,用来与外部进行通信,它是对接口的包装,一个构建额可以只有接口而没有端口。
关系:组件间的关系。
4.3 语法
构建 的表示如图。端口可以没有,接口直接由构建呈现。
5 部署图
这块我没有实战经验,只是根据资料进行的简单总结。
5.1 作用用来表现用于部署软件的物理设备信息。
5.2 要素
结点:可以部署软件制品并能够进行计算的物理设备。
连接:结点间进行通信的交互路径。结点间的关系有通信、包含、和使用。
5.3 语法
结点 用一个立方体表示。
二、动态建模
1 时序图
1.1 作用
描述一段时间范围内,多个对象之间交互的消息时间顺序。
1.2 要素
实体:时序图中参与交互的角色。
生命线:参与交互的实体及其下面的虚线被称为生命线,在这条线上,时间是从上到下递增的。
消息:对象之间传递的信息。包括(1)同步消息,发送者需要停止活动等待接收方返回;(2)异步消息,发送方不等待返回,继续活动;(3)返回消息,过程调用返回。
交互事件:在交互的某个时刻发生的事件,也被叫做激活。一条消息必然对应着发送消息的事件和接收消息的事件。
1.3 语法
生命线 用矩形框加虚线表示。
消息 的表示如下。(哈哈,我发现这个软件里的小图标画的很到位,我就不画蛇添足再搞一遍了,直接贴过来了)
1.4 举例
还是用之前的视频软件举例,下面是其登录时的时序图。
在这个流程中,有一个 alt 选项框,表示如果校验通过(虚线框上部分),就跳转到内容主页,否则就提示错误信息(虚线框下部分)。其他常用的条件操作还有:
- opt:if true,如果成功就执行条件框里对应的内容;
- loop:循环,满足条件时,虚线框内容可以多次执行;
- par:并行,每一个虚框里的内容会同时执行;
- region:临界区域,该虚框只允许一个线程对它立即执行。
2 协作图
2.1 作用
表现一定范围内对象之间的协作的信息,也就是参与交互对象间的结构关系,也称为通信图。
2.2 要素
对象实体:参与交互的对象实体。
链:两个实体之间存在的消息联系。
消息:实体间传递的消息。
2.3 语法
对象实体 用矩形框表示,冒号前是对象名(可省略),冒号后是对象所在类的名。
链 用一条无箭头的线表示。
消息 用带箭头的直线表示。
2.4 举例
3 状态图
3.1 作用
描述一个对象在事件触发时,其内部状态的转变过程。
3.2 要素
状态结点:表示事物的一个相对稳定的状态,必有一个初始状态和一个结束状态。
动作:导致状态变化的操作或事件。
3.3 语法
状态结点 用一个圆角矩形表示
3.4 举例
4 活动图
4.1 作用
用于事物的动态行为过程建模,描述活动的过程,展现从一个活动到另一个活动的控制流。
4.2 要素
活动结点:活动流程中的一个步骤,分为(1)动作结点,活动的执行单元;(2)控制结点,包括判断(decision)/合并(merge),特点是只会走一条路径;分叉(fork)/结合(join),特点是所有路劲都走了才会继续进行活动流程(3)对象结点,描述活动中的实体或对象。
转换:从一个活动到下一个活动。
4.3 语法
4.4 举例
三、总结
用例图、类图、时序图、状态机图这四种图形是最为常用的,需要熟练绘制理解。至于其他几种图形,在我的见识中,几乎没有使用过,能读懂即可,所以我写的也不很详细。