【UML用户指南】-20-对基本行为建模-交互图

news2024/11/26 18:31:58

目录

1、概述

2、顺序图

2.1、两个不同于通信图的特征:

2.1.1、顺序图有对象生命线

2.1.2、顺序图有控制焦点

2.2、结构化控制

2.2.1、可选执行opt

2.2.2、条件执行alt

2.2.3、并行执行par

2.2.4、循环迭代执行loop

2.3、嵌套活动图

3、通信图

3.1、两个不同于顺序图的特征

3.1.1、通信图有路径

3.1.2、通信图中有序号

4、语义等价

5、一般用法

6、设计过程

6.1、顺序图

6.2、通信图


顺序图和通信图(两者均被称为交互图)是UML中用于对系统的动态方面进行建模的5种图中的两种。

交互图表现的是一个交互,由一组对象和它们之间的关系组成,包括它们之间可能传递的消息。

顺序图是强调消息时间顺序的交互图,

通信图则是强调接收和发送消息的对象的结构组织的交互图。

UML中用于对系统的动态方面建模的其他3种图是活动图、状态图和用况图。

对系统的动态方面建模的较好方法是建立脚本的故事板,其中包括某些感兴趣的对象之间的交互以及在这些对象之间传递的消息。

建立故事板有两种方式:

1)一种方式强调消息的时间顺序,

2)另一种方式则强调进行交互的对象之间的结构组织。

用两种方式建立的图具有等价的语义,并且可以从一个图转换为另一个图而不丢失信息。

1、概述

交互图(interaction diagram)显示一个交互,由一组对象和它们之间的关系构成,其中包括在对象之间传递的消息。

1)顺序图 (sequence diagram)是强调消息的时间顺序的交互图。在图形上,顺序图是一个表,其中显示的对象沿 X 轴排列,而消息则沿 Y 轴按时间顺序排序。

2)通信图(communication diagram)是强调发送和接收消息的对象的结构组织的交互图。在图形上,通信图是顶点和弧的集合。

2、顺序图

顺序图强调消息的时间顺序。

形成顺序图时,首先把参加交互的对象或角色放在图的上方,沿水平轴方向排列。

通常把发起交互的对象或角色放在左边,较下级对象或角色依次放在右边。

然后,把这些对象发送和接收的消息沿垂直轴方向按时间顺序从上到下放置。

这样,就向读者提供了控制流随时间推移的清晰的可视化轨迹。

2.1、两个不同于通信图的特征:

2.1.1、顺序图有对象生命线

对象生命线是一条垂直的虚线,表示一个对象在一段时间内存在。在交互图中出现的大多数对象存在于整个交互过程中,所以这些对象全都排列在图的顶部,其生命线从图的顶部画到图的底部。

也可以在交互的过程中创建对象,它们的生命线从接收到create 消息时开始(画到生命线顶部的盒子上)。也可以在交互的过程中撤销对象,它们的生命线在接收到 destroy 消息时处结束(并且给出一个大X的标记表明对象生命的结束)。


如果交互表示特定的个体对象的历史,就把名字带下划线的对象符号放在生命线的顶部。然而,通常要展示的是原型化的交互。此时生命线表示的不是特定的对象,而是原型化的角色,它们代表交互的每个实例中的不同对象。在这种正规的情况下,无需为它们的名字加下划线,因为它们不是特定的对象。

特定的对象使用下划线

原型化的角色:不需要下划线

 如果一个对象改变它的属性值、状态或角色,则可以在它的生命线上发生变化的那一点放置这个对象图标的一个拷贝,用来显示那些修改。

2.1.2、顺序图有控制焦点

控制焦点是一个瘦高的矩形,表示对象执行一个动作所经历的时间段,既可以是直接执行,也可以是通过下级过程执行。

矩形的顶部表示动作的开始,底部表示动作的结束(可以由一个返回消息来标记)。还可以通过将一个控制焦点放在它的父控制焦点的右边来表示(由循环、自身操作调用或从另一个对象的回调所引起的)控制焦点的嵌套(其嵌套深度可以任意)。如果想特别精确地表示控制焦点在哪里,也可以在对象的方法被实际执行(并且控制还没传给另一个对象)期间,将那段矩形区域阴影化,但这也过于注重细节了。

顺序图的主要内容是消息。把消息表示为从一条生命线到另一条生命线的箭线,箭线指向接收者

异步消息send:则箭线带有一个枝状箭头;

同步(调用)call:则箭线带有实心三角箭头。

调用返回消息:用带有枝状箭头的虚箭线表示对同步消息的回复(调用返回)。因为每个调用之后都隐含一个返回,所以可以省略返回消息。但要展示返回值,使用返回消息还是有用的。

2.2、结构化控制

控制操作符表示为顺序图上的一个矩形区域

其左上角有一个写在小五边形内的文字标签,用来表明控制操作符的类型。

操作符作用于穿过它的生命线,这是操作符的主体。
如果一条生命线并不在某个控制操作符的覆盖范围之内,那么这条生命线可能在操作符的顶部中断,然后在其底部重新开始。

2.2.1、可选执行opt

标签是opt。如果进入操作符的时候监护条件成立,那么该控制操作符的主体就会得到执行。监护条件是一个用方括号括起来的布尔表达式,它可能出现在主体内部任何一条生命线的顶端,它可以引用该对象的属性。

2.2.2、条件执行alt

标签是 alt。控制操作符的主体用水平虚线分割成几个分区。

每个分区表示一个条件分支并有一个监护条件。如果一个分区的监护条件为真,就执行这个分区。但是,最多只能执行一个分区,如果有多于一个监护条件为真,那么选择哪个分区是不确定的,而且每次执行的选择可能不同。如果所有的监护条件都不为真,那么控制将跨过这个控制操作符而继续执行。其中的一个分区可以用特殊的监护条件[else],如果其他所有区域的监护条件都为假,那么执行该分区。

2.2.3、并行执行par

标签是par。水平虚线把控制操作符的主体分割为几个分区,每个分区表示一个并行(并发)计算。通常情况下,不同分区覆盖不同的生命线。当进入控制操作符时并发地执行所有的分区。每个分区内的消息是顺序执行的,但是并行分区之中的消息的相对次序则是任意的。如果不同的计算之间有交互存在,那么就不能用这种操作符。然而,现实世界中大量存在这种可分解为独立、并行活动的情况,因此这是一个很有用的操作符。

2.2.4、循环迭代执行loop

标签是loop。在主体内的某个生命线的顶端给出一个监护条件。只要在每次迭代之前监护条件成立,那么循环的主体就会重复地执行。一旦在主体顶部中的监护条件为假,控制就会跳过该控制操作符。

还有其他的一些控制操作符类型,但是上文介绍的这些是最有用的

为了清晰地指出顺序图的边界,通常可以把顺序图用一个封闭的矩形包围起来,并在矩形的左上角放一个标签。标签为sd,后面可以跟着给出图的名字。

第一个是循环操作符,圆括号内的数字(1,3)表示循环主体应当执行的最少次数和最多次数。

为最少是一次,所以在检测条件之前主体至少执行一次。在循环内,用户输入密码,系统验证它。只要密码不正确,那么该循环就会继续。但是,如果超过了三次,那么无论如何循环都会结束。

下一个操作符是可选操作符。如果密码是正确的,那么就执行这个操作符的主体,否则就跳过该顺序图后面的部分。这个可选操作符的主体内还包括了一个并行操作符。正如图中所表明的,操作符可以嵌套。
并行操作符有两个分区:一个让用户输入账号,另一个让用户输入数额。因为这两个分区是并行的,所以没有规定应该按照什么次序输入这两者,按照什么次序输入都可以。需要强调的是,并发并不总是意味着物理上的同时执行。并发其实是说两个动作没有协作关系,而且可按任意次序发生。如果它们确实是独立的动作,那么它们就可以交叠;而如果它们是顺序的动作,那么它们可以按任意的次序发生。
一旦并行操作符的两个动作都被执行过,那么该并行操作符也就执行完毕。在可选操作符中的下一个动作是银行向给用户交付现金。至此,顺序图执行完毕。

2.3、嵌套活动图

把活动的结构片段组织为子活动,特别是当子活动在主活动内出现多次时更应该如此。把主活动与子活动分别绘制在不同的图中。

在主活动图内,一个左上角带 ref 标签的矩形表示对子活动的引用,子行为的名字放到矩形内。

描述子行为不限于使用活动图,也可以使用状态机、顺序图或者其他行为规约。

下图是对2.2中的图的重新组织,把两个片段分别放到两个独立的活动图中,然后在主图中引用它们

3、通信图

通信图强调参加交互的对象的组织。

如下图所示,构造通信图的第一步就是将参加交互的对象作为图的顶点。

然后,把连接这些对象的链表示为图的弧,链上可能有标识这些对象的角色名。

最后,用对象发送和接收的消息来修饰这些链。这就向读者提供了在协作对象的结构组织语境中观察控制流的一个清晰的可视化轨迹。

 与顺序图不同,通信图中不能显式地展示对象的生命线,尽管可以展示create和destroy消息。另外,在通信图中不能显式地展示控制焦点,尽管各消息的序号能够表示嵌套。

3.1、两个不同于顺序图的特征

3.1.1、通信图有路径

可以根据关联画一个路径,也可以根据本地变量、参数、全局变量和自访问呈现路径。路径表示一个对象的知识源。

3.1.2、通信图中有序号

为表示消息的时间顺序,可以给消息加一个数字前缀(从1号消息开始),在控制流中,每个新消息的序号单调增加(如2、3等)。为了显示嵌套,可使用杜威十进分类号(1表示第一个消息,1.1表示嵌套在消息1中的第一个消息,1.2表示嵌套在消息1中的第二个消息,等等)。嵌套可为任意深度。还要注意的是,沿同一个链,可以显示许多消息(可能发自不同的方向),并且每个消息都各有唯一的序号。

 顺序图中不显式地表示对象之间的链。

顺序图中也不显式地表示消息的序号:其序号隐含在从图的顶部到底部的消息的物理次序中。然而,可以用顺序图的控制结构表示迭代和分支。

        迭代表示消息的重复序列。为了对迭代建模,在消息的序号前加一个迭代表达式,如*[i : =1..n](如果仅想表明迭代,并不想说明它的细节,则只加*号)。

        迭代表示该消息(以及任何嵌套消息)将按照给定的表达式重复。类似地,条件表示消息执行与否取决于一个布尔表达式的值。

        对条件建模时,在消息序号前面加一个条件子句,如[x>0]。一个分支点上的多个可选择的路径采用相同的序号,但每个路径必须由不重叠的条件唯一区分。

4、语义等价

通信图显示对象之间是如何被链接的(注意{local}和{global}注释),而相应的顺序图则不显示这些;

同样,顺序图显示消息的返回(标注返回值 committed),而相应的通信图则不显示这些。

在两种情况下,两种图都共享相同的基本模型,但每种图都可以表示另一种图没有表示的某些东西。然而以一种格式输入的模型可能缺少另一种格式所显示的某些信息。所以,尽管基本模型可以包含两种信息,这两种图却可能导致不同的模型。

5、一般用法

交互图用于对系统的动态方面建模。这些动态方面可能涉及系统的体系结构的任意视图中的任何种类的实例的交互,包括类(含主动类)、接口、构件和结点的实例的交互。

当使用交互图对系统的某些动态方面建模时,是在整个系统、一个子系统、一个操作或一个类的语境中进行建模。也可以把交互图附在用况(对一个脚本建模)和协作(对一个对象群体的动态方面建模)上。

(1)按时间顺序对控制流建模:此时使用顺序图。按时间

顺序对控制流建模,强调按时间展开的消息的传送,这对于在一个用况脚本的语境中对动态行为可视化尤其有用。顺序图对简单的迭代和分支的可视化要比通信图好。

(2)按组织对控制流建模:此时使用通信图。按组织对控制流建模,强调交互中实例之间的结构关系,沿着这些关系可以传送消息。

6、设计过程

6.1、顺序图

设置交互的语境,不管它是系统、子系统、操作、类,还是用况或协作的脚本。

通过识别有哪些对象在交互中扮演了角色而设置交互的场景。将它们从左到右放在顺序图的上方比较重要的对象放在左边,它们邻近的对象放在右边。

为每个对象设置生命线。在多数情况下,对象存在于整个交互过程中。对于那些在交互期间创建和撤销的对象,在适当的时刻设置它们的生命线,用适当的衍型化消息显式地指明它们的创建和撤销。

从引发这个交互的消息开始,在生命线之间画出从顶到底依次展开的消息,显示每个消息的特性(如它的参量)。如果需要,解释交互的语义。

如果需要可视化消息的嵌套,或可视化实际计算发生时的时间点,则用控制焦点修饰每个对象的生命线。

如果需要说明时间或空间的约束,则用时间标记修饰每个消息,并附上合适的时间和空间约束。

如果需要更形式化地说明这个控制流,则为每个消息附上前置条件和后置条件。

一个单独的顺序图只能显示一个控制流(尽管可以用结构控制成分表示结构上的并发)。一般来说,将会有多个交互图,其中一些是主要的,另一些显示的是可选择的路径或例外条件。可以使用包来组织这些顺序图的集合,并给每个图起一个合适的名称,以便与其他图相区别。

上图描述了一个双方打电话的简单的控制流。在这个抽象层次上涉及四个对象:两个通话者Caller(s和r),一个未命名的电话交换机Switch,还有一个是c,它是两个通话者之间的交谈(Conversation)的具体化。
这个序列从Caller(s)发送一个信号(liftReceiver)给对象Switch开始。接下去,Switch给Caller发送setDialTone,而Caller迭代地执行消息dialDigit。注意,就像约束所说明的那样,这个序列不能超过30秒。这张图并不表示如果超出这个时间约束会发生什么。

如果想表示就需要包含一个分支或一个完全独立的顺序图。对象Switch接下去调用它自己以执行routeCall操作,然后创建一个Conversation对象(c),把剩余的工作分配给它。尽管这个交互中没有显示,但c还应在电话付账系统(应在另一个交互图中表示)中负有更多的职责。Conversation 对象(c)发振铃信息 ring()给 Caller(r),后者异步地发送消息liftReceiver。然后Conversation对象告诉Switch去接通(connect)电话,并告诉两个Caller对象进行connect,在这之后他们就可以通话了,如附加的注解所示。

6.2、通信图

设置交互的语境,不管它是一个系统、子系统、操作、类,还是用况或协作的脚本。
通过识别有哪些对象在交互中扮演了角色而设置交互的场景。将它们作为图的顶点放在通信图中,较重要的对象放在图的中央,它们邻近的对象向外放置。

描述这些对象之间可能有消息沿着它传递的链。

首先安排关联的链。这些链是最主要的,因为它们代表结构的连接。

然后安排其他的链,用合适的路径注释(如 global 和 local)修饰它们,显式地说明这些对象是如何互相联系的。

从引发这个交互的消息开始,然后将随后的每个消息附到适当的链上,恰当地设置其序号。用带小数点的编号来显示嵌套。

如果需要说明时间或空间约束,则用时间标记修饰每个消息,并附上合适的时间和空间约束。

如果需要更形式化地说明这个控制流,则为每个消息附上前置条件和后置条件。

上图描述了学校里登记一个新生的控制流,它强调这些对象间的结构关系。可以看到有4个角色:一个登记代理RegistrarAgent(r),一个学生Student(s),一个课程Course(c),和一个未命名的学校角色School。控制流被显式地编号。活动从RegistrarAgent创建一个Student对象开始,并把学生加入到学校中(用addStudent消息),然后告诉Student对象自己去登记。Student对象调用自己的getSchedule,得到一个必须注册的Course对象集合。然后,Student对象把自己加入到每个Course对象中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1852108.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Selenium WebDriver - 网络元素

本文翻译整理自:https://www.selenium.dev/documentation/webdriver/elements/ 文章目录 一、文件上传二、定位策略1、传统定位器2、创建定位器3、类名4、CSS选择器5、id6、NAME7、链接文本8、部分链接文本9、标签名称10、xpath11、相对定位器它是如何工作的可用相对…

java中Object和json相互转换的方式

1.org中jackson转换json,springboot中内置jackson ObjectMapper onew ObjectMapper(); List<>listnew ArrayList(); String jonso.writeAsValueString(list); 2.alibaba中fastjson转换成json GetMapping("/test")public TbUser testHttpClient(){String url…

Python 函数注解,给函数贴上小标签

目录 什么是函数注解? 为什么使用函数注解? 如何编写函数注解? 实战演练 与类型提示(Type Hints)的关系 类型安全的运算器 什么是函数注解? 函数注解(Function Annotations)是Python 3中新增的一个特性,它允许为函数的参数和返回值指定类型。 这些注解不会改变…

大学食堂管理系统

摘 要 随着信息技术的飞速发展和高校规模的不断扩大&#xff0c;大学食堂作为高校日常运营的重要组成部分&#xff0c;其管理效率和服务质量直接影响到师生的日常生活和学习。传统的食堂管理方式&#xff0c;如手工记录、纸质菜单、人工结算等&#xff0c;不仅效率低下&#x…

FFmpeg编译4

CPUx86-64 TOOLCHAIN N D K / t o o l c h a i n s / x 8 6 6 4 − 4.9 / p r e b u i l t / l i n u x − x 8 6 6 4 S Y S R O O T NDK/toolchains/x86_64-4.9/prebuilt/linux-x86_64 SYSROOT NDK/toolchains/x866​4−4.9/prebuilt/linux−x866​4SYSROOTNDK/platforms/and…

2024-06-23 操作系统实验5——模拟页式存储管理

文章目录 一、实验目的二、实验内容三、实验过程四、结果测试五、实验总结和说明 补录与分享本科实验&#xff0c;以示纪念。 一、实验目的 通过编写和调试请求页式存储管理的模拟程序以加深对请求页式存储管理方案的理解。 二、实验内容 页面淘汰算法可采用FIFO置换算法&a…

React+TS前台项目实战(十五)-- 全局常用组件Table封装

文章目录 前言Table组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 在这篇文章中&#xff0c;我们将对本系列项目中常用的表格组件Table进行自定义封装&#xff0c;以提高性能并适应项目需求。后期也可进行修改和扩展&#xff0c;以满足项目的需求。 Table组…

Windows 11 安装hp 1020 plus 打印机驱动 (Ubuntu 20.04.3 LTS 部署cups局域网共享打印服务器)

1 win11 下载HP laserjet 1020 plus驱动,可以官网下载哦 链接下载 2 手动添加hp laserjet 1020驱动: 控制面板-->查看设备和打印机-->打印机和扫描仪-->添加设备-->我需要的打印机不在列表中-->通过手动添加-->按名称选择共享打印机 如果找不到&#xff0…

论文《Tree Decomposed Graph Neural Network》笔记

【TDGNN】本文提出了一种树分解方法来解决不同层邻域之间的特征平滑问题&#xff0c;增加了网络层配置的灵活性。通过图扩散过程表征了多跳依赖性&#xff08;multi-hop dependency&#xff09;&#xff0c;构建了TDGNN模型&#xff0c;该模型可以灵活地结合大感受场的信息&…

简易部署的设备日志采集工具

永久免费: Gitee下载 最新版本 使用说明: Moretl 企业级采集文件工具 优势: A. 开箱即用. 解压直接运行.不需额外安装. B. 批管理设备. 设备配置均在后台管理. C. 无人值守 客户端自启动,自更新. D. 稳定安全. 架构简单,内存占用小,通过授权访问.

OPENCV中0x00007FFE5F35F39C发生异常

原因&#xff1a;读取图片时已经为灰度图像&#xff0c;又进行了一次灰度处理cvtColor 解决方法&#xff1a;如上图所示&#xff0c;将cv::imread的第二个参数改为cv::IMREAD_COLOR&#xff1b;或者保留cv::IMREAD_GRAYSCALE&#xff0c;删去后面的cv::cvtColor

高通安卓12-OTA 升级

1.OTA介绍 OTA 英文全称是 Over-the-Air Technology&#xff0c;即空间下载技术的意思。 OTA 升级是 Android 系统提供的标准软件升级方式。它功能强大&#xff0c;可以无损失升级系统&#xff0c;主 要通过网络[例如 WIFI、3G]自动下载 OTA 升级包、自动升级&#xff0c;但…

仿饿了么加入购物车旋转控件 - 自带闪转腾挪动画 的按钮

, mWidth - mCircleWidth, mHeight - mCircleWidth); canvas.drawRoundRect(rectF, mHintBgRoundValue, mHintBgRoundValue, mHintPaint); //前景文字 mHintPaint.setColor(mHintFgColor); // 计算Baseline绘制的起点X轴坐标 int baseX (int) (mWidth / 2 - mHintPaint.m…

新闻管理与推荐系统Python+Django+协同过滤推荐算法+管理系统

一、介绍 新闻管理与推荐系统。本系统使用Python作为主要开发语言开发的一个新闻管理与推荐的网站平台。 网站前端界面采用HTML、CSS、BootStrap等技术搭建界面。后端采用Django框架处理用户的逻辑请求&#xff0c;并将用户的相关行为数据保存在数据库中。通过Ajax技术实现前后…

mayavi pyqt 实例

目录 安装&#xff1a; 示例代码&#xff1a; 生成3d检测框&#xff1a; 安装&#xff1a; pip install pyqt5 mayavi traits traitsui 示例代码&#xff1a; import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QPushButton from …

区块链中nonce是什么,什么作用

目录 区块链中nonce是什么,什么作用 区块链中nonce是什么,什么作用 Nonce在以太坊中是一个用于确保交易顺序性和唯一性的重要参数。以下是对Nonce的详细解释: 定义 Nonce是一个scalar值,它等于从该地址发送的交易数量,或在具有关联代码的账户的情况下,由该账户创建的合…

【Flutter 专题】112 图解自定义 ACEPieWidget 饼状图 (一)

类别选项球&#xff1b;切割绘制饼状图&#xff1b;饼状图中绘制文字&#xff1b; 1. 类别选项球 对于两侧不同颜色类别选项卡&#xff0c;仅需要简单设置一下 Container 的 decoration 装饰器即可&#xff0c;只是方便用户查看饼状图分类而已&#xff1b; return Container…

不用写一行代码,deepseek结合腾讯云语音识别来批量转录Mp3音频

首先&#xff0c;打开window系统中的cmd命令行工具&#xff0c;或者powershell&#xff0c;安装腾讯云tencentcloud的Python库 pip install -i https://mirrors.tencent.com/pypi/simple/ --upgrade tencentcloud-sdk-python 然后&#xff0c;开通腾讯云的对象存储COS服务&…

【小沐学AI】Python实现语音识别(Whisper-Web)

文章目录 1、简介2、下载2.1 openai-whisper2.2 whisper-web 结语 1、简介 https://openai.com/index/whisper/ Whisper 是一种自动语音识别 &#xff08;ASR&#xff09; 系统&#xff0c;经过 680,000 小时的多语言和多任务监督数据的训练&#xff0c;从网络上收集。我们表…

【大数据 复习】第8章 Hadoop架构再探讨

一、概念 1.Hadoop1.0的核心组件&#xff08;仅指MapReduce和HDFS&#xff0c;不包括Hadoop生态系统内的Pig、Hive、HBase等其他组件&#xff09;&#xff0c;主要存在以下不足&#xff1a; &#xff08;1&#xff09;抽象层次低&#xff0c;需人工编码 &#xff08;2&#xf…