UML 的概述 和 顺序图

本文详细介绍了UML标准建模语言中的顺序图,包括传统顺序图的定义和局限,以及如何通过扩展来表达并发、同步和选择关系。重点讲解了并发群、同步群和选择群的概念,并通过实例展示了如何在顺序图中清晰地描绘复杂系统行为。
摘要由CSDN通过智能技术生成

UML 的概述 和 顺序图

标准建模语言 UML 是一种直观化、明确化和文档化的通用可视化建模语言。它捕捉了被构建系统的有关决策和理解,用来理解、设计、浏览、配置、维护以及控制系统的信息。

由于复杂系统的建模往往需要进行严格的形式化分析和验证,而 UML 却是半形式化的,因为其语法结构虽然采用了形式化的规约,但其语义部分还是用自然语言描述的,缺乏准确的语义,这使得对模型难以进行定量定行的分析和验证。针对这一问题,UML 形式化方法的研究已经成为热点。形式化方法使用具有精确数学语义基础的形式化规范语言对系统的需求分析、设计进行描述,它具有精确定义的语义模型、自动化验证工具的支持,可以对软件规范进行严格的分析和验证。

1. UML 的定义

UML 是一种通用的可视化建模语言,描述在软件开发方法中用于表示设计的符号(通常是图形符号)。UML 的定义包括 UML 语义和 UML 表示法两个部分。

UML 语义:描述基于 UML 的精确元模型定义。元模型为 UML 的所有元素在语法和语义上提供了简单、一致、通用的定义性说明,使开发者能在语义上取得一致,消除了因人而异的最佳表达方法所造成的影响。此外 UML 还支持对元模型的扩展定义。

UML 表示法:定义 UML 符号的表示法,为系统建模提供了标准。这些图形符号和文字所表达的是应用级的模型,在语义上它是 UML 元模型的实例。

2. UML 的构成

UML 构成中,主要介绍模型元素和图形。

2.1 模型元素

UML 的模型元素代表面向对象中的类、对象、消息和关系等概念,是构成图的最基本的常用概念,也就是说可以在图中使用的概念都可以称之为模型元素。模型元素用相应的符号来表示,比如,类、对象、用例等模型元素在 UML 中均有对应的符号表示。

2.2 图形

UML 的图形由模型元素的符号组成,它表示系统的一个特殊部分或某个方面。UML 规范定义了九种图形来从不同方面描述系统,分别是:

名称概述例子
用例图(Use-Case Diagram)用于显示若干角色(actor)及这些角色与系统提供的用例之间的关系。其中,角色是与系统进行交互的外部实体,可以是系统用户,也可以是其他系统或硬件设备;用例是系统提供的功能(即系统的具体用法)的描述。
对象图(Object Diagram)是类图的实例。它及时具体地反映了系统执行到某处时系统的工作状况。对象图中使用的图示符号与类图几乎完全相同,只不过对象图中的对象名上加了下划线。对象图没有类图重要,对象图通常用来示例一个复杂的类图,通过对象图反映真正的实例是什么,它们之间可能具有什么样的关系,帮助对类图的理解。在这里插入图片描述
类图(Class Diagram)用来表示系统中类和类之间的关系,如关联、聚合等,也包括类的内部结构(类的属性和操作)。类图描述的是一种静态关系,所以在系统的整个生命期都是有效的。在这里插入图片描述
状态图(State Diagram)一般来说,状态图是对类所描述事务的补充说明,它显示了类的对象可能具备的所有状态,以及那些引起状态改变的实践。状态的变化称之为转移(transition)。一个转移可以有一个与之相连的动作(action),这个动作指明了状态转移时应该做些什么。
顺序图(Sequence Diagram)用来反映若干对象之间的动态协作关系,也就是随着时间的流逝,对象之间是如何交互的。顺序图重点是显示对象之间已发送的消息的先后次序,说明对象之间的交互过程,已经系统执行过程中,在某一具体位置将会有什么事件发生。
协作图(Collaboration Diagram)像顺序图一样显示动态协作。除了显示消息的交换(称之为交互)以外,协作图还显示了对象以及它们之间的关系(有时指上下文)。协作图当做一个对象图来绘制,它显示多个对象以及它们之间的关系。
活动图(Activity Diagram)用于反映一个连续的活动流,主要描述满足用例要求所要进行的活动以及活动之间的约束关系,有利于识别并发活动。活动图由各种动作状态(action state)组成,每个动作状态包含可执行动作的规范说明。当某个动作完成后,该动作的状态就会随着改变,转换为一个新的状态。这样,动作状态的控制就从一个状态流向另一个与之相连的状态。在活动图中,实心圆表示活动图的起点,带边框的实心圆表示终点;圆角矩形表示执行的过程或活动;菱形表示判定点;箭头表示活动之间转换,箭头上的文字表示转换所必须满足的条件;而粗线条表示会并发进行的过程的开始和结束。活动图中的动作可以放在泳道中,泳道聚合一组活动,并指定负责人和所属组织,泳道用纵向矩阵来表示,属于一个泳道的所有活动均放在其矩形符号内,泳道的名字放在矩形符号的顶部。其中动作 “更新显示” 在 Displayer 内执行,动作 “初始化” 和 “测量” 在 Sampler 内执行。活动图是一种描述交互的方式,描述采用何种动作,做什么(对象状态改变),何时发生(动作序列),以及在何处发生(泳道)在这里插入图片描述
组件图(Component Diagram)用来反映代码的物理结构。组件可以是源代码、二进制或可执行文件组件。组件包含了逻辑类或逻辑类的实现信息,因此逻辑视图与组件视图之间存在着映射关系。
配置图(Deployment Diagram)定义系统中软硬件的物理拓扑结构以及自此结构上执行的软件。它可以显示实际的计算机和设备之间的连接关系,也可显示连接的类型及部件之间的依赖性,还可以显示网络之间的通信路径。配置图常常用于理解分布式系统。

从应用的角度看,当采用面向对象技术设计系统时,

  1. 首先是描述需求;
  2. 其次根据需求建立系统的静态模型,以构造系统的结构;
    • 其中在第一步和第二步中所建立的模型都是静态的,包括用例图、对象图、类图(包括包)、组件图和配置图五个图形,是标准建模语言 UML 的静态建模机制。
  3. 第三步是描述系统的行为。
    • 而第三步中所建立的模型或者可以执行,或者表示执行时的时序状态或交互关系。它包括状态图、活动图、顺序图、协作图四个图形,是标准建模语言 UML 的动态建模机制。

3. UML 顺序图

3.1 传统顺序图

UML 动态建模机制中,顺序图可以用来展示对象之间是如何进行交互的。为了区分,我们暂且将 UML 定义的传统意义上的顺序图称为传统顺序图。传统顺序图将显示的重点放在消息序列上,即消息是如何在对象之间被发送和接受的。顺序图有两个坐标轴:垂直坐标轴用来显示时间,水平坐标轴用来显示一组对象。首先详细介绍下顺序图中所涉及的主要内容:

  1. 对象(Object):对象是类的实例表示,在顺序图中显示的对象都是在该消息序列中所设计的对象,对象被依次放置在水平坐标轴上,每一个对象都是用一个矩阵来表示,并且矩阵中的对象或类名都带一条下划线。其中对象的命名表示为 对象名:对象所属类 ,其中对象名可以省略。
  2. 生命线(Lifeline):在每一个对象下面,都有一条垂直的虚线,称作对象的生命线,它指示了对象在消息序列中的执行情况(例如,消息被发送或接受,对象的激活等)。一个对象的生命线代表了该对象在某个特定时间的存在,它是用一条从对象矩阵一直向下延伸到图的底部的虚线来表示的。
  3. 激活(Activation):当对象接收到一个消息时,该对象中的一项活动就会启动,我们把这一活动称作激活。激活会显示控制焦点,表明对象在某一个时间点开始执行。一个被激活的对象或者是执行它自身的代码,或者等待另一个对象的返回(该被激活的对象已经向另一个对象发送了信息)。在图形上,激活被绘制为对象生命线上的一个瘦高矩形。
  4. 消息(Message):对象之间的通信(即消息)用一些位于各个对象的生命线之间的水平消息线来表示。需要说明的一点是,对象也可以给它自己发送消息。水平消息线的箭头确定了消息的类型。在 UML 中使用的消息类型有三类:
    • 在这里插入图片描述

    • 简单消息:象征一个平直的控制流。简单消息显示了控制室如何从一个对象传递到另一个对象的,这个过程中并没有描述任何有关对象之间通信的细节信息。它也可以用于显示一个同步消息的返回,在绘制时应该从处理该消息的对象引向调用者,表示控制正在传回来(也可能会同时是传回一些结果)。

    • 同步消息:一个嵌套的控制流,一般是作为操作调用来实现的。只有在处理该消息的操作结束之后(包括作为处理过程的一部分而发送的任何进一步的消息),调用者才能够恢复继续执行。消息的返回可以在顺序图中以一个简单消息的形式显示。

    • 异步消息:异步的控制流,其中没有显式的到调用者的返回消息。对象之间的异步消息表明了不等待语义,发送者不必等待该消息处理完就可以继续执行。

  5. 返回(Return):当消息需要返回结果时(通常来自同步消息,如操作调用)也是用箭头(使用的室代表简单消息的箭头)来表示,指示为了与发送消息相区别,消息的返回以带箭头的虚线表示。但是要注意,顺序图并不会总是显示消息的返回。
  6. 条件(Condition):消息可以有条件。在这种情况下,只有当条件为真时,该消息才能被发送出去或者被接收到。条件通常用来决定是否发送消息,在顺序图中,条件一般在消息前面以一对方括号给出。

在这里插入图片描述

一般在浏览顺序图时,应该从图的顶部开始往下查看,分析那些随着时间的流逝而发生的消息交换。尽管传统顺序图能够比较清晰地表示对象之间的消息传递,尤其是消息传递的先后次序,但由于基本表示有限,因此对于消息传递的很多机制不能很好地表示出来,有些关系(如并发、同步等)无法表示出来,而有些关系(如选择)往往需要多个顺序图合作表示,例如,假设要在传统顺序图中描述“开户”这一情节,则用顺序图表示时,需要考虑开户成功和开户失败两种情况,这时就需要两种情况分别建立两个顺序图表示。因此,传统顺序图在表达能力上还有一定的局限性。

3.2 扩展顺序图

为了更好地描述系统的行为,我们将 UML 中的传统顺序图进行扩展,使之能够对在大型系统中发生的并发、选择、同步等性质进行建模,具体扩展的性质定义如下:

3.2.1 定义1

如果一个对象发送给另外多个对象的消息在执行上不存在因果联系,互不影响,则我们称这些消息的执行是并发(concurrence)的。

由于顺序图主要是用来表达用例中的某个场景,因此顺序图的画法和定义元素决定了顺序图无法表达对象之间的并发,但经过扩展,我们可以表达顺序图中存在的一种特殊形式的并发,

该并发关系在扩展顺序图中表示为在相应对象生命线右侧带有实端点的实线。只要由一个对象发布的消息位于该对象生命线右侧的并发线标记范围内,被标记为实端点,该消息就被认为是并发群(concurrency group)中的一员。并发群中的所有消息可以并发执行,且任何一个或多个消息的执行不会影响并发群中其他消息的执行。

在这里插入图片描述

对象 Object1 发给 Object2 的消息 Message1() 和发送给 Object3 的消息 Message2() 属于该对象的同一个消息并发群,即两个消息的执行没有因果关系,互不影响。

3.2.2 定义2

如果当且仅当其他多个对象发送给某个对象发送给某个对象的信息的执行都完成之后,该对象的后续动作才能执行,则这几个消息之间的关系称为同步关系(synchronization),且在该对象处同步。

同步关系在扩展顺序图中表示为与同步消息箭头对应的对象生命线另一侧带实心端点的虚线。到达某个对象的消息,只要位于该对象同步虚线标记范围内,被标记为实心端点,则这些消息均被认为是同步群(synchronization group)中的一员。某个对象的同步群中的消息只有全部到达该对象后,该对象才可以执行下一个动作(发送消息或进行操作方法的调用),同步群中只要有一个消息未到达,该对象也无法执行下一个动作,只能等待全部消息的到达。

在这里插入图片描述

Object2 执行调用 Message1() 的返回结果 Ack1Object3 执行调用 Message2() 的返回结果 Ack2 属于对象 Object1 的同一个同步群,且该同步群中只有这两个返回消息,因此只有 Ack1Ack2 两个消息都返回到 Object1 时,该对象的下一步动作才可以执行。

3.2.3 定义3

如果一个对象可以发送多个消息,但这些消息的发送执行是互斥的,即一个消息被发送执行后其他消息均不可以被发送执行,则这多个消息之间的关系被称为选择关系(choice)。

选择关系在扩展顺序图中表示为对象生命线右侧带空心端点的虚线。只要由一个对象发布的消息位于其生命线右侧的选择线标记范围内,被标记为虚端点,均被认为是选择群(choice group)中的一员。对象每次只能发送自己选择群中的一个消息,即每次选择群中有且只有一个消息能被触发执行,对象选择群中的消息彼此是互斥执行的。

在这里插入图片描述

对象 Object1 发送给对象 Object2 的调用信息 Message1() 和对象 Object1 发送给对象 Object3 的调用信息 Message2() 同属于 Object1 的选择群。即 Object1 要么选择发送调用消息 Message1() ,要么选择发送调用信息 Message2() ,但两个调用消息的发送执行是互斥的,不能同时都被调用发送。

3.2.4 定义4

在前面并发、同步、选择关系的定义及其表示的基础上,我们引申两种特殊关系在扩展顺序图中的定义以及表示方式。

在扩展顺序图中,如果选择群中所有的消息单独执行时都存在和某一个并发群中的消息并发执行,我们将这种关系称为选择并发关系(choice-concurrence)。

选择并发关系在扩展图中表示时既要体现正常的消息之间并发关系,还要表明并发群中存在选择关系,即具有选择关系的几个消息单独执行时和并发群中消息并发执行。表示时仍然是以带实端点的实线标记并发,不同的是存在选择关系的要在实端点上外加一个空心圆圈。

在这里插入图片描述

图中 Object1 发送给其余三个对象的消息均以实端点的实线所标注,其中发送给 Object2Object3 的消息上实端点外还有空心圆圈表示选择关系。即 Object1 可以在 Object2Object3 之间选择发送调用信息,即每次只能发送调用信息 Message1()Object2 或者发送消息 Message2()Object3 ,但无论发送哪个调用信息,在发送的过程中 Object1 均可以并发发送信息 Message3Object4 ,因此三者之间是选择并发关系,按图中所示,既体现了 Object1Object2Object3 的选择关系,又表明 Object2 或者 Object3 单独执行调用消息时都和 Object4 执行消息 Message3 的过程并发。

3.2.5 定义5

在扩展顺序图中,如果选择群中的每个消息单独执行时,或者选择群中每个同步消息的返回消息单独返回时,都存在和某一个消息或某个同步群中消息的同步,则我们将这种关系称为选择同步关系(choice-sychronization)。

和选择并发关系不同,选择同步关系要在扩展顺序图中分别表示出选择关系中的每一个消息和同步消息之间的同步关系,表示方法和一般同步的表示相同,之所以要分别表示是因为同步之后的动作往往和进行的选择密切相关。一般有两种情况:

3.2.5.1 情况一

若某个对象的选择群中任一个消息或其中同步调用的返回消息和同步群中的消息同步之后该对象所进行的下一步动作相同,则表示时仅仅分开表示每一个选择消息或其返回消息与同步消息之间的同步关系即可。

在这里插入图片描述

在上图中,具有选择关系的两个同步调用 Message1()Message2() 的返回消息 Ack1Ack2 单独返回对象 Object1 时均存在与调用 Message3() 的返回消息 Ack3 之间的同步,即 Object1 发送消息 Message4Object5 的前提是 Ack1Ack3 均到达 Object1 或者是 Ack2Ack3 两个消息均到达 Object1 .且在上图中无论是 Ack1Ack3 同步还是 Ack2Ack3 同步,同步之后的下一个操作均是 Object1 发送消息 Message4() 给对象 Object5

3.2.5.2 情况二

若根据选择的消息的不同,同步之后的下一步操作也有所不同,则在扩展顺序图中进行表示时,既要将每一组同步关系表示出来,还要将不同组同步后所对应的下一步动作范围分别表示出来,该范围中所有的动作必须与所选择的同步消息组紧密相关。同步之后的动作范围在扩展顺序图上表示时,是和相关同步组的同步线在一条垂直线上,以符号 [ 将同步后的消息范围标记出来。

在这里插入图片描述

在上图中,Object1 发送给 Object2Message1() 和发送给 Object3Message2() 消息调用之间是选择关系,且调用执行后的返回消息 Ack1Ack2 单独返回时都和 Object1 发送给 Object4 的消息调用 Message3() 的返回消息 Ack3 同步,但同步后分别对应不同的操作,即 Ack1Ack3 同步后执行 Object1Object2 的调用操作 Message4-1() ,进而 Object2 调用 Object5Message4-2() 操作;而 Ack2Ack3 同步后切执行 Object1Object3 的调用 Message5-1() ,进而 Object3 调用 Object5Message5-2() 操作。在图中同步后不同的操作范围均以 [ 标出,而操作范围之所以不同是与前面的选择息息相关的。

这样,通过在传统顺序图上对关系进行进一步的定义,所得到的扩展顺序图除了具有传统顺序图的所有特点之外,还具有能够清晰描述并发、同步、选择等性质的功能,同时扩展后的顺序图能够代表多个传统的顺序图,如选择关系的描述,因而自身的描述能力大大增强。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值