同样,状态图也是行为图中的一种,它是用来描述一个特定对象的所有可能状态以及由于各种事件的发生而引起的状态之间的转移。
相对于活动图来讲,状态图的图符就少了一些,主要有:状态、转移、起点和终点。
说到状态图就不得不说一说状态机,状态机又是什么呢?所谓的状态机是这样一种行为,它描述了一个对象或者一个交互在生命期内响应事件所经历的状态序列。单个类或者是一组类之间协作的行为可以用状态机来描述。一个状态机涉及到一些其他元素,包括状态、转换(从一个状态到另一个状态的流)和事件(触发转换的条件)。
那么状态如何定义呢?状态是指在对象的生命期中满足某些条件、执行某些活动或者等待某些事件时的一个条件或者状况。通常一个状态由以下几个部分组成:
1.名称name
2.引入协作和退出动作entry action/exit action
3.内部转换internaltransition
4.子状态substate
5.延迟事件 deferredevent
需要注意的是,初始状态和终止状态是两个特殊状态。它和普通的状态是有所不同的,可能没哟偶内部转换,引入协作等部分。
下面我们来看转换的相关概念和内容:所谓转换是两个状态之间的一种关系,表示对象将在第一个状态中执行一定的动作,并在某个特定事件发生而某个特定的条件满足时进入第二个状态。通常一个转换由5部分组成:
1源状态sourcestate
2 事件触发eventtrigger
3 监护条件 guardcondition
4 动作 action
5 目标状态 targetstate
最后对状态图和活动图进行一个小小的总结:状态图侧重于从行为的结果来描述过程,而活动图侧重于从行为的动作来描述,在实际项目中,活动图并不是必须的。在以下情况需要使用活动图:
描述一个并行的过程或者行为
描述一个算法
描述一个跨越多个用例的活动
了解了活动图的基础知识,下面我给出活动图的实例,以便让大家知道活动图应该如何画:
首先给出一个非常经典的例子,操作系统中进程状态的转换图
当然上面的这个例子并不是完整意义上的状态图,你可能会发现它没有初始状态和终止状态,下面再给出一个机房收费系统的状态图实例: