第10章+状态机图精品.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
10.4 状态的分类 10.4.4 子状态机间实现通信 在并发复合状态中,子状态机之间可能会需要通信。要表示这些通信,当然可以借助于监护条件、状态间的事件来描述,但有时更希望采用异步模式来描述它。在UML1.0中,采用属性和基于同步点两种方法来实现子状态机间的通讯,但在UML2.0中已经废弃了同步状态这一方法。 在图10-17中,状态“课程评价”包含了三个并发的子状态机:第一个子状态机包含两个状态,即“实验1”和“实验2”;第二个子状态机包含一个状态,即“团队项目”;第三个子状态机包含一个状态,即“考试”。 现在来看看第一个子状态机与第二个子状态机之间的通讯方式:选修该课程的学生必须先完成“实验1”才能进入子状态“团队项目”,那么可以通过一个属性来表达两个子状态之间的这种逻辑。 10.4 状态的分类 图10-17 子状态机间的通信 图10-17中,在实验1中添加了一个退出动作,使其退出该状态时将属性lab的值设置为true,再将lab作为另一个子状态“团队项目”执行的监护条件,这样就可以保证在实验1完成之后才能进入子状态”团队项目”。 10.5 建立状态机图 前面已经阐述了状态机图的基本组成,引入了内部转换、状态的进入和退出动作、活动、延迟事件等等;最后还介绍了各种复合状态。下面以一个航班机票预订的例子来说明状态机图的绘制过程。 绘制状态机图的一般步骤是: 1.寻找主要的状态, 2.寻找外部事件,以便确定状态之间的转换 3.详细描述每个状态和转换 10.5 建立状态机图 4..把简单状态图转换为复合状态图。 10.5.1 寻找主要状态 在绘制状态机图时,第一步就是寻找出主要的状态。对于航班机票预订系统而言,我们把飞机票看作一个整体,我们来看飞机票有哪几种状态,以及有哪些事件触发机票状态的变化。 1.确定状态 飞机票有以下4种状态:无预订、部分预订、预订完、预订关闭。 (1)在刚确定飞行计划时,显然是没有任何预订的,并且在顾客预订机票之前都将处于这种“无预订”状态。 10.5 建立状态机图 (2)对于订座而言,显然有“部分预订”和“预订完”两种状态。 (3)当航班快要起飞时,显然要“预订关闭”。 2.寻找外部事件 无论机票处于那种状态,可能有的外部事件有: (1)预订():顾客预订机票。 (2)退订():顾客退订机票。 (3)关闭():机票管理员关闭订票系统。 (4) 取消航班():飞机调度人员取消飞行计划。 10.5.2 确定状态间的转换 我们已经知道了机票的主要状态,也知道了改变机票状态变化的外部事件。现在我们分析状态之间的转换(这里指外部转换)。即,确定当机票处于这一状态时,哪些外部事件能真正改变机票状态,哪些事件对本状态不起作用。可以采用表格的方式来进行分析,如表10-1所示。 10.5 建立状态机图 通过上述分析,确定了状态之间的有效转换,在此基础上可以绘制出相应的状态机图,如图10-18所示。 源目标 无预订 部分预订 预订完 预订关闭 无预订 ? 预订() 不直接转换 关闭() 部分预订 退订()事件发生后,使预订人=0 ? 预订(),无空座 关闭() 预订完 不直接转换 退订() ? 关闭() 预订关闭 无转换 无转换 无转换 ? 图10-18 机票预订系统的初步状态图 表10-1 事件与状态转换 10.5 建立状态机图 对图10-18的说明如下: 1.起初,刚确定航班时,机票无人订,机票处在“无预订”状态;当有顾客预订机票时,机票处在“部分预订”状态;当有人退订时,如果退订时“退订数等于已预订数”,那么退订后状态将回到“无预订”状态。 2.在部分预订状态时,如果再发生预订,而且“预订数=空位数”,那么将订完所有的位置,因此将进入 “预订完” 状态。 3.当机票处在 “预订完” 状态时,只要有人退订,就必将转为 “部分预订” 状态。 10.5.3 详细描述每个状态和转换 前面已经确定了各个状态之间的外部转换,为了详细描述状态,我们给状态添加内部转换、外部转换时的进入和退出动作,以及相关的活动等。 例如,在这个例子中,还存在下一些内部转换和活动: 10.5 建立状态机图 1.机票处在 “部分预订” 状态时,当发生退订事件时,如果退订数小于预订数,那么状态不变;同样的道理,当发生预订事件时,如果预订数小于空位数,那么状态也是不变的。 2.从初态到 “无预订” 状态时,我们要对机票数、预定数和空座位数进行初始化活动。 3.当预订事件和退订事件发生时,都应该更新预订数和空位数的值。但由于座位总数是已知的,因此只要更新预订数就可以了。 通过上述分析,可以在状态机图上,为每个状态添加详细的动作或活动,添加了新信息后,得到如图10-19所示的状态机图。 1

文档评论(0)

***** + 关注
实名认证
文档贡献者

我是自由职业者,从事文档的创作工作。

1亿VIP精品文档

相关文档