UML 顺序图 | 概念 / 组成 / 作用 / 绘制
注:本文为 “UML 顺序” 相关合辑。
图片清晰度受引文原图所限。
略作重排,未整理去重。
如有内容异常,请看原文。
顺序图
椰子 Tyshawn 原创 于 2016-12-31 18:06:39 发布
一、定义
- UML 顺序图一般用于确认和丰富一个使用情境的逻辑。
- 一个使用情境的逻辑或是一个用例的一部分;或是一条扩展路径;或是一个贯穿单个用例的完整路径,例如动作基本过程的逻辑描述;或是动作的基本过程的一部分再加上一个或多个的备用情境的逻辑描述;或是包含在几个用例中的路径。
- 顺序图将交互关系表现为一个二维图,纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色,类元角色的活动用生命线表示。
二、顺序图示例
三、顺序图的组成元素
- 生命线用一条纵向虚线表示。
- 在 UML 中,对象表示为一个矩形,其中对象名称标有下划线。
- 激活是过程的执行,包括等待过程执行的时间。在顺序图中激活部分替换生命线,使用长条的矩形表示。
- 消息是对象之间的通信,是两个对象之间的单路通信,是从发送者到接收者之间的控制信息流。消息在顺序图中由有标记的箭头表示,箭头从一个对象的生命线指向另一个对象的生命线,消息按时间顺序在图中从上到下排列。
- 在顺序图中,对象安排在 X 轴。启动交互的对象放在最左边,随后放入消息的对象放在启动交互对象的右边。交互中对象发送和接收的消息沿着 Y 轴以时间增加的次序放置。在顺序图中,有的消息对应于激活,表示它将会激活一个对象,这种消息称为调用消息(Call Message);如果消息没有对应激活框,表示它不是一个调用消息,不会引发其他对象的活动,这种消息称为发送消息(Send Message)。
- 消息
- 调用消息
- 返回消息
- 自身消息
- 调用消息
- 发送消息
- 创建消息
- 销毁消息
- 同步消息:发送消息的对象要等到接收消息的对象执行完所有操作后,发送消息的对象才能继续执行自己的操作。
- 异步消息:发送消息的对象发送消息后,不用等待接收对象是否执行,继续执行自己的操作。
- 交互片段
一个复杂的顺序图可以划分为几个小块,每一个小块称为一个交互片段。每个交互片段由一个大方框包围,其名称显示在方框左上角的间隔区内,表示该顺序图的信息。常用操作符如下:- alt:多条路径,条件为真时执行。
- opt:任选,仅当条件为真时执行。
- par:并行,每一片段都并发执行。
- loop:循环,片段可多次执行。
- critical:临界区,只能有一个线程对它立即执行。
四、顺序图的作用
- 对于业务人员,顺序图可显示不同的业务对象如何交互,对于交流当前业务如何进行很有用。除记录组织的当前事件外,一个业务级的顺序图能被当作一个需求文件使用,为实现一个未来系统传递需求。
- 对于需求分析人员,顺序图能通过提供一个深层次的表达,把用例带入下一层次。通常用例被细化为一个或者更多的顺序图。顺序图的主要用途之一,是把用例表达的需求,转化为进一步、更深层次的精细表达。
- 对于技术人员,顺序图在记录一个未来系统的行为应该如何表现时非常有用。在设计阶段,架构师和开发者能使用顺序图挖掘出系统对象间的交互,进一步完善整个系统的设计。
五、顺序图绘制技巧
- 以用例为单位创建顺序图,针对每个用例,考察为完成它所描述的功能需要哪些对象的操作参与执行,并且进一步考察这些操作的执行需要通过消息而引起其他哪些对象操作的执行。把这些对象以及参与交互的执行者组织到一个顺序图中。
- 理论上需要为每一个用例创建一个顺序图,但是如果一个用例的交互对象很简单可以不需要创建顺序图。
- 顺序图绘制步骤:
- 确定参与交互的执行者
- 确定与执行者直接交互的对象
- 确定与交互相关的全部对象(顺藤摸瓜)
- 如果需要考察单个用例内部多个对象的行为可以使用顺序图;
如果需要考察单个对象的行为就需要使用状态图;
如果需要考察跨用例或者跨线程的行为就需要考虑使用活动图。 - 需求分析阶段的顺序图:主要用于描述用例中对象之间的交互,可以使用自然语言来绘制,用于细化需求。从业务的角度进行建模,用描述性的文字叙述消息的内容。
系统设计阶段的顺序图:确切表示系统设计中对象之间的交互,考虑到具体的系统实现,对象之间通过方法调用传递消息。
六、实例
绘制图书管理系统 “借书” 用例的顺序图(业务模型)。
图书管理员打开借书界面,输入借书信息并提交借书请求;系统验证借书卡状态,如果借书卡未借书则记录借书信息且修改图书状态和借书卡状态,并提示借书成功;否则提示借书失败。
绘制图书管理系统 “还书” 用例的顺序图(业务模型)。
图书管理员打开还书界面,输入还书信息并提交还书请求;系统返回借书详细信息及所需金额;图书管理员输入金额;系统修改借书记录并修改图书状态和借书卡状态;提示还书成功。
软件工程中的顺序图
Shaft_ 原创 于 2018-04-13 15:28:18 发布
一、顺序图示例(购买小车简图)
二、顺序图的组成要素
对象
表示方法
说明
- 将对象置于顺序图的顶部意味着在交互开始的时候对象就已经存在了,如果对象的位置不在顶部,那么表示对象是在交互的过程中被创建的。
- 活动者和对象从左至右排列。活动者一般为两个。
- 其余对象从左至右按重要性或者消息按先后排列(常用)。
- 命名方式有三种,对象名 + 类名,类名(匿名对象),对象名(不关心类)。
生命线
表示方式
说明
- 每个对象都有自己的生命线,用来表示在该用例中一个对象在一段时间内的存在。
- 生命线使用垂直的虚线表示。
- 如果对象生命期结束,则用注销符号表示。
激活
表示方式
说明
- 激活表示该对象被占用以完成某个任务,去激活指的则是对象处于空闲状态、在等待消息。
- 在 UML 中,为了表示对象是激活的,可以将该对象的生命线拓宽成为矩形。其中的矩形称为激活条(期)或控制期,对象就是在激活条的顶部被激活的,对象在完成自己的工作后被去激活。
消息
表示方式
说明
- 消息是用来说明顺序图中不同活动对象之间的通信。因此,消息可以激发某个操作、创建或撤销某个对象。
- 在顺序图中,消息是由从一个对象的生命线指向另一个对象的生命线的直线箭头来表示的,箭头上面还可以表明要发送的消息名及序号。
- 消息可分为
- 简单消息(Simple Message)
- 同步消息(Synchronous Message)
- 异步消息(Asynchronous Message)
- 反身消息(Message to Self)
- 返回消息(Return Message)
三、顺序图建模
对系统动态行为建模的过程中,当强调按时间展开信息的传送时,一般使用顺序图建模技术。一个单独的顺序图只能显示一个控制流。一般情况下,一个完整的控制流是非常复杂的,要描述它需要创建很多交互图(包括顺序图和协作图),一些图是主要的,另一些图用来描述可选择的路径和一些例外,再用一个包对它们进行统一的管理。
建模步骤
- 确定交互的范围
- 识别参与交互的对象和活动者
- 设置对象生命线开始和结束
- 设置消息
- 细化消息
四、简单的顺序图练习
请画出表示以下过程的顺序图:
- 借阅者希望通过图书管理员借阅某本图书;
- 借阅者将图书证和图书交给图书管理员;
- 图书管理员将读者图书证编号和图书编号录入借阅图书界面 LendBookWindow;
- 借阅图书界面 LendBookWindow 根据图书编号向 Book 类对象请求加载图书信息;
- Book 类对象返回图书信息给借阅图书界面 LendBookWindow;
- 借阅图书界面 LendBookWindow 请求将图书信息和借阅者编号添加到 Loan 类对象中;
- Loan 类对象添加借阅信息,返回借阅成功给借阅图书界面 LendBookWindow;
- 借阅图书界面 LendBookWindow 显示借阅完成;
- 图书管理员将图书证和图书归还给借阅者
答案:
软件工程复习笔记 顺序图(时序图)
来一粒 4869 原创 于 2020-12-21 11:48:33 发布
前言
copy 自老师的 PPT,不只有知识点,还有一些相关内容的介绍顺便复制进来了。如有问题请多指教。
顺序图
顺序图也称为时序图,它描述了系统中,对象间通过消息进行的交互,它强调了消息在时间轴上的先后顺序。
顺序图的作用
顺序图常用来描述用例的实现,它表明了由哪些对象,通过消息相互协作来实现用例的功能,在顺序图中,标识了消息发生交互的先后顺序。顺序图对于建模一个用例的场景很有用。
顺序图的组成元素
顺序图中的元素包括对象、生命线、控制焦点、消息。消息表示了对象间的通讯,生命线表示了对象的生存期,控制焦点表示对象正在执行一些活动。
对象
顺序图中对象的符号和对象图中对象所用的符号一样。将对象置于顺序图的顶部意味着在交互开始的时候对象就已经存在了,如果对象的位置不在顶部,那么表示对象是在交互的过程中被创建的。
生命线
生命线是一条垂直的虚线,表示顺序图中的对象在一段时间内的存在。每个对象的底部中心的位置都带有生命线。生命线是一个时间线,所用的时间取决于交互持续的时间。
控制焦点
在对象的生命线上,包含一个矩形,表示对象处于激活状态,处于激活状态的对象正在执行某个任务。对象在完成自己的工作后,被去激活,对象就处于空闲状态。
消息
- 消息是从一个对象到另一个或者几个其他对象的信息传递,简单地说,消息就是对象与对象、或者对象与参与者之间的某种通信方式。
- 消息可以是一个信号或一次操作调用,收到消息即为事件。可以有两种消息,一种是从发送者向接收者发送信号,另一种是由调用者调用接收者的操作。
- 对象之间的协作通过相互发送消息实现。
消息的分类
在 UML 中,将对象之间的消息分为五种类型:调用、返回、发送、创建和销毁。
- 调用(call):这是最常用的一种消息,它表示调用某个对象的一个操作(通常格式为 “对象名。成员方法”)。可以是对象之间的调用,也可以是对象本身的调用(局部调用)。
- 返回(return):返回表示被调用的对象向调用者返回一个值。在 UML 的交互图中,将采用如虚线箭头线来表示,在箭头线上应标明返回值。
- 发送(Send):发送是指向对象发送一个信号。信号和调用不同,它是一种事件,用来表示各对象间进行通信的异步激发机制。
关于调用和信号的说明:
- 调用是同步的机制,而信号是一种异步的机制。也就是说:当我们说对象 A 调用对象 B 时,A 发送完消息之后是会等 B 执行完所调用的方法之后再继续执行;如果说对象 A 发送了一个信号给对象 B,那么 A 在发送完信号之后,A 就会继续执行自己的操作,不会等待 B 的执行。
- 创建(Create)和销毁(Destroy):也就是创建和销毁一个对象。创建对象通常是利用构造方法来实现的,对象一创建,生命线就开始;生命终止符号用一个较大的叉形符号表示。
顺序图提供动态视角
类图只是对 CarOwner、CarKey、Car 所构成的系统的静态视角描述。顺序图提供了一种动态的视角。它是如何做到的呢?是通过展示从一个实体传递到另一个实体的消息。
顺序图的开始部分
锁车顺序图
对消息建模后完成顺序图
例 饮料销售机问题域
- 买饮料的正常场景,下面是买到饮料的一般事件流:
- 顾客从机器的前端钱币口投入钱币,然后选择想要的饮料;
- 币到达钱币记录仪,记录仪更新自己的存储;
- 记录仪通知分配器分发饮料到机器前端;
- 饮料 “已售完” 的场景
4. - 机器没有合适的零钱
顾客买饮料时,机器没有合适的零钱 “找不开” 的场景。
- 带有临时对象的顺序图
该顺序图表示了发送消息 2 后,创建一个临时对象 c,其生命线的尾部的叉号,表示销毁对象 c。
例 带界面的简易计算器
时序图
应用程序框架结构
应用程序框架结构是一个可以重复使用的,大致完成的应用程序。可以通过对其进行定制开发成一个客户需要的真正的应用程序。
MVC 设计模式
例 用户登录(有时间再完善)
- 使用 MVC 模式实现
- 基于 Web 的模式进行开发
登录时序图
SSH
包图
包图:由包和包之间的关系组成。包的图标就如同一个带标签的文件夹。
- 包提供了一种用于组织各种元素的分组机制。在 UML 中,包用来对元素进行分组,并为这些元素提供命名空间。
- 包所拥有的或者引用的所有元素称为包的内容,包没有实例。
软件工程 - 顺序图(时序图)
wnrun 原创 于 2021-11-15 20:27:46 发布 一、定义
- 用来描述对象之间动态的交互关系。着重体现对象之间消息传递的时间顺序。
- 顺序图将交互关系表示为一个二维图。其中,纵轴是时间轴,时间沿竖线向下延伸。横轴代表了在协作中各位独立的对象。
二、时序图的组成
时序图包含了 5 个元素:
- 参与者
- 对象(Object)
- 生命线(Lifeline)
- 消息(Message)
- 激活(Activation)
- 约束(Constraint)
1. 对象
- 如果对象位于时序图的顶部,说明在交互开始之前该对象已经存在。
- 如果对象是在交互的过程中创建的,那么它应当位于图的中间部分。
对象包括三种:
- 指定类名和对象名的对象
objectName:className
- 指定类名但没有对象名的对象(匿名对象)
:className
- 指定对象名但不指定类名的对象
objectName
图形表示:
第一类:
第二类:
第三类:
创建对象的两种方法:
1.1 对象的撤销
如果要撤销一个对象,只要在其生命线终止点放置一个 “X” 符号即可,该点通常是对删除或取消消息的回应。
2. 生命线
- 生命线是一条垂直的虚线,表示时序图中的对象在一段时间段内的存在。每个对象的底部中心的位置都带有生命线。
- 生命线是一个时间线,从顺序图的顶部一直延伸到底部,所用的时间取决于交互持续时间。
3. 消息
- 消息是对象之间某种形式的通信,它可以激发某个操作、唤起信号或导致目标对象的创建或撤销。
- 消息是两个对象之间的单路通信。
- 消息可以用于在对象间传递的参数。
- 消息可以是信号的,也可以是调用的。
4. 激活
- 激活表示该对象被占用以完成某个任务,去激活指的则是对象处于空闲的状态、在等待消息。
- 在 UML 中,为了表示对象是激活的,可以将该对象的生命线拓宽成为矩形。其中的矩形称为激活条或控制期。
5. 消息分类
1. 同步消息
- 发送者要发送一条消息且接收者已经做好接收这个消息的准备才能传送的消息叫同步消息。实心箭头。消息的名称是被调用者的方法名。
2. 异步消息
- 发送者不管接收者是否做好准备都可以发送的消息叫异步消息。
3. 返回消息
4. 创建对象
5. 撤销对象
6. 自关联消息
6. 约束
- 约束条件
- 消息前加约束条件。通常有条件约束、循环约束。
- 条件约束:[条件],只有在符合条件时,才发送消息。
- 循环约束:[条件]
- 约束片段
片段类型 | 名称 | 说明 |
---|---|---|
Opt | 选项 | 包含一个可能发生或可能不发生的序列。可以在临界中指定序列发生的条件。 |
Alt | 抉择 | 包含一个片段列表,这些片段包含备选消息序列。 在任何场合下只发生一个序列。 可以在每个片段中设置一个临界来指示该片段可以运行的条件。 else 的临界指示其他任何临界都不为 True 时应运行的片段。 如果所有临界都为 False 并且没有 else,则不执行任何片段。 |
Loop | 循环 | 片段重复一定次数。 可以在临界中指示片段重复的条件。 Loop 组合片段具有 “Min” 和 “Max” 属性,它们指示片段可以重复的最小和最大次数。 默认值是无限制。 |
Break | 中断 | 如果执行此片段,则放弃序列的其余部分。 可以使用临界来指示发生中断的条件。 |
Par | 并行 | 并行处理。片段中的事件可以交错。 |
Critical | 关键 | 用在 Par 或 Seq 片段中。 指示此片段中的消息不得与其他消息交错。 |
Seq | 弱顺序 | 有两个或更多操作数片段。 涉及同一生命线的消息必须以片段的顺序发生。 如果消息涉及的生命线不同,来自不同片段的消息可能会并行交错。 |
Strict | 强顺序 | 有两个或更多操作数片段。 这些片段必须按给定顺序发生。 |
Consider | 考虑 | 指定此片段描述的消息列表。 其他消息可发生在运行的系统中,但对此描述来说意义不大。 在 “Messages” 属性中键入该列表。 |
Ignore | 忽略 | 此片段未描述的消息列表。 这些消息可发生在运行的系统中,但对此描述来说意义不大。 在 “Messages” 属性中键入该列表。 |
Assert | 断言 | 操作数片段指定唯一有效的序列。 通常用在 Consider 或 Ignore 片段中。 |
Neg | 否定 | 此片段中显示的序列不得发生。 通常用在 Consider 或 Ignore 片段中。 |
循环分支属于业务流程中比较常见的特殊结构。
- loop,也叫循环,是满足循环条件的前提下,不断地重复做某些事情;
- alt,条件分支,是根据不同的条件选择不同的分支;
- opt,可选分支,是满足一定条件则执行该分支,否则就跳过。
如下图:
类图、用例图以及顺序图理解及绘制
徐二苗 原创 于 2023-07-12 15:47:19 发布
一、用例图
定义
用例图用于描述系统的功能需求和用户与系统之间的交互。
简单来讲:用例 + 参与者 + 关系(主要是用例与用例之间的关系)
1. 用例
用例表示系统提供的一项功能或者用户场景,用椭圆形图标表示,用于描述具体的操作和系统的行为,所以画图找动词性语句。
2. 参与者
与系统进行交互的外部实体,也就是谁用系统干什么,谁就是参与者,大多都是用户、管理员这些。
3. 主要关系介绍(重点)
(1)包含
如果 B 是 A 的某项子功能,并且建模者确切地知道用例 A 所对应的动作序列中将在何时调用用例 B,则称用例 A 包含用例 B。可以将包含关系类比为一个大的任务或功能(主要用例),其中包含了一些更小的任务或功能(被包含的用例)。被包含的用例代表主要用例中的一部分特定功能,这些功能在不同的情况下可能会被调用或排除。
再不理解,举个例子:考虑一个主要用例是 “下订单”,而包含用例是 “验证库存” 和 “生成订单号”,那么这两个包含用例的功能会在下订单的过程中被调用和执行。
(2)扩展
用于表示一个用例可以在特定条件下扩展为另一个用例。它描述了在某些情况下,系统可以根据额外的需求或条件添加额外的功能或行为。可以将用例图中的扩展关系理解为一种特殊情况下的附加功能。在某些情况下,系统可以根据额外的需求或条件添加一些额外的功能,以扩展原有的主要功能。
举个例子:可以将扩展关系看作是 “如果… 那么” 的关系。考虑一个主要用例是 “购买商品”,而一个扩展用例是 “使用优惠券”,那么当用户有优惠券时,可以选择使用该扩展功能。
说明:申请借阅证为子用例,而登录为基用例(基本用例)。
(3)继承(泛化)
用于表示一个用例继承了另一个用例的功能和行为,在用例图中使用带有箭头的实线表示,箭头从子用例指向父用例。子用例继承了父用例的功能和行为,并可以在此基础上进行扩展或定制。
举个例子:考虑一个父用例是 “支付订单”,而子用例是 “信用卡支付” 和 “支付宝支付”,那么子用例继承了父用例的支付功能,但可能有不同的支付方式和细节。
4. 总结
- 继承关系表示子用例继承父用例的功能。
- 扩展关系表示用例在特定条件下可以扩展或增加功能。
- 包含关系表示一个用例包含其他用例的通用功能。
- 关联关系是参与者与用例之间的关系,比较固定。
5. 绘制简单举例
在此强调一点,就是画图没有绝对的正确或错误,所以希望大家不要钻牛角尖~
试画出学生成绩管理的用例图。用例有:登录;找回密码;录入、修改、保存、查询、删除成绩,参与者有教师和学生。
二、类图
定义
是一种图形表示方法,用于描述对象(类)之间的关系和属性。
简单来讲就是:类 + 关系(类与类之间的关系),主要找名词性语句。
1. 关系(重点)
(1)关联
有普通关联和组合以及聚合三类关系,其中,组合关系就是一对一(如果整体对象被销毁,部分对象也会被销毁),聚合关系就是一对多(一个类对象包含了其他类对象,但这些对象可以独立存在于整体之外。),聚合和组合都是特殊的关联,除去特殊关联之外,剩下的就是普通关联。
普通关联
组合关系
聚合关系
说明:学校由许多班级组成,每个班级又有许多学生。这里,学校是一个整体,班级是学校的一部分,学生是班级的一部分,整体类为学校,部分类为班级,即使学校不存在,班级和学生也是存在的,所以区分组合和聚合很重要的一点就是整体对象的存在是否可以直接决定部分对象的生命周期。
(2)继承(泛化)
继承没有什么好讲的,和用例图理解差不多。
(3)实现
用于描述类与接口之间的关系。通俗地说,实现关系表示一个类实现了一个或多个接口的功能。(类通过实现接口,表明它们能够提供接口所规定的行为)
说明:定义一个名为 “Shape” 的接口,其中包含一个 “draw ()” 方法。然后,可以创建具体的形状类,如 “Circle”、“Rectangle” 和 “Triangle”,并让它们实现 “Shape” 接口。
(4)依赖
用于描述一个类在某些情况下需要依赖于另一个类。通俗地说,依赖关系表示一个类在某些操作中使用了另一个类的对象或服务。
说明:这里,“EmailSender” 类依赖于 “NetworkConnection” 类,因为它需要使用 “NetworkConnection” 类的对象来发送电子邮件。
2. 绘制简单举例
三、顺序图
定义
是一种描述对象之间交互顺序的行为图。通俗地说,顺序图用于展示系统中不同对象之间的消息传递和交互顺序,以便更好地理解对象之间的时序关系。
1. 理解
在顺序图中,参与者之间通过箭头表示消息的传递。消息可以是一个操作调用,例如一个对象调用另一个对象的方法,或者是一个信号传递,表示一个对象向另一个对象发送了一个通知。
顺序图中的时间从上到下流动,表示对象之间消息传递的顺序。顺序图可以显示参与者之间的交互过程,包括消息的发送和接收,以及操作的执行顺序。
和流程图很相似。
2. 绘制简单举例
说明:因为此处涉及到边界类、实体类以及控制类知识点,所以建议大家学完这些再去理解和绘制顺序图。
UML 顺序图(序列图、时序图)
爱摸鱼的呆瓜 原创 已于 2023-11-23 18:32:36 修改
1.1 什么是用例
用例是一个系统提供给参与者的外部接口,代表着一系列交互步骤,最终目标是要实现参与者的目标。用例的表达有条简洁至上的原则,即越朴素越好,越不涉及代码知识越好,而且用例很难与类、接口等元素一一对应。因此,为了方便开发人员统筹和协调各个类和对象。
1.2 什么是顺序图
顺序图用于描述系统功能的各个不同角色之间相互协作、传递消息的顺序关系。
顺序图(也被称作序列图、时序图)是按时间顺序显示对象交互的图,具体来说,它显示了参与交互的对象和所交换信息的先后顺序,用来表示用例中的行为,并将这些行为建模成信息交换。
由于在绘制顺序图之前一般已经做过了分析类的工作,所以在顺序图中,可以引分类和对象的概念来帮助建模。当执行一个用例行为时,顺序图中的每一条消息对应了一个类的操作或状态机中引起转换的触发事件。也就是说,顺序图在一个编程人员可以理解的模型基础上对用例进行了翻译,把抽象的各个步骤转化成大致的消息传递序列,供程序员们按图索骥。并且,图这一形式本身用来表达一些序列就是极为恰当的,这也就使得顺序图成为描述一个过程的强有力的工具。
顺序图主要包括四个元素:对象(object)、生命线(lifeline)、激活(activation)和消息(message)。在 UML 中,顺序图将交互关系表示为一张二维图。其中纵向代表时间维度,时间向下延伸,按时间依次列出各个对象所发出和接收的消息。横向代表对象的维度,排列着参与交互的各个独立的对象。一般主要参与者放在最左边,次要参与者放在最右边。
顺序图是按时间顺序描述一个交互及消息传递的一种方式,顺序图主要有以下三种作用:
- 细化用例的表达。
- 有效地描述类职责的分配方式。
- 丰富系统的使用语境的逻辑表达。
1.3 顺序图的组成元素
1. 对象与生命线
顺序图中的对象与对象图中的概念一样,都是类的实例。顺序图中的对象可以是系统的参与者或者任何有效的系统对象。对象的创建由头符号来表示,即在对象创建点的生命线顶部使用显示对象和类名的矩形来标记,二者用冒号隔开(即对象名:类名)这种格式。
在位置上,一个被放置于顺序图顶端的对象,意味着在这个交互开始之前,我们已经拥有这样一个对象了。如果一个对象出现在其他位置上(不在顶端),则说明这个对象是在交互执行到某些步骤的时候被创建出来的,被创建出来的对象可以在接下来的时间里被其他对象的消息所激活,也可以以同样的方式被销毁。
对象在其在顺序图中的生命周期表示为一条生命线。生命线代表了一次交互中的一个参与对象在一段时间内存在。具体地说,在生命线所代表的时间内,对象一直是可以被访问的 —— 随时可以发送消息给它。
2. 激活
激活,又称为控制焦点,表示一个对象执行一个动作所经历的时间段,既可以直接执行,也可以通过安排下级过程来执行。同时,激活可以表示对应对象在这段时间内不是空闲的,它正在完成某个任务,或正在被占用。一般来说,一个激活的开始应该是收到了其他对象传来的消息,这段激活会处理该消息,执行一些相关操作,然后反馈或者进行下一步消息传递。通常来说,一个激活结束的时候应该伴有一个消息的发出。
激活在 UML 中用一个细长的矩形表示,显示在生命线上。矩形的顶部表示对象所执行动作的开始,底部表示动作的结束。
3. 消息
消息是从一个对象(发送者)向另一个对象(接收者)发送信号,或由一个对象(发送者或调用者)调用另一个对象(接收者)的操作。消息是对象和对象协同工作的信息载体,它代表了一系列实体间的通信内容。消息的实现有不同的方式,如过程调用、豆式地产:生一个事件、活动线程间的内部通信等。例如,当某对象调用了另一个对象的一个操作时,就可以看作是两个对象之间通过发送消息来达成的。
发送信号和调用类的操作是相似的。他们都是两个对象之间的通信,以此来传递信息值,接收者所接受到的值来做出相应的反应,然而在现实层面上,信号和调用各自有不同的特性和细节行为,因此二者是不同的 UML 元素。
在顺序图中,消息表示为从一个对象的生命线指向另一个对象的生命线的箭头。有些信息可能是从外部发来的。在不确定外部对象的类型时,也可以从图的边缘处引入箭头来表示外部消息。顺序图中不同生命线上的时标是相互独立的,所以箭头和生命线所成的角度不具有任何意义。对于某一对象发给自己的消息,箭头的起点和终点都是在同一条生命线上。消息按照时间顺序从图的顶部到底部垂直排列。如果一个收到信息的对象还没有被激活,那么这条消息将会激活这个对象。
最常见的消息是简单消息(又被称为顺序消息)。简单消息的图形表示也同样简单,只要用一个实心箭头就可以。简单消息表示控制流,可以泛指任何交互,但不描述任何通信信息当你的设计不需要复杂的消息类型,或者能很容易判断出顺序图中各个消息的消意类型时,为简单起见,你可以将所有的消息都画成简单消息。
在传送一个消息时,对消息的接收往往会产生一个动作。这个动作可能引发目标对象以及该对象可以访问的其他对象的状态改变。根据消息产生的动作,消息也有不同的表示。在 UML 中,有以下几种主要动作:
- 调用:调用某个对象的一个操作。可以是对象之间的调用,也可以是对对象本身的调用,即自身调用或递归调用。调用属于同步机制,例如:当对象 A 发送消息调用对象 B 时,A 会等待 B 执行完所调用的方法后再继续执行。在 UML 中使用一个头部为实心三角的箭头来表示调用。
- 返回:返回消息不是主动发出的,而是一个对象接收到其他对象的消息后返回的消息。很多情况下一个消息的接收会要求一个返回,如果把所有对源消息的返回全部绘制在顺序图中,图将变的复杂难以阅读。所以仅需要绘制重要的返回消息。在 UML 中虚线箭头表示返回。
- 创建:创建一个对象时发送的消息,在 UML 中使用具有 <> 构造型的消息表示。
- 销毁:销毁一个对象(也允许对象销毁自身)。
1.4 顺序图中的结构化控制
在 UML 1.x 中,顺序图十分不擅长表示循环行为和条件行为。因此在 UML 2.0 以上的标准中,顺序图被赋予了更强大的能力。UML 标准给顺序图提供了 “片段”(fragment)机制,一个片段有一个关键字,可以包含一个消息序列甚至更多子片段。新增的结构化控制操作符使得我们可以通过顺序图来表达更加复杂的动作序列。在 UML 2 中将控制操作符表示为顺序图上的一个矩形区域,其左上角有一个写在一个小五边形内的标签,表明控制操作符的类型。操作符对穿过它的生命线发挥作用。如果一条生命线刚好运行到操作符某一位置,操作符可以决定将其中断,并在操作符的另一位置重新开始。下面简要介绍几种常见的控制类型。
1. 可选片段
关键字为 opt,表示一种单条件分支。如果对象生命线在进入操作符的时候满足中括号中的条件,那么操作符的主体就会得到执行。监护条件是一个用中括号括起来的布尔表达式,它可能出现在主体内部任何一条生命线的顶端,它可以引用该对象的属性。
2. 条件片段
关键字为 alt,表示一种多条件分支。如果需要根据控制条件是否被满足而做出不同的决策,那么可以在条件执行的片段内部使用虚线隔开不同区域。当生命线运行到这一区域时,根据片段中注明的条件,选择其中一个区域执行。如果有多于一个监护条件为真,那么选择哪个分区是不确定的,而且每次执行的选择可能不同。如果所有的监护条件都不为真,那么控制将跨过这个控制操作符而继续执行。其中的一个分区可以用特殊的监护条件 [else],如果其他所有区域的监护条件都为假,那么执行该分区。
3. 并行片段
关键字为 par,表示片段内有两个或更多的并行子片段。当顺序图执行到并行片段时,所有子片段可以同时开始执行,它们之间的消息传递是并行的。
4. 循环片段
关键字为 loop,表示一个循环。使用循环片段以及循环片段中的条件符号,可以得到一个循环结构,只要被包括在条件符号中的条件仍然满足,那么就继续进行循环块中的工作,直到循环条件为假,跳出循环块,进入下一段生命线。
5. 交互片段
关键字为 ref,表示对一段交互的引用。在一个交互图中使用交互片段来引用其他交互图。其表示方法是在操作符为 ref 的片段矩形中写明引用的交互图名称。当有一段交互需要经常被执行时,可以使用交互片段将其预先打包成一个顺序片段,后面在需要进入这一段流程时仅仅 “调用” 这一功能即可。
下图显示了一个登录用例的简单顺序图的表示法,其中使用了循环片段与可选片段。循环片段用来表示当密码输入错误时用户需要继续停留在登录页面填写密码;可选片段用来表示当密码输入成功时才显示登录成功的提示信息。
via:
- 顺序图-CSDN博客
https://blog.csdn.net/litianxiang_kaola/article/details/53957312 - 顺序图解析与实践-CSDN博客
https://blog.csdn.net/Shaft_/article/details/79928912 - 软件工程复习笔记 顺序图(时序图)_顺序图和时序图一样吗-CSDN博客
https://blog.csdn.net/qq_43661601/article/details/111467412 - 软件工程-顺序图(时序图)-CSDN博客
https://blog.csdn.net/wnrun/article/details/121341969 - 类图、用例图以及顺序图理解及绘制-CSDN博客
https://blog.csdn.net/m0_46235100/article/details/127137562 - UML顺序图(序列图、时序图)-CSDN博客
https://blog.csdn.net/m0_58111460/article/details/134583658