1.1跟我学UML建模工具StarUML(第12部分)——应用StarUML创建状态图的创建示例
1.1.1UML状态图及相关技术
1、状态机图和状态机图中的状态
(1)状态机图
UML状态图(也称UML状态机图)是展示对象状态与状态转换的视图,在UML中,状态机图用于对具有事件驱动的特性的动态行为的建模。
(2)状态机图中的状态
状态是状态机图的重要组成部分,所有对象都具有状态,状态是对象执行了一系列活动的结果。
当某个事件发生后,对象的状态将发生变化。
2、状态图(State Diagram)
(1)什么是状态图
用来描述一个特定对象的所有可能状态及其引起状态转移的事件,从而可以实现对单个的对象行为建模。
(2)状态图的主要作用
大多数面向对象技术都用状态图表示单个对象在其生命周期中的行为,同时也显示了该实体如何根据当前所处的状态对不同的时间做出反应的。
3、什么场合中应该要采用状态图
当功能行为的改变和状态有关时才需要创建出UML状态图,因为通过状态图可以显示对象在其生命周期中依次经历的各种状态。
但如果要表示由系统内部生成的功能操作(而非外部事件)驱动的事件流时,则一般使用UML活动图。
如下给出一个Account对象的状态图示例:
4、为什么要使用UML状态图
(1)动态特性是由事情所触发的
一个完全静态的系统是无任何应用价值的,因为没有事件发生也就不可能产生出具体的功能。
所有真正的软件应用系统自身都含有某些动态的特性,并且这些动态的特性是由内部或外部发生的事件所触发。
比如,在一个ATM机上,动作是由一个用户按下相关的功能按钮引发而开始一个事件;在一个自动机器人中,动作是由机器人碰上一个对象而引发的;在一个网络路由器中,动作是由检测消息缓冲区是否溢出而引发的。
如下图为一个图书销售业务的状态图示例:
(2)为单个的对象和共同工作的对象建模
使用UML交互图可以对共同工作的对象群体的行为进行建模,而使用状态图,则可以
对单个的对象行为进行建模。
因为状态图能够说明对象在它的生命期中响应事件所经历的状态序列以及它们对那些事件的响应。
(3)可以了解类的动态行为
软件系统的分析人员和开发人员通过状态图能够更好地了解系统中类的动态行为,有助于理解系统中的复杂业务逻辑。
因此,在软件系统的分析设计中创建出一个UML状态图是为了达到以下的研究目的:
1)研究类、角色、子系统、或组件的复杂行为。
2)建模实时软件应用系统。
5、UML状态图中定义的状态类型
在UML状态图中定义的状态主要有:初态、终态、中间状态、复合状态等类型。
(1)初态
是状态图的起始点,一般都把初始状态放置在状态图的左上角。
在UML状态图中的初始状态被建模成一个实心圈()。
如下示图为在StarUML工具软件中所提供的初态工具按钮的图示例:
(2)终态
是UML状态图中的终点状态(结束的状态),一般都把最终状态放置在状态图的右下
角。
在UML状态图中的最终状态被建模为一个带边界的实心圆();一个UML状态图只能有一个初态,而终态则可以有多个。
如下示图为在StarUML工具软件中所提供的终态工具按钮的图示例:
(3)中间状态
初态和终态之外的状态称为中间状态,采用圆角矩形表示()。
如下示图为在StarUML工具软件中所提供的中间状态(简单状态Simple State)工具按钮的图示例:
(4)复合(嵌套)状态
一个状态可以进一步地细化为多个子状态,我们将可以进一步细化的状态称作复合状态。
子状态之间有“或关系”和“与关系”两种关系。
如下为一个复合(嵌套)状态的图示例:
如下示图为在StarUML工具软件中所提供的复合(嵌套)状态(Composite State)工具按钮的图示例:
1)或关系(如下图所示)说明在某一时刻仅可到达一个子状态
例如一个处于行驶状态的汽车,在“行驶”这个复合状态中有向前和向后两个不同的子状态,在某一时刻汽车要么向前,要么向后(倒车)。
2)与关系说明复合状态中在某一时刻可同时到达多个子状态(称为并发子状态)。
具
有并发子状态的状态图称为并发状态图。
6、转移(或者转换)
(1)转换
转换是状态间的关联,它们用于对一个实体的不同状态间的关系建模。
在UML状态图中采用带箭头的连线来表示(),状态的变迁通常是由事件触发而产生的,此时应在转移上标出触发转移的事件表达式。
如果转移上未标明事件,则表示在源状态的内部活动执行完毕后自动触发转移。
如下示图为在StarUML工具软件中所提供的状态转换(Transition)工具按钮的图示例:
(2)转换的组成
在UML状态图中的转换由四个部分组成,它们分别是:
1)源状态(Source State)
2)目标状态(Target State)
3)触发事件(Trigger Event)
4)监护条件(Guard Condition)
7、状态图的建模过程——创建UML状态图的一般步骤如下
(1)识别一个要对其生命周期进行描述的参与行为的类。
(2)对状态建模,即确定对象可能存在的各种状态。
(3)对事件建模,即确定对象可能存在的事件和相应被执行的动作。
(4)对建模结果进行精化和细化。
1.1.2在StarUML工具软件中创建UML状态图的建模示例
1、在StarUML工具软件中与状态图相关的工具按钮
(1)一般的工具按钮
(2)高级工具按钮
(3)注释说明相关的工具按钮
2、在StarUML工具软件中新建一个名称为“BBS前台注册用户的状态图”(1)添加一个状态图
(2)在左边的Toolbox面板中将自动地出现与状态图相关的各个工具按钮
(3)命名该状态图为“BBS前台注册用户的状态图”
3、在状态图中添加各个状态及其转换
(1)游客用户通过系统注册而成为注册用户
此时的游客用户的状态将从“游客用户”的初始状态转换为“注册用户”状态。
(2)应用转换连接“初始状态”和“注册用户”状态
4、再添加其它的状态和转换方式
(1)“注册用户”通过“系统登录”转换为“会员用户”
(2)会员用户通过“回帖”而成为“回帖用户”
(3)会员用户通过“发帖”而成为“发帖用户”
(4)会员用户通过“申请版主”而成为“版主用户”
5、最后再给出结束状态
6、最终的结果示图。