资源预览内容
第1页 / 共56页
第2页 / 共56页
第3页 / 共56页
第4页 / 共56页
第5页 / 共56页
第6页 / 共56页
第7页 / 共56页
第8页 / 共56页
第9页 / 共56页
第10页 / 共56页
亲,该文档总共56页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第第8 8章章 状态图和活动图状态图和活动图8.1 什么是状态图 定义:用于描述一个对象在其生存期间的动态行 为,表现一个对象所经历的状态序列,引起状态 转移的事件,以及因状态转移而伴随的动作。图8.1 状态图的例子8.1 什么是状态图 动作与状态相关 VS 动作与转移相关 所有的动作与状态相关:称这个状态机为Moore机 所有的动作与转移相关:称这个状态机为Mealy机理论上证明:Moore机和Mealy机在表示能力上是等价的8.1 什么是状态图 状态图应该在具有以下两个特性的属性上建模 属性拥有较少的可能取值 属性在这些值之间的转移有一定的限制例如:如果类SellableItem有两个属性salePrice和 status, salePrice类型为Money,正实数。 status枚举类型,取值received、inInspection、 accepted、rejected。8.2 状态图中的基本概念 状态:指在对象的生命期中的某个条件或状况, 在此期间对象将满足某些条件、执行某些活动或 等待某些事件。状态名进入/退出动作内部转移子状态延迟事件 图8.2 状态的例子8.2.2 组合状态和子状态 嵌套在另一个状态中的状态称作子状态( substate),一个含有子状态的状态被称作 组合状态(composite state)。如图8.3所示 是组合状态和子状态的例子,其中W是组合 状态,E、F是子状态。 8.2.2 组合状态和子状态图8.3 组合状态和子状态 8.2.2 组合状态和子状态 子状态之间可分为or关系和and关系两种。 or关系说明在某一时刻仅可到达一个子状态。 图8.4 子状态之间的or关系 8.2.2 组合状态和子状态 and关系说明组合状态中在某一时刻可同时 到达多个子状态。 图8.5 子状态之间的and关系 8.2.3 历史状态 历史状态(history state)是一个伪状态( pseudostate),其目的是记住从组合状态中 退出时所处的子状态。当再次进入组合状态 时,可直接进入这个子状态,而不是再次从 组合状态的初态开始。 8.2.3 历史状态 在UML中,历史状态用符号 H 表示或H* 表示,其中H是浅(shallow)历史状态的符 号,表示只记住最外层组合状态的历史; H*是深(deep)历史状态的符号,表示可 记住任何深度的组合状态的历史。 8.2.3 历史状态图8.6 历史状态8.2.4 转移 转移(transition)是两个状态之间的一种关系,表 示对象将在第一个状态中执行一定的动作,并在 某个具体事件发生而且某个特定的警戒条件满足 时进入第二个状态。 描述转移的格式如下: event-signature guard-condition / action 其中event-signature是事件特征标记,guard- condition是警戒条件,action是动作,而事件特征 标记的格式为: event-name ( comma-separated-parameter-list ) 其中event-name是事件名,comma-separated- parameter-list是逗号分割的参数列表。 8.2.4 转移【例8.1】转移的例子。targetAt(p) isThreat / t.addTarget(p) 其中事件名是targetAt,p是事件的参数, isThreat是警戒条件,t.addTarget(p)是要做 的动作,这里动作的参数p就是事件的参数 。这个例子中的转移包含了事件特征标记、 警戒条件、动作3部分,根据实际情况,这3 部分可以省略一部分或全部省略。8.2.4 转移 一般状态之间的转移是由事件触发的,因此 应在转移上标出触发转移的事件表达式。如 果转移上未标明事件,则表示在源状态的内 部活动执行完毕后自动触发转移。 8.2.4 转移 对于一个给定的状态,最终只能产生一个转 移,因此从相同的状态出来的,事件相同的 几个转移之间的条件应该是互斥的。 图8.7 相互之间互斥的转移8.2.5 事件 事件(event)是对一个在时间和空间上占 有一定位置的有意义的事情的详细说明。事 件产生的原因有调用、满足条件的状态的出 现、到达时间点或经历某一时间段、发送信 号等。8.2.5 事件 在UML中,事件分为4类: 调用事件 变化事件 时间事件 信号事件8.2.5 事件1、调用事件(call event)。调用事件表示的 是对操作的调度,其格式如下: event-name ( comma-separated-parameter-list ) 其中event-name是事件名,comma-separated -parameter-list是逗号分割的参数列表。8.2.5 事件 如图8.8所示是调用事件的例子,其中事件 名是startAutopilot,参数是normal。 图8.8 调用事件8.2.5 事件2、变化事件(change event)。如果一个布尔 表达式中的变量发生变化,使得该布尔表达 式的值相应地改变,从而满足某些条件,则 这种事件称作变化事件。变化事件用关键字 when表示,如图8.9所示是变化事件的例子 。 8.2.5 事件图8.9 变化事件 8.2.5 事件3、时间事件(time event)。时间事件指的是 满足某一时间表达式的情况的出现,例如到 了某一时间点或经过了某一时间段。时间事 件用关键字after或when表示,如8.10所示是 时间事件的例子。 8.2.5 事件图8.10 时间事件 8.2.5 事件4、信号事件(signal event)。信号事件表示 的是对象接收到了信号这种情况,信号事件 往往会触发状态的转移。 8.2.5 事件 在UML中,信号用版型的类表示 ,信号之间可以具有泛化关系,形成层次结 构。如图8.11所示是信号之间泛化关系的例 子。8.2.5 事件图8.11 信号之间的泛化关系8.2.6 动作 动作(action)是一个可执行的原子计算。 也就是说,动作是不可被中断的,其执行时 间是可忽略不计的。 UML并没有规定描述动作的具体语法格式 ,一般建模时采用某种合适的程序设计语言 的语法来描述就可以了。 8.2.6 动作 UML规定了两种特殊的动作:进入动作( entry action)和退出动作(exit action)。 进入动作表示进入状态时执行的动作,格式 如下:entry / action-expression 退出动作表示退出状态时要执行的动作,格 式如下:exit / action-expression 其中action-expression可以使用对象本身的属 性和输入事件的参数。 8.2.6 动作【例8.2 】进入动作和退出动作的例子。entry / setMode(onTrack)exit / setMode(offTrack) 8.3 状态图的工具支持 对状态图的工具支持包括两方面的内容:正 向工程和逆向工程。正向工程指的是根据和 状态图生成代码,逆向工程指的是从源代码 逆向得到状态图。 8.4 什么是活动图 活动图是对系统的动态行为建模的5个图之 一。在OMT、Booch、OOSE方法中并没有 活动图的概念,UML中的活动图的概念是 从别的方法中借鉴来的。与Jim Odell的事件 图、Petri网、SDL建模技术等类似,活动图 可以用于描述系统的工作流程和并发行为。 活动图其实可看作状态图的特殊形式,活动 图中一个活动结束后将立即进入下一个活动 (在状态图中状态的转移可能需要事件的触 发)。8.5 活动图中的基本概念 下面讨论活动图中的几个基本概念: 活动 泳道 分支 分叉和汇合 对象流 8.5.1 活动 活动(activity)表示的是某流程中的任务的 执行,它可以表示某算法过程中语句的执行 。 在活动图中需要注意区分动作状态和活动状 态这两个概念。 8.5.1 活动 动作状态是原子的,不能被分解,没有内部 转移,没有内部活动、动作状态的工作所占 用的时间是可忽略的。动作状态的目的是执 行进入动作(entry action),然后转向另一 个状态。 活动状态是可分解的,不是原子的,其工作 的完成需要一定的时间。可以把动作状态看 作是活动状态的特例。 8.5.2 泳道 泳道(swimlane)是活动图中的区域划分, 根据每个活动的职责对所有活动进行划分, 每个泳道代表一个职责区。泳道和类并不是 一一对应的关系,泳道关系的是其所代表的 职责,一个泳道可能由一个类实现,也可能 由多个类实现。8.5.2 泳道图8.13 泳道8.5.3 分支 在活动图中,对于同一个触发时间,可以根 据不同的警戒条件转向不同的活动,每个可 能的转移是一个分支(branch)。8.5.3 分支 在UML中表示分支有两种方法,如图8.14所 示,这两种标识方法的区别是,右边的活动 图采用菱形符号表示分支。图8.14 分支的两种表示方法8.5.4 分叉和汇合 8.5.3节介绍的分支表示的是从多种可能的活 动转移中选择一个,如果要表示系统或对象 中的并发行为,则可以使用分叉(fork)和 汇合(join)这两种建模元素。8.5.4 分叉和汇合 分叉表示的是一个控制流被两个或多个控制 流代替,经过分叉后,这些控制流是并发进 行的; 汇合正好与分叉相反,表示两个或多个控制 流被一个控制流代替。8.5.4 分叉和汇合图8.15 分叉和汇合8.5.5 对象流 在活动图中可以出现对象。对象可以作为活 动的输入或输出。活动图中的对象流表示活 动和对象之间的关系,如一个活动创建对象 (作为活动的输出)或使用对象(作为活动 的输入)等。8.5.5 对象流 对象流属于控制流。所以如果两个活动之间 有对象流,则控制流就不必重复画出了。如 图8.16所示是使用了对象流的活动图。8.5.5 对象流图8.16 对象图 8.6 活动图的用途 活动图对表示并发行为很有用,其应用非常 广泛。一般活动图可以对系统的工作流程建 模,也可以对具体的操作建模,用于描述计 算过程的细节。 8.6 活动图的用途例8.3 用活动图对工作流程建模的例子。 图8.17 用例图8.6 活动图的用途 在进行用例分析时,可以用活动图来描述具 体的工作流程。 8.6 活动图的用途 活动图除了可以对工作流程建模外,也可以 对具体的操作建模。 8.7 活动图的工具支持 利用工具可以对活动图进行正向工程和逆向 工程,正向工程是利用活动图生成代码。活 动图既可以表示工作流程,也可以表示具体 的算法。如果活动图是表示工作流程的,那 么根据活动图产生代码会非常困难。如果活 动图是表示一个具体算法的,那么根据活动 图产生代码就比较容易。 8.7 活动图的工具支持 逆向工程是根据源代码产生活动图。对类的 一个操作进行逆向工程是可能的,但要对一 个系统进行逆向工程得到描述工作流程的活 动图则非常困难。 目前支持UML的工具很多,但支持活动图 的正向工程和逆向工程的工具并不多, Rose2003也不支持活动图的正向工程和逆向 工程。8.8 状态图和活动图的比较 首先,两者描述的重点不同。状态图描述的 是对象的状态及状态之间的转移,而活动图 描述的是从活动到活动的控制流。 8.8 状态图和活动图的比较 其次,两者使用的场合不同。如果是为了显 示一个对象在其生命周期内的行为,则使用 状态图较好,如果目的是为了分析用例,或 理解涉及多个用例的工作流程,或处理多线 程应用等,则使用活动图较好。8.8 状态图和活动图的比较 当然,如果要显示多个对象之间的交互情况 ,用状态图或活动图都不适合,这时可用顺 序图或协作图描述。8.9 小结 状态图重点在于描述对象的状态及状态之 间的
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号