状态图——Statechart Diagram
描写叙述一个实体基于事件反应的动态行为,显示了该实体怎样依据当前所处的状态对不同的事件做出反应的。
通常我们创建一个UML状态图是为了下面的研究目的:研究类、角色、子系统、或组件的复杂行为。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="800" height="400" >
状态图用于显示状态机(它指定对象所在的状态序列)、使对象达到这些状态的事件和条件、以及达到这些状态时所发生的操作。
状态的概念
状态是对象运行某项活动或等待某个事件时的条件。对象可能会在有限的时间长度内保持某一状态。
状态的特征
名称:将一个状态与其它状态区分开来的文本字符串。状态也可能是匿名的,这表示它没有名称。
进入、退出操作:在进入和退出状态时所运行的操作。
内部转移:在不使状态发生变更的情况下进行的转移。
子状态:状态的嵌套结构,包含不相连的(依次处于活动状态的)或并行的(同一时候处于活动状态的)子状态。
延迟的事件:未在该状态中处理但被延迟处理(即列队等待由还有一个状态中的对象来处理)的一系列事件。
转移的概念
转移是两个状态之间的关系,它表示当发生指定事件而且满足指定条件时,第一个状态中的对象将运行某些操作并进入第二个状态。
当发生这样的状态变更时。即“触发”了转移。
在触发转移之前。可觉得对象处于“源”状态;在触发转移之后,可觉得对象处于“目标”状态。
转移的特征
源状态:转移所影响的状态;假设对象处于源状态,当对象收到转移的触发事件而且满足警戒条件(假设有)时。就可能会触发输出转移。
事件触发器:使转移满足触发条件的事件。
当处于源状态的对象收到该事件时(如果已满足其警戒条件),就可能会触发转移。
警戒状态:一种布尔表达式。
在接收到事件触发器而触发转移时,将对该表达式求值;假设该表达式求值结果为True,则说明转移符合触发条件。假设该表达式求值结果为False。则不触发转移。
假设没有其它转移能够由同一事件来触发。该事件就将被丢弃。
操作:可运行的、不可切割的计算过程,该计算可能直接作用于拥有状态机的对象,也可能间接作用于该对象可见的其它对象。
目标状态:在完毕转移后被激活的状态。
注意:一个转移可能有多个源状态,在这样的情况下。它将呈现为一个从多个并行状态出发的结合点;一个转移也可能有多个目标状态,在这样的情况下,它将呈现为一个到多个并发状态的叉形图。