UML状态图编写规范
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
UML状态图规范说明
一、状态图简介
状态图(Statechart Diagram)是描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的时间做出反应的。通常我们创建一个UML状态图是为了以下的研究目的:研究类、角色、子系统、或组件的复杂行为。
状态图用于显示状态机(它指定对象所在的状态序列)、使对象达到这些状态的事件和条件、以及达到这些状态时所发生的操作。
状态机用于对模型元素的动态行为进行建模,更具体地说,就是对系统行为中受事件驱动的方面进行建模(请参见概念:事件与信号)。状态机专门用于定义依赖于状态的行为(即根据模型元素所处的状态而有所变化的行为)。其行为不会随着其元素状态发生变化的模型元素不需要用状态机来描述其行为(这些元素通常是主要负载管理数据的被动类)。
状态是对象执行某项活动或等待某个事件时的条件。对象可能会在有限
长度内保持某一状态。状态具有以下几项特征:
二、状态图内容
2.1 转移
转移是两个状态之间的关系,它表示当发生指定事件并且满足指定条件时,第一个状态中的对象将执行某些操作并进入第二个状态。当发生这种状态变更
时,即“触发”了转移。在触发转移之前,可认为对象处于“源”状态;在触发转移之后,可认为对象处于“目标”状态。转移具有以下几项特征:
一个转移可能有多个源状态,在这种情况下,它将呈现为一个从多个并行状态出发的结合点;一个转移也可能有多个目标状态,在这种情况下,它将呈现为一个到多个并发状态的叉形图。
2.2 事件触发器
在状态机环境中,事件是指可触发状态转移的激励的发生。事件可能包括信号、调用、时间推移或状态变更。信号或调用可能具有其值可用于转移的参数,其中包括警戒条件和操作的表达式。也可能会有无触发器的转移,这样的转移没有事件触发器。这种转移也被称为完成转移,它们在源状态完成其活动后将被隐含触发。
2.3 警戒条件
当转移的触发事件发生时,将对警戒条件进行求值。只要警戒条件不重叠,就可能会有来自同一源状态并具有同一事件触发器的多个转移。在事件发生时,只为转移进行一次警戒条件求值。该布尔表达式可能会引用对象的状态。
2.4 操作
操作是可执行的、不可分割的计算过程,这意味着,它不会被事件中断,而会一直运行到结束为止。它与活动正好相对,因为活动可能被其他事件中断。操作可以包括操作调用(调用状态机的拥有者以及其他可见对象)、创建或破坏其他对象、或者向另一个对象发送信号。在发送信号的情况下,信号名称以关键字“send”为前缀。
2.5 进入和退出操作
每当进入或退出状态时,进入和退出操作将分别允许发出同一操作。这可以通过进入和退出操作来顺利地完成,而不必明确地将操作放在每个输入或输出转移上。进入和退出操作可能没有实参或警戒条件。位于模型元素的状态机顶层的进入操作可能具有特定的参数,这些参数代表了在创建该模型元素时状态机所接收到的实参。
2.6 内部转移
内部转移使事件可以在不退出状态的情况下在状态内得到处理,从而可避免触发进入或退出操作。内部转移可能会有带参数和警戒条件的事件,它们所代表的基本上是中断处理程序。
2.7 延迟的事件
延迟的事件是其处理过程被推迟的事件,它们的处理过程要到事件不被延迟的状态被激活时才会执行。当该状态被激活时,将触发该事件,同时可能导致转移(好象该事件刚刚发生)。要实施延迟的事件,需要有事件的内部队列。如果事件已发生但被列为延迟,它就会被添加到队列中。当对象进入了不会使事件延迟的状态时,将立即从该队列中取出这些事件。
2.8 子状态
简单状态是没有子结构的状态。具有子状态(嵌套状态)的状态被称为复合
状态。子状态可能被嵌套到任意级别。嵌套的状态机最多可能有一个初始状态和一个终止状态。通过显示某些状态只能在特定环境(包含状态)中存在,子状态可以简化复杂的平面状态机。
图3:子状态。
转移的源状态是包含复合状态之外的源状态,其目标状态可能是复合状态或子状态。如果其目标状态是复合状态,嵌套的状态机就必须包括一个初始状态,在进入复合状态之后并在发出它的进入操作(如果有)之后,控制权将被传递给该初始状态。如果其目标状态是嵌套状态,那么,在发出复合状态的进入操作(如果有)并发出嵌套状态的进入操作(如果有)后,控制权将被传递给该嵌套状态。
从复合状态出发的转移可能会以复合状态或子状态作为它的源状态。在这两种情况下,控制权先离开嵌套状态(并在可能的情况下发出它的退出操作),然后离开复合状态(并在可能的情况下发出它的退出操作)。其源状态为复合状态的转移基本上会中断嵌套状态机的活动。
除非另有指定,当转移进入复合状态时,嵌套状态机的操作将从初始状态开始重新执行(除非转移直接以子状态为目标)。历史状态使状态机可以重新进入在它退出复合状态之前的最后一个活动子状态。图 4 显示了如何使用历史状态的示例。
图4:历史状态。
三、常用的建模技术
状态机最多地用于建立对象在其生命期内的行为模型。当对象具有依赖于状态的行为时,尤其需要使用状态机。可能具有状态机的对象包括:类、子系统、用例、接口(以声明实现该接口的对象必须满足的状态)和协议(以声明实现该协议的对象必须满足的状态)。并非所有对象都需要有状态机。如果对象的行为很简单,只是存储或检索数据,那么该对象的行为就与状态无关,它的状态机也没有多少用处。
要建立对象生命期的模型,需要包括三个事项:指定对象可以响应的事件、指定对这些事件作出的响应以及指定过去行为对当前行为的影响。对象生命期的建模还涉及到确定对象有意义地响应事件的顺序,即从创建对象时开始,继续到该对象被破坏时为止。
3.1 通用准则
敏捷建模( AM) ( Ambler 2002)的原则--最大化项目干系人的投资--建议你只有当模型能够提供正面价值的时候才创建模型。如果一个实体,比如一个类或组件,表示的行为的顺序和当前的状态无关,那么画一个UML状态图可能是没有什么用处的。例如一个SurfaceAddrESs类就很简单,表示了那些你将会在系统中显示和操作的数据,因此一个UML状态图就没有任何相关之处。而一个Seminar对象就非常的复杂,学生注册这样一个事件将会根据它的当前状态有不同的反应,就像你在图1中看到的。
图⒈班级注册的一个UML状态图。