《SysML精粹》学习记录

  • 第八章:状态机图
    • 状态机图简介
    • 状态机图元素
    • 状态
    • 转换
    • 伪状态
    • 区域
    • 小结

第八章:状态机图

状态机图简介

  状态机图是能够用于说明系统动态行为信息的三种SysML图中的最后一种。可以在状态机图上显示各种各样的状态,并且可以指定四种类型的事件,从而在运行的系统中触发那些状态之间的转换。SysML还可以使用正交区域对基于状态的并发行为建模。状态机图是一种行为图,和活动图以及序列图一样,它是系统的一种动态视图。和活动图以及序列图不同的是,状态机图关注的是系统中的结构如何根据随时间发生的事件改变状态。状态机图显示的行为表示的往往是模块的分类行为。分类行为:在模块初始化的时候就开始执行,一般在实例被销毁的时候才会完成执行的行为。状态机行为与模块的单个操作或者接收关联也是合法的(虽然比较少见)。状态机图很适合作为详细设计的产出物(也就是开发的输入项)。和序列图一样,状态机图会对行为做精确、清晰的说明。很多商业级别的建模工具可以基于状态机图所显示的行为,自动生成符合生产环境质量要求的源代码。状态机图的缺点在于:状态机图所能够描述行为的模块,都必须真正拥有定义好的状态(即它们会对事件发生做出基于状态的行为)。然而,并非所有模块都拥有定义好的状态。可以在系统生命周期的任意时间点创建状态机图。

状态机图元素

  状态机图的图类型缩写是stm。其中唯一允许存在的模型元素类型是stateMachine。状态机图的外框表示建模者已经在系统模型中某处定义的单一状态机。
状态机本身是一种模型元素。和交互以及活动一样,它是一种行为。和交互、活动、模块和包一样,状态机是一种命名空间类型。因此它可以包含模型层级关系中一系列命名的元素,特别是定点和转换。那些被包含的元素可以显示在相关状态机图的外框中。
注意:状态机和状态机图并不是一个概念

状态

  一个系统(或者系统中的一部分)有时会拥有一系列定义好的状态,在系统操作过程中可以处于那些状态。状态的概念很难正式定义,但比较容易从现实世界的例子中推导出。最简单的一个例子就是通过拉线开关打开和关闭台灯。台灯有两种定义好的状态:On和Off。它在特定时刻所处的状态会决定,它会如何对发生的事件做出响应(像旋下灯泡、拉动开关或者把台灯打翻等)。软件对象也一样,可以拥有定义好的一系列状态。例如,一个文件可以处于以下状态:Open、Closed、Modified、Unmodified、Encrypted、Unencrypted等等。有的状态只有在其他状态的情境中才有意义。例如,Modified和Unmodified只有在文件处于Open状态的时候才有意义。正式情况下,把Open叫做复合状态。Modified和Unmodified都是Open状态的子状态。没有任何子状态的状态叫做简单状态。除了简单状态和复合状态之外,另一种常见的状态类型是最终状态。
  1)简单状态的标识法是一个圆角矩形,简称为圆角(round-angle)。最小限度上,一个状态必须显示一个名称分隔框,其中包含一个字符串,表示状态的名称。SysML没有为状态指定任何命名规范(而为状态起一个有意义的名称通常是创建状态机最困难的一部分工作)。简单状态还可能会显示第二个分隔框,其中会列举它的内部行为和内部转换。SysML定义了三种状态可以执行的内部行为:entry、exit和do。
这三种内部行为都显示为状态的第二个分隔框中的字符串。每种行为都可选地处于一种特定状态。在显示的时候,字符串会以那三个关键字开始(entry、exit和do)后面是一条斜线,之后或者是一个不透明表达式,或者是建模者在系统模型某处创建的行为的名称。不透明表达式是对行为的声明,它会因为语言的不同而不同。如果指定了存在于模型中的行为的名称那么它可以是SysML中定义的三种类型之一:活动,交互或者另一个状态机。(然而对于entry、exit或者do行为来说,不透明表达式很少会是另一个状态机。)(1)如果存在的话,那么状态的entry行为就会是进入那个状态执行的第一个行为。entrv行为是―种原子行为(不可中断)。这意味着,在状态机处理新的事件之前(可能转换到另一种状态),要确保它执行完成。(2)如果存在的话,状态的exit行为是离开那种状态之前执行的最后一个行为,当事件导致状态机转换到新的状态时,它才会发生。和entry行为一样,exit行为也是一种原子行为。也要确保可以执行完成:没有任何新的事件可以中断它的执行。其他行为可以在状态的entry和exit行为之间执行。(3)如果存在的话,状态的do行为会在进入状态的时候开始执行,就在状态的entry行为之后。do行为和entry行为之间关键的区别在于,do行为是非原子行为;它的执行可能会被新的事件发生所中断,而那个事件会导致转换到新的状态。因此,do行为在发生两件事情之前保持执行,一是被事件发生所中断(状态机转换到新的状态),二是自己结束(可能在下一个事件发生之前)。如果do行为被事件发生所中断,那么do行为就会被取消,然后针对那个状态的exit行为就会执行(在离开那个状态之前)。如果do行为在下一个事件发生之前自己结束,那么就会发生以下两种情况之一:(a)如果所有输出的转换都需要触发器,那么状态机可能会继续保持那个状态,等待下一个事件发生。(b)如果有一个输出转换不需要触发器,那么状态机就会立刻转换到新的状态。
  2)复合状态的标识法和简单状态一样:圆角矩形。和简单状态一样,复合状态拥有一个名称分隔框,还有另一个分隔框,可以显示可选的extry、exit和do行为。区别在于,符合状态拥有内嵌的子状态,可能会在第三个分隔框中显示(位于第二个分隔框之下)。在状态机中的复合状态和状态机总体之间有几点类似的地方。当复合状态处于非活动的状态时,它所有的子状态都是非活动的。当复合状态是活动的,那么它的子状态之中会有一个是活动的。在活动的状态下,复合状态会对事件发生做出响应,从一种子状态转换到另一种子状态。子状态之间的转换的形式,和状态之间的转换是同样的。复合状态可能从其边界跳出,也可能从特定的内嵌子状态跳出。
  3)最终状态的标识法是一个大圆圈包围小的实心圆。最终状态的转换完成代表总体上状态机行为的完成,从那以后,它不会再对新的事件发生做出响应。

转换

  转换代表的是从一种状态向另一种状态的改变。此外,它还可以表示从一种状态到其自身的改变:SysML称之为自我转换。转换的标识法是带有开放箭头的实线,从源顶点画向目标顶点(自我转换的情况:源和目标可能是同一个顶点)。最常见的情况下,源和目标顶点都是状态。每个转换都可以指定三种可选的信息:触发器、守卫和影响。如果存在,这些信息片段会显示在一个字符串中,它会位于转换的上面或下面。字符串的格式如下:“<trigger> [<guard>]/ <effect>”。触发器(trigger)必须与建模者在系统模型中定义的事件名称相匹配。SysML定义了四种类型的事件:信号事件、调用事件、时间事件和改变事件。事件(在系统操作过程中)的实例叫做事件发生,而事件发生会触发状态之间的转换。守卫(guard)是一个布尔表达式,总是显示在方括号之间。那个表达式会在特定的时刻估值为真或假。当状态机接收一个与触发器匹配的事件发生时,只有守卫在特定时刻为真,转换才会执行。如果它的守卫在那时为假,那么转换不会执行,而事件发生就会被消费,且不会对状态产生任何改变。影响(effect)是在转换过程中执行的行为。和entry、exit和do行为一样,影响或者是一个不透明表达式,或者是建模者在系统模型中某处定义的行为的名称。那个行为可以是一个活动、一个交互或者另一个状态机(尽管最常见的情况是活动或者交互)。
  转换的影响是更大的行为序列的一部分,它们会在转换触发的时候执行。一般把那个行为序列叫做执行到完成(run-to-completion)步骤。执行到完成步骤按照列举的顺序拥有以下行为:源状态的exit行为、为转换本身指定的effect、目标状态的entry行为。这整个行为序列是原子和瞬时的,它会被确保执行完成。任何新的事件发生都不会中断这个序列中任何行为。只有在整个运行到完成步骤执行完成后,状态机处于一种新的(目标)状态时、才能够接收并处理新的事件发生。执行到完成步骤中的三个行为都是可选的;对于两个状态之间的特定转换,三种行为的任意组合都可能出现。然而,当出现的时候,它们都会以转换触发的时候显示的顺序来执行。
  转换分为:内部转换和外部转换。外部转换:只要一个箭头从一种状态画到另一种状态(或者从一个状态回到本身)。内部转换的字符串格式和外部转换的一样。然而,内部转换的字符串会显示在状态(和三种可选的内部行为一起)的另一个分隔框中;和外部转换相对比,内部转换的字符串不会显示在箭头旁边。标识法上的区别反映了内部转换和外部转换之间概念上的区别:当状态中的内部转换触发时,状态机并不会因为转换而脱离那种状态。这意味着内部转换和外部转换之间的另一个关键区别:当状态中的内部转换触发时,那个状态的exit行为和entry行为(如果存在的话)都不会执行。简而言之,当内部转换触发的时候,唯一被执行的行为就是为那个内部转换指定的effect(内部转换不触发exit和entry行为,只执行转换的effect行为,也不会重置相对时间事件计时)。
  SysML定义了四种类型的事件:信号事件、调用事件、时间事件和改变事件。解事件的根本:事件是在系统模型中定义的一种元素,它定义了能够在实际系统中触发行为的事件类型。在系统操作过程中,特定的事件可能会发生多次。每次事件发生的时候,它的发生都可能会触发行为新的一次执行。事件发生如何触发状态之间的转换:可能导致行为被执行的转换。
  1)信号事件代表能够接受信号实例的目标结构接收它的过程;目标是执行状态机行为的结构。如果状态机拥有具备信号事件触发器的转换,那么执行状态机的结构就必须拥有具有相同名称的接收。接收是模块可以拥有的一种行为特性,它是一种能够触发接收信号实例的行为特性。
  2)调用事件代表接收请求的过程:从调用结构发送的请求,以触发目标结构中的一项操作。目标可能是执行状态机行为的结构。如果状态机具备带有调用事件触发器的转换,那么执行状态机的结构必须拥有居于相同名称的操作。操作是模块可以拥有的一种行为特性;它一般是被同步调用触发的行为特性(它位于调用程序,等待行为的完成)。调用事件触发器和信号事件触发器完全相同,看图者需要通过查看它的操作和接收来分辨和确认。
  3)时间事件代表时间中的实例。当那个时刻在系统操作过程中到来的时候,时间事件就发生了。当然,那个事件会触发状态机中的转换。一个时间事件也可能会在系统操作过程中出现多次。如果那样的话,每次发生都可能会触发状态之间的另一次转换。有两种类型的时间事件:相对的和绝对的。时间事件触发器不像调用事件触发器和信号事件触发器那样难以通过标识法区分:相对时间事件触发器总是以关键词after开头;绝对时间事件触发器总是以关键词at开头。两种类型后面都会跟着括号中的时间表达式。绝对时间事件的时间表达式可以具体,也可以宽泛,这完全取决于建模者需要它们怎么样,例如:at ( 3:00 a.m. GMT)、at ( Monday)、at ( 3:00 a.m. GMT, Monday, March 4,2022)。如果时间表达式足够一般化,那么时间事件就会发生多次。时间表达式at ( 3:00 a.m. GMT) 会导致每次到达那个时刻都会有新的事件发生。那个时间事件每次发生都会触发状态机中的另一次转换。相对时间事件的时间表达式总是会写成时间区间,例如:after ( 1 min)、 after ( 50ns)、after ( 1 month)。经过指定量的时间之后,相对时间事件就会发生,而那个事件的发生会触发状态机中的转换。外部自转换(从一种状态画回自身的外部转换)会离开并重新进入那种状态;因此,它会为那种状态重置所有相对时间事件的计数器。相反,一个状态中的内部转换不会导致离开并重新进入那个状态;它不会为那个状态重置相对时间事件。和所有类型的事件发生一样,时间事件发生也可能会中断状态中的do行为。相反,一般认为状态的entry行为是原子和即时的;它是组成两个状态间转换的运行到结束步骤的一部分。只有在运行到结束步骤执行完成的时候,相对时间事件计数器才会启动。因此,entry行为不会被时间事件发生所中断。
  4)改变事件被定义为布尔表达式。在系统操作过程中,每当特定的布尔表达式从假切换为真的时候,定义好的改变事件就会发生。和时间事件触发器一样,改变事件触发器很容易识别;它总是以关键词when开头,布尔表达式放在后面的括号中。布尔表达式可以包含通过其他事件发生传入到状态机的参数,也可以是状态机本身拥有的属性,或者执行状态机的模块所拥有的属性。

伪状态

  状态机可以包含两种顶点:状态和伪状态。二者之间很好区别。状态机可以在状态中暂停,但无法在伪状态中暂停。状态机添加伪状态是为了在状态之间的转换上指定控制逻辑。SysML定义了九种伪状态。大部分情况下只需要两种:初始伪状态和连接伪状态。1)初始伪状态表示状态机开始执行时的第一个状态(或者当复合状态变成活动状态时的第一个子状态)。初始伪状态的标识法是一个小型的实心圆。它不允许拥有任何输入的转换,而输出的转换也不允许拥有触发器或者守卫。若非如此,就意味着状态机可能会在初始伪状态中暂停,等待一个事件发生,或者等待守卫成为真,而状态机是不允许在伪状态中停留的。输出的转换则可以拥有一个影响。2)连接伪状态可以把状态间的多个转换组合成一个(更可读)的复合转换。连接伪状态的标识法也是一个小型的实心圆(通常要比初始伪状态更小一些)。和初始伪状态不同的是,连接伪状态必须拥有一个或多个输入转换,以及一个或多个输出转换。事实上,单个伪状态可能同时拥有多个输入的转换和多个输出的转换。带有多个输出转换的连接伪状态可以作为决定点,它会导向多个可选目标顶点中的一个在这种情况下,每个输出转换都必须拥有一个指定的守卫。当触发事件发生的时候,守卫估值为真的转换就是将被触发的那个。如果那个时候恰好所有守卫都为假,那么状态机就会保持当前状态。可以选择在(最多)一个转换上指定守卫else以确保每次做出决定的时候都会触发一个转换。可以把多个连接伪状态链接到一起,组成状态之间任意复杂的复合转换。

区域

  和活动以及交互一样,状态机可以表示并发行为。通过向状态机添加多个区域,可以表示并发行为。每个区域都包含自己的系列顶点和转换。每个区域都会独立对事件发生做出响应。区域是彼此正交的。通过使用分隔状态机图内容区域的虚线,可以表达状态机拥有多个区域。(只带有一个区域的状态机——最常见的情况——不会显示任何虚线。)可以选择为每个区域指定名称;那个名称会显示为区域内某处的标签,一般位于某个角落。当状态机拥有多个区域的时候,对转换、状态和伪状态所声明的一切都适用。只是有一个关键之处有所不同,在系统操作的任意时刻,每个区域都必须只拥有一个活动状态,即在状态机行为的执行过程中,状态机在多个状态中并发(每个区域一种状态)。每个区域都会独立对事件发生做出响应。事件发生可能会导致一个而不是多个区域中的转换触发。一个事件发生也可能会导致多个转换被触发,但是每个区域最多一个转换。

小结

  状态机图可以说明系统基于状态的行为对事件发生做出的响应。并非系统中所有结构都拥有定义好的系列状态,并且带有那些状态之间的转换。对那些有状态的结构,状态机是唯一,可以用来和利益相关者沟通那些结构行为的媒介。

《SysML精粹》学习记录--第八章相关推荐

  1. SysML精粹学习笔记一

    一.MBSE(Model Based Systems Engineering,基于模型的系统工程) 1.MBSE的三大支柱:建模语言.建模方法.建模工具 2.能够构建和阅读形式良好的模型,是MBSE的 ...

  2. SysML精粹学习笔记二

    内部模块图与状态机图 一.内部模块图 二.状态机图 一.内部模块图 二.状态机图 xmind和jpg格式文件下载链接 状态机图网址浏览链接,密码:56JC 内部模块图网址浏览链接,密码:ob35

  3. 《SysML精粹》学习记录--第七章

    <SysML精粹>学习记录 第七章:序列图 序列图简介 序列图元素 消息 约束 组合片段 交互使用 小结 第七章:序列图 序列图简介   序列图是另一种可以用来说明系统动态行为信息的Sys ...

  4. 《SysML精粹》学习记录--第十章

    <SysML精粹>学习记录 第十章:包图 包图简介 特定包 包图与模块定义图的选择 小结 第十章:包图 包图简介   包图是显示系统模型的组织方式时所创建的图.系统模型的组织方式由包的层级 ...

  5. 《SysML精粹》学习记录--第十一章

    <SysML精粹>学习记录 第十一章:需求图 需求图简介 需求图元素 需求关系 需求关系标识法 小结 第十一章:需求图 需求图简介   需求图是SysML中的主要媒介,可用于向利益相关者传 ...

  6. 《SysML精粹》学习记录--第九章

    <SysML精粹>学习记录 第九章:参数图 参数图简介 参数图元素 小结 第九章:参数图 参数图简介   参数图是一种独特的SysML图,它用于说明系统的约束.这些约束一般以数学模型的方式 ...

  7. 《SysML精粹》学习记录--第二章

    <SysML精粹>学习记录 第二章:系统建模语言概览 SysML介绍 SysML与UML SysML图概览 SysML通用图 小结 第二章:系统建模语言概览 SysML介绍   SysML ...

  8. 《SysML精粹》学习记录--第四章

    <SysML精粹>学习记录 第四章:内部模块图(Internal Block Diagram,IBD) IBD介绍 组成部分属性 引用属性 连接器 项目流 内嵌组成部分和引用 小结 第四章 ...

  9. 《SysML精粹》学习记录--第六章

    <SysML精粹>学习记录 第六章:活动图 活动图简介 活动图外框 活动图的关键元素   动作   对象节点   边   动作详述   控制节点 活动分区 小结 第六章:活动图 活动图简介 ...

最新文章

  1. 多媒体指令(灰度像素最大值)
  2. pycharm goland clion 常用快捷键 使用技巧
  3. 深入探究 Win32 PE 文件格式
  4. UNIX再学习 -- 函数 fork 和 vfork
  5. uniCloud云函数——微信小程序登录凭证校验[code2Session](即:使用 code 换取 openid 和 session_key 等信息)解决方案
  6. bzoj 1597 土地购买
  7. 可以获得索引值码_SEO优化可以为网站带来更高的业务销售额
  8. 读书笔记之《程序员必读的职业规划书》
  9. 自动更新本地 GIT 仓库
  10. 从0开始编写dapper核心功能、压榨性能、自己动手丰衣足食
  11. 解决HP ProLiant DL380 G5的Centos 7安装与启动不能识别硬盘问题
  12. jquery城市选择案例
  13. 【SQL】通过rowid查找及删除重复记录
  14. sparkstreaming自定义kafka
  15. cocostudio学习之关于UIWidget需要add CCNode控件的问题
  16. Mobile First! Wijmo 5 之 架构
  17. 2019年香港科大EMBA校友会年度盛会在珠海圆满落幕
  18. vue.js 密码加密_几种常见的密码简介
  19. [计算机网络笔记14] IPv4地址—定长子网掩码和变长子网掩码
  20. android framework-zygote进程

热门文章

  1. 通俗科普:弦论要求空间必须是25维的解释
  2. gitlab安装后出现的web IDE显示报错问题
  3. iOS设备 历代 机型对照表
  4. 路普达-区块链技术的本质与未来应用趋势
  5. oracle表空间不足影响,oracle表空间不足
  6. 概率计算机在线,高斯正态分布(概率)计算公式与在线计算器_三贝计算网_23bei.com...
  7. 新开通了我的CSDN博客,写个处女篇
  8. 【研报】供应链流通视角,透视中国商流之变革
  9. 别错过,教你如何用电脑玩手机
  10. ABeam Insight | 德硕智能制造系列(1):智能制造概览(上)