UML 状态机图
文章来源:http://tool.uml.com.cn/ToolsEA/state-diagram.asp
状态机图
状态机图对单个对象的行为进行建模,指定对象在其生命周期内为响应事件而经历的事件序列。
活动图示例如下所示。
门可以处于以下三种状态之一:“打开”、“关闭”或“锁定”。 它可以响应打开、关闭、锁定和解锁事件。 请注意,并非所有事件在所有状态下都有效; 例如,如果一扇门是打开的,在您关闭它之前您无法锁定它。 另请注意,状态转换可以附加一个保护条件:如果门打开,则只有在满足 doorWay->isEmpty 条件时才能响应关闭事件。 以下部分将全面讨论状态机图中使用的语法和约定。。
状态
一个状态由一个圆角矩形表示,其中写有状态的名称。
起点和终点
起点由实心黑色圆圈表示,并且可以标有名称。 终点由内部带有点的圆圈表示,也可以用名称标记。
过渡
从一种状态到下一种状态的转换用带箭头的线表示。转换可能有触发器、守卫和效果,如下所示。
“触发器”是转换的原因,可能是信号、事件、某些条件的变化或时间的流逝。“Guard”是一个条件,它必须为真才能使触发器引起转换。“效果”是一个动作,它将作为转换的结果直接在拥有状态机的对象上调用。
状态动作
在上面的过渡示例中,效果与过渡相关联。如果目标状态有许多到达它的转换,并且每个转换都有与之关联的相同效果,那么最好将效果与目标状态相关联而不是转换。这可以通过为状态定义一个进入动作来完成。下图显示了具有进入操作和退出操作的状态。
也可以定义在事件上发生的动作,或总是发生的动作。 可以定义任意数量的每种类型的动作。
自身转换
状态可以有一个返回自身的转换,如下图所示。 当效果与过渡相关联时,这是最有用的。
复合状态
状态机图可以包括子机图,如下例所示。
显示相同信息的另一种方法如下。
以上版本中的符号表示Check PIN子机的详细信息以单独的图表显示。
入口点
有时您不想在正常初始状态下进入子机。 例如,在下面的子机中,通常以“Initializing”状态开始,但如果由于某种原因不需要执行初始化,则可以通过以下方式以“Ready”状态开始过渡到指定的入口点。
下图显示了上一级的状态机。
出口点
以与入口点类似的方式,可以命名替代出口点。 下图给出了一个示例,其中在主处理状态之后执行的状态取决于用于转换出状态的路由。
选择伪状态
选择伪状态显示为一个菱形,其中一个转换到达,两个或多个转换离开。 下图显示,在选择伪状态之后到达的任何状态都取决于在执行前一个状态期间选择的消息格式。
结伪状态
结点伪状态用于将多个转换链接在一起。 单个结点可以有一个或多个传入和一个或多个传出转换; 可以将保护应用于每个转换。 连接点是无语义的。 将传入转换拆分为多个传出转换的结实现静态条件分支,而不是实现动态条件分支的选择伪状态。
终止伪状态
进入终止伪状态表明状态机的生命线已经结束。 终止伪状态用叉号表示。
历史状态
历史状态用于记住状态机被中断时的先前状态。下图说明了历史状态的使用。该示例是属于洗衣机的状态机。
在这种状态机中,当洗衣机运行时,它会从“Washing”经过“Rinsing”再到“Spinning”。如果停电,洗衣机将停止运行并进入“关机”状态。然后当电源恢复时,在“历史状态”符号处进入运行状态,这意味着它应该从上次停止的地方恢复。
并发区域
一个状态可以被划分为包含多个同时存在和执行的子状态的区域。下面的例子表明,在“Applying Brakes”状态下,前后制动器将同时独立运行。注意 fork 和 join 伪状态的使用,而不是选择和合并伪状态。这些符号用于同步并发线程。