状态图主要用来描述对象,子系统,系统的生命周期。通过状态图可以了解到一个对象所能到达的所有状态以及对象收到的事件(收到消息、超时、错误、条件满足)对对象状态的影响等。所有的类,只要它有可标记的状态和复杂的行为,都应该有一个状态图。状态图指定对象的行为以及根据不同的当前状态行为之间的差别,同时,它还能说明事件是如何改变一个类的对象的状态。
1.1.1 状态和转移
所有对象均有状态,状态是对象操作的前一次活动的结果。通常情况下,状态由对象的属性值以及指向其它对象的链来决定的,类的状态由类中的指定属性来说明或对象的状态由对象中的通用属性的值来确定。下面举例说明对象的状态:
Ø 支票(对象)已付(状态)
Ø 汽车(对象)停在那儿(状态)
Ø 发动机(对象)正在运行(状态)
Ø 吉姆(对象)正在卖货(状态)
Ø 小王(对象)已婚(状态)
当某些事情发生时对象的状态发生改变,我们称改变对象状态的事情为——事件,例如,付了支票、开始启动汽车、或结婚,动态性表现在两个方面,交互和内部状态改变交互描述对象的外部行为以及对象如何与其它对象交换信息(通过发送消息或链接和断链到其它对象) 内部状态改变描述对象是如何改变其状态的,例如,对象的内部属性值状态图用来显示对象对事件的反应以及对象状态的改变,例如,当某人付了一张支票,则支票对象的状态从未付转移到已付。当支票对象被创建时,它的状态为未付如图7.1所示。
图7.1
状态图可以有一个起点和多个终点,起点(初始态)用一个黑圆点表示,终点(终态)用黑圆点外加一个圆表示(很像一只牛眼睛),状态图中的状态用一个圆角四边形表示,状态之间为状态转换,用一条带箭头的线表示。引起状态转换的事件可以用状态转换线旁边的标签来表示,当事件发生时,状态转换开始(有时也称之为转换“点火”或转换被“触发”)。