




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章 状态图和活动图5.1 状态图UML中的状态图( statechart diagram)主要用于描述一个对象在其生存期间的动态行为,表现一个对象所经历的状态序列,以及对这些事件所作出的反应。状态图主要是由状态和状态间转移对象构成的。而事件又是两者之间一个重要的概念。状态图是UML中对系统的动态行为建模的5个图之一,状态图在检查、调试和描述类的动态行为时非常有用。一般可以用状态机对一个对象(这里所说的对象可以是类的实例、用例的实例或整个系统的实例)的生命周期建模,状态图是用于显示状态机的,重点在于描述状态之间的控制流。5.1.1 状态图基本概念 状态图中的几个基本概念有:状态、组合状态、子状态、历史状态、转移、事件和动作。5.1.1.1 状态 状态(state)是指在对象的生命期中的某个条件或状况,在此期间对象将满足某些条件、执行某些活动或等待某些事件。所有对象都具有状态,状态是对象执行了一系列活动的结果,当某个事件发生后,对象的状态将发生变化。 一个状态有以下几个部分:状态名(name )、进入/退出动作(entry/exit ation) ,内部转移(internal transition)、子状态(substate)、延迟事件(deferred event)。 状态可以细分为不同的类型,例如初态、终态、中间状态、组合状态、历史状态等。一个状态图只能有一个初态,但终态可以有一个或多个,也可以没有终态。中间状态包括两个区域:名字域和内部转移域,如图5.2所示。其中内部转移域是可选的。图5.2:状态的例子图5.2的状态的名字是Lighting。当进入这个状态时,做开灯(turnOn)动作,离开这个状态时,做关灯(turnOf f)动作,当对象处于这个状态时,灯要闪烁5次(blinkFivetimes ),当电源关闭(pwoerOff)事件出现时,使用自供应电源(powerSupplySelf) e需要注意的是,对象在Lighting状态时,有一个被延迟处理的事件,即当出现自检(seflTest)事件时,对象将延迟响应这个事件。即不在Lighting这个状态中处理这个事件,而是延迟到以后在别的状态中处理这个事件。状态图的符号如下图所示:5.1.1.2 组合状态和子状态嵌套在另一个状态中的状态称作子状态(substate),一个含有子状态的状态被称作组合状态(composite state)。如图5. 3所示是组合状态和子状态的例子,其中W是组合状态,E,F是子状态。 图5.3组合状态和子状态从图5. 3可以看出,组合状态中也可以有初态和终态。转移r是从状态B转移到组合状态W本身,转移P则是从A状态直接转移到组合状态中的子状态E 类似地,可以从组合状态中的子状态直接转移到目标状态(如转移s),也可以从组合状态本身转移到目标状态(如转移v).子状态之间可分为or关系和and关系两种。or关系说明在某一时刻仅可到达一个子状态,and关系说明组合状态中在某一时刻可同时到达多个子状态。如图5.4所示是子状态之间or关系的例子。图5.4:子状态之间的or关系如图5.5所示是子状态之间and关系的例子。其中子状态Forward和Low speed之间,Forward和High speed之间,Backward和Low speed之间、Backward和High speed之间都是and的关系。图5.5:子状态之间的and关系5.1.1.3 历史状态 历史状态(history state)是一个伪状态(pseudostate),其目的是记住从组合状态中退出时所处的子状态。当再次进入组合状态时,可直接进人这个子状态,而不是再次从组合状态的初态开始。 在UML中,历史状态用符号或表示,其中是浅(shallow)历史状态的符号,表示只记住最外层组合状态的历史;是深(deep)历史状态的符号,表示可记住任何深度的组合状态的历史。顺便提一下, UML中其他建模元素的符号都是直接采用图形符号,没有采用英文字母,如类采用矩形符号,用例采用椭圆符号等,只有历史状态的表示符号中采用了英文字母。需要注意的是,如果一个组合状态到达了其终态,则会丢失历史状态中的信息,就好像还没有进人过这个组合状态一样。如图5. 6所示是历史状态的例子。图5.6历史状态这是一个对数据进行备份时的状态图,备份时要经过Collecting, Copying,CleaningLlp等几个状态。如果在进行数据备份过程中,有数据查询请求,则可以中断当前的备份工作,然后回到Command状态进行查询操作。查询结束后,可以从Command状态直接到刚才中断时退出的状态接着进行备份操作。(例如,如果刚才是从Copying状态被中断退出的,则现在可以直接从Command状态到Copying状态。)当然,如果不采用历史状态,也可以用别的状态图表示出和图8.fi的状态图相同的意思,但得到的状态图中要增加许多新的状态、转移或变量,这样状态图就显得过于混乱和复杂。5.1.1.4 转移转移(transition)是两个状态之间的一种关系,表示对象将在第一个状态中执行一定的动作,并在某个特定事件发生而且某个特定的警戒条件满足时进人第二个状态。描述格式如下:Event-signatueguad-condition / action其中event-signature是事件特征标记,guad-condition是警戒条件,action是动作,而事件特征标记的格式为:event-name(comma-separated-parameter-list)其中event-name是事件名,comma-separated-parameter-list是逗号分隔的参数列表。图5.7:相互之间互斥的转移5.1.1.5 事件事件(event)是对一个在时间和空间上占有一定位置的有意义的事情的详细说明。事件产生的原因有调用、满足条件的状态的出现、到达时间点或经历某一时间段、发送信号等。在UML中,事件分为4类:(1)调用事件(call event)。调用事件表示的事对操作度的调度,其个格式如下:Event-name(comma-separated-parameter-list)其中event-name是事件名,comma-separated-parameter-list是逗号分隔的参数列表。如图5.8所示是调用事件的例子,其中事件名是startAutopilot,参数是normal。图5.8调用事件 (2)变化事件(change event)。如果一个布尔表达式中的变量发生变化,使得该布尔表达式的值相应地变化,从而满足某些条件,则这种事件称作变化事件。变化事件用关键字when表示,如图5. 9所示是变化事件的例子。图5.9变化事件变化事件和警戒条件(guard condition)这两个概念很相似,两者的区别是警戒条件是转移(transition )说明的一部分,只在所相关的事件出现后计算一次这个条件,如果值为false ,则不进行状态转移,以后也不再重新计算这个警戒条件,除非事件又重新出现。而变化事件表示的是一个要被不断测试的事件。(3)时间事件(time event)。时间事件指的是满足某一时间表达式的情况的出现,例如到了某一时间点或经过了某一时间段。时间事件用关键字after或when表示,如图5. 10所示是时间事件的例子。图5.10时间事件(4)信号事件(signal event)。信号事件表示的是对象接收到了信号这种情况,信号事件往往会触发状态的转移。这里提到了信号这个概念,所谓信号,就是由一个对象异步地发送、并由另一对象接收的已命名的对象。 在UML中,信号用版型为的类表示,信号之间可以具有泛化关系,形成层次结构。如图5. 11所示是信号之间泛化关系的例子。图5.11:信号事件信号事件和调用事件比较相似,但信号事件是异步事件,调用事件一般是同步事件。另外,信号事件和调用事件的表示格式是一样的。5.2 活动图 活动图是对系统的动态行为建模的5个图之一。在OMT, Booch, OOSE方法中并没有活动图的概念,UML中的活动图的概念是从别的方法中借鉴来的。与Jim Odell的事件图、Petri网、SDL建模技术等类似,活动图可以用于描述系统的工作流程和并发行为。活动图其实可看作状态图的特殊形式,活动图中一个活动结束后将立即进人下一个活动在状态图中状态的转移可能需要事件的触发)。活动图的几个基本概念有:活动、泳道、分支、分叉和汇合、对象流。5.2.1 活动活动(activity)表示的是某流程中的任务的执行,它可以表示某算法过程中语句的执行。 在活动图中需要注意迷分动作状态(action stale)和活动状态(activity state)这两个概念。 动作状态是原子的,不能被分解,没有内部转移.没有内部活动,动作状态的上作所占用的时间是可忽略的,动作状态的目的是执行进人动作(entry action),然后转向另一个状态。活动状态是可分解的,不是原子的,其工作的完成需要一定的时间可以把动作状态看作活动状态的特例。5.2.2 泳道 泳道(Swimlane)是活动图中的区域划分,根据每个活动的职责对所有活动进行划分,每个泳道代表一个责任区。泳道和类并不是一一对应的关系.泳道关心的是其所代表的职责,一个泳道可能由一个类实现,也可能由多个类实现。如图5.12所示是使用泳道的例子。图5.12 泳道5.2.3 分支 在活动图中,对于同一个触发事件,可以根据不同的警戒条件转向不同的活动,每个可能的转移是一个分支(branch)。在UML.中表示分支有两种方法,如图5.13所示,这两种表示方法的区别是,右边的活动图采用菱形符号表示分支。图 5.13 分支的两种表示方法5.2.4 分叉和汇合分支表示的是从多种可能的活动转移中选择一个,如果要表示系统或对象中的并发行为,则可以使用分叉(fork)和汇合(join)这两种建模元素。分叉表示的是一个控制流被两个或多个控制流代替,经过分叉后,这些控制流是并发进行的;汇合正好与分叉相反,表示两个或多个控制流被一个控制流代替。如图5.14所示是分叉和汇合的例子。图5.14 分叉和汇合5.2.5 对象流在活动图中可以出现对象。对象可以作为活动的输人或输出。活动图中的对象流表示活动和对象之间的关系,如一个活动创建对象(作为活动的输出)或使用对象(作为活动的输人)等。对象流属于控制流。所以如果两个活动之间有对象流,则控制流就不必重复画出了。如图5.15所示是使用了对象流的活动图。图 5.15 对象流活动Submit Defect 创建对象Defect,该对象的状态是Submitted,活动Fix Defect,使用处于Submitted状态的对象Defect,同时把对象的状态改为Fixed状态。5.3 活动图的用途活动图对表示并发行为很有用,其应用非常广泛。一般活动图可以对系统的工作流程建模,即对系统的业务过程建模,也可以对具体的操作建模,用于描述计算过程的细节。用活动图对工作流程建模的例子。如图5.16所示的用例图有两个用例:产品制造(Make Part )和发货(ship Part)。图 5.16用例图在进行用例分析时,可以用活动图来描述具体的工作流程。由于这个工作流程涉及两个用例,所以采用脚本或顺序图都很难描述,而采用活动图则可以很好地解决这个问题。如图5.17所示是对这个工作流程的具体描述例子。图 5.17 用活动图描述工作流程活动图除了可以对工作流程建模外,也可以对具体的操作建模。在结构化分析和设计中,开发人员往往用流程图来描述一个算法。在UML中没有流程图的概念,从某种意义上说,活动图的功能已包含了流程图。如果需要描述一个算法,可以用活动图来描述。如图5.18所示是用活动图描述Line类的求直线交点的算法BRJ99, p272,这个算法本身并不难。这里采用这个例子只是说明活
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 摆地摊教学合同协议书
- 竞业合同协议书模板
- 家政代理合同协议书模板
- 运营和老板合作合同协议书
- 2025年中国纳米水滑石项目创业计划书
- 中国3,3-二甲基-1-丁酸项目创业计划书
- 中国境外油田服务项目创业计划书
- 直播游戏运营方案
- 常熟POCT试剂项目商业计划书
- 病人陪护合同协议书范本
- 2025年山东省青岛大学附属中学九年级中考模拟数学试题
- 《工业网络与组态技术》课程标准
- 中医理疗合同范本
- 小学经典诵读社团活动计划、安排、记录
- 中职高教版(2023)语文基础模块下册-第五单元写作-说明的关键在于说得“明”【课件】
- 手机售后培训方案
- 2025年度全国大学生创新创业竞赛项目保密承诺书3篇
- DB33T 2288-2020 淡水池塘养殖尾水处理技术规范
- GB/T 44880-2024因果矩阵
- 安保工作的多元化发展
- 【MOOC】人格与精神障碍-学做自己的心理医生-暨南大学 中国大学慕课MOOC答案
评论
0/150
提交评论