【UML用户指南】-22-对高级行为建模-事件和信号

目录

1、概述

2、事件分类

2.1、信号

2.2、调用事件

2.3、时间事件和变化事件

2.4、发送和接收事件

3、常用建模技术

3.1、对信号族建模

3.1.1、建立过程

3.2、对异常建模


在状态机语境中,使用事件对能够触发状态转移的激励建模。事件包括信号、调用、时间推移或状态改变

事件可以是同步的,也可以是异步的,因此对事件的建模涉及对进程和线程的建模。

在UML中,每件发生的事情都被建模为一个事件。事件是对在时间和空间上占据一定位置的有意义的发生的规约。信号、时间推移和状态改变是异步事件,表示能在任何时间发生的事件。调用一般是同步事件,表示对一个操作的引用

上图允许可视化事件的声明(如信号OffHook)以及用来触发一个状态转移的事件的使用(如信号OffHook,它导致了从Active到Idle的状态转移及对动作dropConnection的执行)。

1、概述

事件(event)是对一个在时间和空间上占有一定位置的有意义的发生的规约。

在状态机的语境中,一个事件是一次激励的发生,激励能够触发状态转移。

信号(signal)是一种事件,表示在实例间进行通信的异步消息的规约

事件可以是内部的事件或外部的事件。外部的事件是在系统和它的参与者之间传送的事件。例如,一个按钮的按下和一个来自碰撞传感器的中断都是外部事件。内部事件是在系统内部的对象之间传送的事件。溢出异常是一个内部事件的例子。

2、事件分类

2.1、信号

消息是一个具名对象,它由一个对象异步地发送,然后由另一对象接收。信号是消息的类目,它是消息的类型。

信号和简单类有许多共同之处。

1)信号有实例,尽管一般不需要对其实例进行显式的建模。

2)信号还可以包含在泛化关系中,以便对事件的层次结构建模,有些信号是一般的(如信号NetworkFailure),有些信号是特殊的(如对NetworkFailure的一个特WarehouseServerFailure)。像类一样,信号也可以有属性和操作。在一个对象发送它之前或者在另一个对象接收之后,信号只是一个普通的数据对象。

对象的创建和撤销也是一种信号

        信号的属性以它的参数形式出现。例如,当发送一个信号Collision时,可以用参数的形式说明它的属性值,例如Collision(5.3)。

        信号可以由状态机中转移动作来发送。也可以把信号建模为交互中的两个角色间的消息。方法的执行也可以发送信号。事实上,当为一个类或一个接口建模时,说明该元素行为的一个重要部分就是说明它的操作所能发送的信号
 

可以将信号建模为衍型化的类。可以用一个衍型为send的依赖来表示一个操作发送了一个特定的信号。

2.2、调用事件

        一个调用事件表示对象接收到一个操作调用请求。调用事件可能触发状态机中的一个状态转移,或者调用目标对象的一个方法。这种选择由类定义中的操作定义来说明。

信号是一个异步事件,而调用事件一般是同步的。调用也可以异步

        当一个对象调用另一个具有状态机的对象的一个操作时,控制就从发送者传送到接收者,该事件触发转移,完成操作后,接收者转移到一个新的状态,控制返还给发送者。如果调用者无需等待回应,那么可以把这个调用指定为异步调用。

2.3、时间事件和变化事件

1)时间事件是表示一段时间推移的事件。

在UML中,用 关键字after ,后面跟着计算一段时间的表达式来对一个时间事件建模。表达式可

以是简单的(如 after 2 seconds),也可以是复杂的(如 after 1 ms sinceexiting Idle)。

使用 关键字at 来指出在某个绝对时间点上发生的时间事件。例如,时间事件 at(1 Jan 2005,1200 UT)指出该事件发生在格林尼治时间2005年1月1日的中午。

2)变化事件是表示状态的一个变化或某些条件得到满足的事件

在UML中,用关键字when后面跟随布尔表达式来对一个变化事件建模。

可以用这样的表达式连续地进行测试(如when altitude < 1000)。
 

一旦某个条件的值从假变为真,就会引发变化事件。

当条件的值由真变为假时,不会引发变化事件。

当事件一直为真时,不会重复地引发变化事件。

2.4、发送和接收事件

信号事件和调用事件至少涉及两个对象:一个是发送信号或调用操作的对象,另一个是事件指向的对象。因为信号是异步的,而且异步调用本身也是信号,所以事件的语义与主动对象和被动对象的语义是相互影响的。

在某些情况下,可能想要显示一个对象向一组对象发送信号(多点传送),或者向系统中的监听对象发送信号(广播)。对多点传送建模时,应显示一个对象向一组接收者集合上发送信号。对广播建模时,应显示一个对象,它发送信号到代表整个系统的另一个对象。

在UML中,将一个对象可能接收的调用事件建模为这个对象的类的操作。

在UML中,可以通过在类的附加栏中对信号命名来为对象可能接收的具名信号进行建模,

也可以将具名信号以相同的方式附加到一个接口上。

3、常用建模技术

3.1、对信号族建模

在大多数事件驱动的系统中,信号事件是分层的。

例如,一个自主机器人可以辨别外部信号(如 Collision)和内部信号(如 HardwareFault)。不过,内部信号和外部信号未必是互斥的。

例如,信号 HardwareFault 可以进一步特化为BatteryFault 和MovementFault。这些信号甚至还可以进一步被特化,如 MotorStall 是MovementFault的一种。

        以这种方式对信号的层次建模,可以说明多态的事件。

        例如,考虑一个状态机,它有一个仅当接收到 MotorStall 才能触发的转移。作为这个层次中的叶子信号,该转移只能被这个信号触发,因此它不是多态的。

        相反,假如状态机存在一个由HardwareFault的接收所触发的转移,则这个转移是多态的。它能被一个 HardwareFault 或它的任何一种特化信号(包括BatteryFault、MovementFault和MotorStall)触发。

3.1.1、建立过程

  • 考虑一组给定的主动对象可能响应的所有不同种类的信号。
  • 寻找信号的公共种类,并使用继承将它们放在一般/特殊层次结构中。提升较为一般的信号层次,降低较为特殊信号层次。
  • 在这些主动对象的状态机中寻找多态性,在发现多态性的地方,必要时通过引入中间的抽象信号来调整层次结构。

上图是对一个由自主机器人处理的信号族建模。注意根信号(RobotSignal)是抽象的,它没有任何直接的实例。这个信号有两个具体的直接特化信号(Collision 和HardwareFault),其中HardwareFault还被进一步特化。注意信号 Collision有一个参数。

3.2、对异常建模

可视化、详述和文档化类或接口的行为的一个重要部分是说明它的操作所能产生的异常情况。如果交给你一个类或接口,可以调用的操作是很清楚的,但每个操作可能引发的异常则不清楚,除非显式地对它们建模。

在 UML 中,异常发生只是一种额外的事件,建模为信号。出错事件可以附加到操作的说明中。

上图是对异常的一个层次结构建模,这些异常是由容器类(如模板类Set)的标准库产生的。

这个层次结构以抽象信号 Error 为根,它包括 3 种特殊错误:Duplicate、Overflow和Underflow。

操作add可能引发信号Duplicate和Overflow,

操作remove仅引发信号 Underflow。

换一种做法,可以通过在每个操作的规约中命名异常,将这些依赖放置在后台中。不论哪种方法,通过了解每个操作可能发送的所有信号,就可以创建正确地使用类Set的客户端。

虚线矩形框表示模板类

 异常发生信号在内的所有信号都是对象之间的异步事件

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

go语言day03

目录 一、 go语言的数据类型&#xff1a; 二、声明赋值的简写形式&#xff1a; ":" 1&#xff09;重复使用的编译错误 2&#xff09;在全局变量中使用 : 会报编译错误 三、变量规则&#xff1a; 0&#xff09;变量的命名规则&#xff1a; 1&#xff09;创建的局部…

Excel 宏录制与VBA编程 —— 12、文本字符串类型相关(附示例)

字符串分割&#xff0c;文末示例&#xff08;文末代码3附有源码&#xff09; 代码1 - 基础字符串 代码2 - 字符串拆分 代码3 - 字符串分割 Option ExplicitSub WorkbooksClear()Dim DataRange As RangeSet DataRange Range("C2:E12")DataRange.Clear End SubSub Wo…

PS添加物体阴影

一、选择背景&#xff0c;确保物体和北京分割出图层 二、右键单击物体图层&#xff0c;点击混合选项&#xff0c;点击投影 三、调整参数&#xff0c;可以看效果决定(距离是高度&#xff0c;扩展是浓度&#xff0c;大小是模糊程度)&#xff0c;保存即可

PhotoShop自动生成号码牌文件

1、说明 设计卡牌的时候&#xff0c;遇到自动生成编号&#xff0c;从01500到-02500&#xff0c;一个一个的手写&#xff0c;在存储保存成psd格式的文件&#xff0c;会很耗时。 下面将介绍如何使用ps自动生成psd格式的文件 2、使用excle生成数字 从01500到-02500 第一步&…

数据挖掘常见算法(关联)

Apriori算法 Apriori算法基于频繁项集性质的先验知识&#xff0c;使用由下至上逐层搜索的迭代方法&#xff0c;即从频繁1项集开始&#xff0c;采用频繁k项集搜索频繁k1项集&#xff0c;直到不能找到包含更多项的频繁项集为止。 Apriori算法由以下步骤组成&#xff0c;其中的核…

【Python/Pytorch 】-- K-means聚类算法

文章目录 文章目录 00 写在前面01 基于Python版本的K-means代码02 X-means方法03 最小二乘法简单理解04 贝叶斯信息准则 00 写在前面 时间演变聚类算法&#xff1a;将时间演变聚类算法用在去噪上&#xff0c;基本思想是&#xff0c;具有相似信号演化的体素具有相似的模型参数…

连续9年618全渠道第一,入选最受用户关注TOP10,德施曼做对了什么?

近日&#xff0c;智能锁赛道领军品牌德施曼闯入大消费赛道&#xff0c;与宝洁、美的等品牌一起入选今年京东618最受用户关注TOP10品牌。 2024年的618大促已正式落下帷幕&#xff0c;大品牌纷纷交出了这场“年中大考”的答卷&#xff1b;其中高端智能锁领军品牌德施曼也交出了一…

一个故事,告诉你为什么要做目标管理

在一个小镇上&#xff0c;镇上的领导找到一群建筑工人&#xff0c;要求他们建造一堵墙&#xff0c;以保护镇上的居民免受外界侵扰。 然而&#xff0c;领导只是简单地描述了墙的作用和位置&#xff0c;却没有给出具体的尺寸和高度要求。工人们认为这是一个简单而直接的任务&am…

MQTTX 1.10.0 发布:CLI高级文件管理与配置

MQTTX 1.10.0 版本现已发布&#xff01; 在本次更新中&#xff0c;CLI 版本在文件管理和配置功能方面进行了显著增强。主要更新包括&#xff1a;支持从文件中读取和写入消息、高级配置选项、文本输出模式、以及改进的日志记录。此外&#xff0c;桌面版本现在支持数据库重建&am…

情感搞笑聊天记录视频:AI自动化生成技术,操作简单,教程+软件

在数字化时代&#xff0c;内容创作已成为吸引观众、传递信息的重要手段。随着人工智能技术的飞速发展&#xff0c;AI自动生成视频为创作者提供了新的工具和可能性。本文将介绍如何利用AI技术&#xff0c;通过情感搞笑聊天记录视频&#xff0c;在视频号上实现内容的自动化生成&a…

windows系统上nginx搭建文件共享

1、下载windows版nginx 下载地址 2、配置nginx 编辑nginx.conf配置文件 在http模块下添加这个参数 underscores_in_headers on;#修改location内容&#xff0c;共享哪个文件夹&#xff0c;就写哪个文件夹&#xff0c;最后一定要跟上/&#xff0c;否则无法访问 location / {…

艺术签名生成工具哪个好?5个工具定制个性化签名

在追求个性化的现代社会&#xff0c;艺术签名已经成为一种时尚和趋势&#xff0c;越来越多的人开始关注和尝试学习如何设计自己的艺术签名。 这不仅是一种表达自我的方式&#xff0c;也是一种展现个性和独特性的方式。今天让我们一起探索5款艺术签名在线生成工具&#xff0c;让…

【Python系列】FastAPI 中的路径参数和非路径参数解析问题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

边缘计算是什么?天拓四方

边缘计算&#xff0c;作为一种分布式计算模型&#xff0c;正在逐步改变我们对数据处理和计算的传统认知。其核心思想是将数据处理和计算资源放置在接近数据产生源头的边缘设备、传感器或用户设备上&#xff0c;从而提供更快速、实时的计算和数据分析能力。在当前的数字化时代&a…

vue3-openlayers 轨迹回放(历史轨迹)(ol-animation-path实现)

本篇介绍一下使用vue3-openlayers轨迹回放&#xff08;历史轨迹&#xff09;&#xff08;ol-animation-path实现&#xff09; 1 需求 轨迹回放&#xff08;历史轨迹&#xff09;实时轨迹 2 分析 轨迹回放&#xff08;历史轨迹&#xff09;&#xff0c;一般是一次性拿到所有…

AI交互及爬虫【数据分析】

各位大佬好 &#xff0c;这里是阿川的博客&#xff0c;祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 Python 初阶 Python–语言基础与由来介绍 Python–…

axios全局封装AbortController取消重复请求

为什么&#xff1f; 问题&#xff1a;为什么axios要配置AbortController&#xff1f;防抖节流不行吗&#xff1f; 分析&#xff1a; 防抖节流本质上是用延时器来操作请求的。防抖是判断延时器是否存在&#xff0c;如果存在&#xff0c;清除延时器&#xff0c;重新开启一个延…

地信大四,实习重要吗?怎么找实习岗位?

“地信怎么找实习啊&#xff1f;” “实习三个月以上&#xff1f;暑假只有两个月啊” “什么岗位实习比较有用&#xff1f;” “助理类岗位是做什么&#xff1f;” …… 同学们好啊&#xff0c;不知不觉24年已经是过完一小半了&#xff0c;24届毕业的同学们也差不多就要迎来…

ES内存溢出报错问题解决方案

博主有话说&#xff1a;该博文根据实际案例编写&#xff0c;在编写过程中将敏感信息进行替换&#xff0c;可能存在矛盾的地方&#xff0c;望见谅 1 错误详情 [typecircuit_breaking_exception, reason[parent] Data too large, data for [<http_request>] would be [1256…

Qt项目天气预报(5) - 根据JSON刷新天气信息+城市匹配

刷新当天天气 我们使用如下api接入&#xff0c;当然需要自己去 易客云天气API免费天气API接口|天气预报接口|全球天气API接口|气象预警|空气质量 (tianqiapi.com)注册后生成自己的对应id才可以使用 //专业天气v61 http://v1.yiketianqi.com/api?unescape1&versionv61&…