搜索
bottom↓
回复: 14

UML学习笔记 状态机部分

[复制链接]

出0入0汤圆

发表于 2014-1-31 23:19:48 | 显示全部楼层 |阅读模式
本帖最后由 E-WALKER 于 2014-2-1 22:44 编辑

先讨论下为什么要学习UML:
契机:最近想研究量子平台,良好的UML功底对研究量子平台的DATASHEET大有裨益。
动力:1.UML是软件交流的基础工具
          2.状态机是嵌入式领域一大利器

OK,就以这本书开始啦


综述:
        状态机通过为每一个对象的生命周期建模的方式解释对象的动态行为。
我们把每一个对象被分割为单体,与外界通信的方式仅为检测事件,并对事件做出相应。事件代表了所有对象可以检测到的变化,形如收到明确的触发信号,或者定时器产生的中断。所有可以影响到对象属性的事物都可以被描述为事件。真实世界发生的事情被转化为传输至系统中的信号(我们最常见的就是各类电信号)。
        一个状态就是,当对象的属性被确定时,那么他对某特定的行为响应就被确定了,换句话来说,所有有着相同状态的对象,在相同事件发生时,他们的响应也是近似的。
        状态机即解释了一个对象可以保持在哪些状态,对于每一个特定的状态,状态机解释了当对象接受到事件时,会产生的响应,以及接下来转移到的状态。

状态机
        状态机是包含状态与变化的图表,形如:

        通常,状态机伴随着类,并且解释了类的实例对事件的响应。
        状态机是对单个对象的建模,所有外界的影响都被概括为事件,当对象检测到时间的时候,它根据当前的状态做出响应。响应可能包括对象属性值的改变以及使对象转变到新的状态。
        状态机是一种有局限的视图,因为它只是看单独的对象的行为。这是一种对系统的简化,不适合用于系统整体的分析,但是,对于精细分析对象的行为,这是一个好的选择。

事件
        事件发生在确定的时间点,它是不会持续的。如果一些事物发生后会产生影响,我们就把它们建模为事件,就像类描述符代表了所有该类实例化的对象拥有相同的结构一样,事件描述符代表了一类事件。当一个特定的事件产生时,我们称之为发生(occurrence),像对象一样,事件也是有参数的。事件可分为四类:调用事件,改变事件,信号事件,时间事件(概述如下表)

        信号:信号严格的存在于两个对象之间的信号中,接受到信号对于接受对象来说是一个事件,发送对象严格的创造且初始化信号的实例用于发送给各类对象。在大多数场合,信号是异步的,即发送对象不会等待接受对象处理结束,只会一直发送信号。
        信号在类中可以以《signal》的方式被声明,同时,信号也是支持继承机制的。

        调用事件:调用事件是指一个对象对调用的接收,与类的方法不同,被调用者会在之后与调用者并行运行。
        改变事件:改变事件发生在特定属性值的布尔表达式满足某一特定条件时。这是一种非常直观的方式,但它有两个缺点:1.不必要的计算量,2.对于原因与影响的关系来说,它是非常模糊的。
        注意分辨保护条件和改变事件的区别,改变事件是事实在测试布尔值的,而保护条件则相当于操作系统中的临界区,只在需要的时候才出现。
        时间事件:很好理解,到了某个时间所触发的时间。

状态

         状态可以用三种互补的方式来表示:一些列对象的属性值,一个正在等待某些事件发生的时间段,一个正处于某种活动的时间段,状态可以有名称,它是状态机构建完毕后基础的控制单元。
         在状态机中,一系列的状态通过“转换”来链接。一个转换链接着两个状态(或者更多,如果图中含有分支和结合控制)。转换由转换过程所离开的状态处理。当对象处于一个状态的时候,它对所有可以让它离开当前状态的触发事件是敏感的。
         状态一般用这样的图形来表示:

      



转换

         大致上来说,转换包括四个部分:触发事件,保护条件,动作,目标状态。转换可以分为两类:外部转换,内部转换。
         外部转换:外部转换可以改变当前的状态。这是最常见的转换。如图:
        

         触发事件:触发是指该事件使能了一个转换。一个事件可能含有参数,这些参数在转换过程中将可能会用到。事件是不连续的,即只发生于某一个时间点。当对象知道事件发生后,该事件被置入到对象的事件池中。一个对象在某个时间点只能处理一个事件,当对象处于空闲状态时,就会从对象池中抽取事件予以处理。当对象处理事件时,转换即开始了,所有其他的在事件池中的事件将不再被“记忆”(一个特例:延时处理事件,它将一直保留在事件池直到被触发,或者到了不支持改事件的状态中)。如果两个事件同时发生了,也只能处理一个,不会触发任何转换的事件将被忽略与丢弃。

         保护条件:保护条件是一个布尔表达式。它会引用到一些对象的属性值,将他们视作触发事件的参数。保护条件在触发事件发生时将被测试,如果表达式为真,那么就开始转换。保护条件只有在事件发生时才被测试。相同的事件可以作为不同转换的触发条件作用于一个状态,为此,它们就需要不同的保护条件,确保在事件发生时只有一种转换会发生。

         动作:当转换发生时,它的动作将会被执行。(原书此处花了两大段讨论临界问题,此处略去)
         入口和出口动作:进入状态则执行入口动作,离开状态将执行出口动作,它们存在的意义是使得状态的定义不依赖于状态的转换,起到封装的作用。
         内部转换:是指不执行出口动作,入口动作,不改变状态,只执行动作的转换。

组合状态

         一个简单的状态是没有子结构的,而一个组合状态就可以分割为很多子结构。细节如下图:
         
        


         组合状态的每一个区域都可能含有初始状态,一个链接到组合状态边界的转换被默认设定链接到初始状态。一个新的对象以它最外层的初始状态作为起始状态。原则上,一个组合状态应该含有终态,当对象到达终态时,它就被销毁了,下图就是一个范例:

         

        

         当进入一个并发的状态时,每进入一个并发状态,控制线程就会增加一个。下图是并发状态的范例:

        



         通常,在一个状态机中可以引用其他状态机的一部分,状态机是可以命名的,并可以用它的名字引用其他一个或者多个状态机。目标状态机是一个子机器,引用这个子机器的状态叫做子机器引用状态。即代表在引用处用一个状态机替换原有内容。进入一个子机器会激活目标的初始状态。

         
         


        

         总结:文章投入时间:昨天晚上4个小时,今天晚上3个半小时。收获:比较扎实的掌握了状态机部分的UML。不足:这篇文章估计也就自己看的懂,以后在此类文章中要改进!

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2014-1-31 23:21:56 | 显示全部楼层
本帖最后由 E-WALKER 于 2014-2-1 22:40 编辑

持续翻译,目标是每天一点点,翻完这个目标就是把QP这家伙给边用边翻出来

出0入0汤圆

发表于 2014-2-1 07:22:36 来自手机 | 显示全部楼层
顶顶,楼主功德无量……

出0入0汤圆

发表于 2014-2-1 21:45:57 | 显示全部楼层
可以参看下micro raw-os 的状态机部分, 和qp是类似的,但是实现更简洁。而且micro raw-os 的状态机部分也可以作为raw-os的一个协层去运行。
http://www.raw-os.org/module.html

出0入0汤圆

 楼主| 发表于 2014-2-1 22:33:24 | 显示全部楼层
lulu爱 发表于 2014-2-1 21:45
可以参看下micro raw-os 的状态机部分, 和qp是类似的,但是实现更简洁。而且micro raw-os 的状态机部分也 ...

谢谢!你就是作者吗?

出130入129汤圆

发表于 2014-2-1 22:47:50 | 显示全部楼层
lulu爱 发表于 2014-2-1 21:45
可以参看下micro raw-os 的状态机部分, 和qp是类似的,但是实现更简洁。而且micro raw-os 的状态机部分也 ...


比QP易懂?

出0入0汤圆

发表于 2014-2-2 10:54:16 | 显示全部楼层
源代码比qp的要容易懂,思想主题也很突出,更重要的是可以作为raw-os的一个协程去跑,继承了raw-os系统最大内核关中断时间为0us的特性,实现了最高的实时性。也弥补了非抢占系统qp的不足。qp的抢占特性不是优点。

出0入0汤圆

发表于 2014-2-2 10:55:51 | 显示全部楼层
楼主E-WALKER 支持你继续写uml 的qp文章,因为大家的设计思路是一致的。

出0入0汤圆

 楼主| 发表于 2014-2-2 11:44:30 | 显示全部楼层
图片全没了,原因是QQ空间防盗链。。。。。。。。下次发帖会注意的,用百度空间存图就能解决这个问题,需要看具体有那些图的朋友请上http://user.qzone.qq.com/1045642972/2

出0入0汤圆

 楼主| 发表于 2014-2-2 11:46:23 | 显示全部楼层
lulu爱 发表于 2014-2-2 10:55
楼主E-WALKER 支持你继续写uml 的qp文章,因为大家的设计思路是一致的。

嗯 :)
我觉得学习要有个顺序,毕竟最近没有项目压着,所以一件一件来,搞定QP后就直奔你的OS 谢谢哦

出0入0汤圆

 楼主| 发表于 2014-2-2 11:50:11 | 显示全部楼层
本帖最后由 E-WALKER 于 2014-2-2 11:51 编辑

。。。。无语。。。百度空间传的图都防盗链了。。。

出130入129汤圆

发表于 2014-2-2 11:52:12 | 显示全部楼层
E-WALKER 发表于 2014-2-2 11:50
。。。。无语。。。百度空间传的图都防盗链了。。。

百度的图也不能外链

出0入0汤圆

发表于 2014-2-3 10:02:08 来自手机 | 显示全部楼层
E-WALKER 发表于 昨天 11:50
本帖最后由 E-WALKER 于 2014-2-2 11:51 编辑

。。。。无语。。。百度空间传的图都防盗链了。。。

阿莫可以直接上图的呀.
怎么不存在阿莫上的.
正在读你的文章,很对我的口味.希望你多出精品呀.

出0入0汤圆

发表于 2014-2-23 22:37:44 | 显示全部楼层
以前一直觉得UML对搞嵌入式没多大用,现在发现程序量大了,没个分析思绪完全是乱的了

出0入0汤圆

发表于 2016-5-18 12:59:36 | 显示全部楼层
图片怎么就看不到了呢?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 04:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表