疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

UML语言之活动图、状态机图


 

活动图
       活动图和状态机图都被称为演化图,其区别和联系如下:
      1.活动图:用于描述用例内部的活动或方法的流程,如果除去活动图中的并行活动描述以后,它就变成流程图。   
      2.状态机图:描述某一对象生命周期中需要关注的不同状态,并会详细描述刺激对象状态改变的事件,以及对象状态改变时所采取的动作。
      演化图的五要素如下:
      1.状态:状态是对象响应事件前后的不同面貌,状态是某个时间段对象所保持的稳定态,目前的软件计算都是基于稳定态的,对象的稳定态是对象的固有特征,一个对象的状态一般是有限的。有限状态的对象是容易计算的,对象的状态越多,对象的状态迁移越复杂,对象状态可以想象成对象演化过程中的快照。
      2.事件:来自对象外界的刺激,通常的形式是消息的传递,只是相对对象而言发生了事件。事件是对象状态发生改变的原动力。
      3.动作:动作是对象针对所发生事件所做的处理,实际上通常表现为某个方法被执行。
      4.活动:活动是动作激发的后续系统行为。
      5.条件:条件指事件发生所需要具备的条件。对于激发对象状态改变的事件,通常有两种类型:
      (1)内部事件:从系统内部激发的事件,一个对象的方法(动作)调用,(通过事件激活)另一个对象方法(动作)。
      (2)外部事件:从系统边界外激发的事件,例如用户的鼠标、键盘动作。
       活动图主要用于描述过程原理、业务逻辑以及工作流的技术,很多情况下,活动图与传统的流程图非常相似,区别是活动图支持并发。活动图非常类似于传统的流程图,它也使用圆角矩形表示活动,使用带箭头的实线表示事件。图2.18显示了简单的活动图。
       从图2.18中可以看出,如果将这个活动图的两支分开,每支就是一个传统的流程图,每个活动依次向下,遇到条件分支使用菱形框来表示条件。与传统的流程图不同的是,活动图可以使用并行分支分出多条并行活动。
       绘制活动图时以活动为中心,整个活动图只有一个开始活动,可以有多个结束活动,活动图需要将并行活动和串行活动分离,遇到分支和循环时最好像传统流程图将分支、循环条件明确表示。活动图最大优点在于支持并行行为,并行对于工作流建模和过程建模非常重要。因为有了并行,因此需要进行同步,同步通过汇合来指明。
状态机图
       状态机图表示某个类所处的不同状态和该类的状态转换信息。实际上我们很少绘制状态机图,我们只对“感兴趣的”类绘制状态机图。也就是说,在系统活动期间具有三个或更多潜在状态的类才需要考虑使用状态机图进行描述。
       状态机图的符号集包括5个基本元素:
       1.初始状态,它使用实心圆来绘制;
       2.状态之间的转换,它使用具有带箭头的线段来绘制;、
       3.状态,它使用圆角矩形来绘制;
       4.判断点,它使用空心圆来绘制;
       5.一个或者多个终止点,它们使用内部包含实心圆的圆来绘制。
       要绘制状态机图,首先绘制起点和一条指向该类的初始状态的转换线段。状态本身可以在图上的任意位置绘制,然后只需使用状态转换线条将它们连接起来。图2.19显示了Hibernate持久化对象的状态迁移示意。
       图2.19描绘了Hibernate持久化对象具有三个状态:瞬态、持久化和脱管,当程序通过new直接创建一个对象时,该对象处于瞬态;对一个瞬态的对象执行save,saveOrUpdate方法后该对象将会变成持久化状态;对一个持久化状态的对象执行delete方法后该对象将变成瞬态;持久化状态和脱管状态也可以相互转换.
       注意:阅读本书时无须理会Hibernate相关知识,读者只需要明白图2.19所绘制的状态机图即可。
       绘制状态机图时应该保证对象只有一个初始状态,可以有多个终结状态。状态要表示对象的关键快照,有重要的实际意义,无关紧要的状态则无须考虑,绘制状态机图时事件和方法要明确。
       状态机图擅长表现单个对象的跨用例行为,对于多个对象协作的行为应该考虑采用顺序图,不要对系统的每个对象都画状态机图,只对真正需要关心各个状态的对象才画状态机图。(摘自[疯狂JAVA讲义].李刚)