UML系列文章(20)基本行为---活动图

1.入门

活动图是UML中用于对系统的动态方面建模的5种图之一。一个活动图从本质上说是一个流程图,展现从活动到活动的控制流。与传统的流程图不同是,活动图能够展示并发和控制分支。

活动图用于对系统的动态方面建模。多少情况下,它包括对计算过程中顺序的(也可能是并发的)步骤进行建模。也可以用活动图对步骤之间的值的流动进行建模。活动图可以单独用来可视化、详述、构造和文档化对象群体的动态特性,也可以用于对一个操作的控制流建模。交互图强调的是从对象到对象的控制流,而活动图强调的是从步骤到步骤的控制流。一个活动是行为的一个持续发生的结构化执行。活动的执行最终延伸为一个单独动作的执行,每个动作都可能改变系统的状态或者传送消息。

在建筑工业领域,诸如甘特图和波特图这样的技术被广泛用于可视化、详述、构造和文档化项目工程的工作流。在对软件密集系统建模时,存在着类似的问题。如何最好地模拟系统动态方面的工作流或操作?我们有两个与甘特图和波特图类似的基本选择。

一方面,可以建立脚本的故事板,其中包括某些感兴趣的对象之间的交互以及它们之间传递的消息。在UML中,有两种方法对这些故事板建模:强调消息的时间顺序(使用顺序图)或强调参加交互的对象间的结构关系(使用通信图)。这些交互图与甘特图类似,着眼于随着时间的前进而完成某些活动的对象(资源)。

另一方面,可以用活动图对这些动态方面建模,它首先关注于对象间发生的活动,如图所示,从这方面看,活动图与波特图类似。活动图本质上是流程图,它强调随着时间的前进而发生的活动。我们可以把活动图看作翻新花样的交互图。交互图观察的是传送消息的对象,而活动图观察的是对象之间传送的操作。二者在语义上的区别是细微的,但看待世界的方式却是非常不同。

2. 术语和概念

活动图显示从活动到活动的流。一个活动是一个状态机中进行的非原子的执行单元。活动的执行最终延伸为一个些独立动作的执行,每个董卓将导致系统状态的改变或消息传送。动作包括调用另一个操作,发送一个信号,创建或撤销一个对象,或者某些纯计算。在图形上,活动图是顶点和弧的集合。

    活动图是一种特殊的图,它具有与所有其他图一样的公共特征,即一个名称以及投影到一个模型上的图形内容。活动图与所有其他图不同的是它的特殊内容。

2.1 活动图的内容:

  • 动作
  • 活动结点
  • 对象值

像所有其他图一样,活动图可以包括注解和约束。

2.2 动作和活动结点

     在一个用活动图建模的控制流中,有一些事情发生。可能要计算一个设置属性值或返回某个值的表达式。也可能要调用一个对象的操作,发送一个信号给对象,甚至创建或撤销一个对象。这些可执行的原子计算被称为动作。用一个两头为圆形的盒子来表示一个动作。在这个图符内可以写一个表达式。

上面表达式在UML并不规定这些表达式所使用的语言。较抽象地,可以仅仅使用结构化的文字描述;较具体的,可以使用特点编程语言的语法和语义。

    动作不能被分解。此外,动作是原子的,也就是说事件可以发生,但动作状态的内部行为是不可见的。不能只执行动作的一部分,动作要么全部执行,要么就一点不执行。最后,动作声明的工作所占用的执行时间常常被看作是无关紧要的,但是有些动作还是会持续一段实在的时间。

    在现实世界中,每个计算都要占据一定数量的时间和空间。尤其是对于硬实时系统,对这些特性建模就更加重要。

    活动结点是活动的组织单元。通常,活动结点是内嵌的动作组,或者是其他嵌套的活动结点。此外,活动结点具有可见的子结构。一般来说,活动结点会持续一段时间来完成。可以把动作看成是活动结点的特例。动作是一个不能进一步分解的活动结点。类似的,可以把活动结点看作是一个组合,它的控制流由其他活动结点和动作组成。放大一个活动结点的细节,就会发现另一个活动图。如图,在活动结点和动作之间没有表示法的区别,只是活动结点可以有附加的部分,这些附加部分通常由编辑工具在后台维护。

2.3 控制流

    当一个动作或活动结点执行时,控制流将马上传递到下一个动作或活动结点。可以用流箭头来说明这个流,显示从一个动作或活动结点到下一个动作或活动结点的控制路径。UML用一条从前一动作指向后续动作不带事件标签的简单箭头表示一个流。

    事实上,控制流会从某个地方开始,然后在某个地方结束(除非它是一个只有开始没有结束的无穷的流) 。所以,如图所示,可以用特殊的附号说明控制流的初始(一个实心圆)和结束(一个圆圈内有一个实心圆)。

2.4 分支

    简单的、顺序的流是常见的,但并不是对控制流建模的唯一路径。它和流程图一样可以包含分支,描述基于某个布尔表达式的可选择的路径。用一个菱形来表示分支。一个分支可以有一个进入流和两个或多个离去流。在每个离去流上放置一个布尔表达式,在进入这个分支时被判断一次。在所有这些离去流中,其监护条件不应该重叠(否则,控制流会有二义性),但是它们应该覆盖所有的可能性(否则,控制流可能会冻结)。

2.5 分叉和汇合

    简单的和具有分支的顺序转移是活动图中最常见的路径。然而,可能会遇到并发流,尤其当对业务过程的工作流建模时。在UML中,用同步棒来说明这些并行控制流的分叉和汇合。一个同步棒是一条水平或垂直粗线。 

下图模拟人讲话和做手势的声音和动作同步的仿真装置内的并发控制流。

 一个汇合表示两个或更多的并发控制流的同步。一个汇合可以有两个或多个进入转移和一个离去转移。在这个汇合上面,与每一个路径相关的活动并行地执行。在汇合处,并发的流取得同步,这意味着每个流都等待着,直到所有流都到达这个汇合处,然后,在这个汇合的下面。只有一个控制流从这一点继续执行。

2.6 泳道

    在对业务过程的工程流建模时,可以将一个活动图中的活动状态分组,每一个组表示负责那些活动的业务机构。这样分组是有用的。在UML中,每个组被称为一个泳道,因为从视觉上,每组用一条垂直的实线把它与邻居分开。一个泳道说明一组共享某个机构特性的活动。

     每个泳道在图中都有一个唯一的名称。泳道可能代表现实世界的某些实体,例如公司内部的一个机构单元,除此之外它没有很深的语义。每个泳道表示一个活动图的全部活动中部分活动的高层职责,并且每个泳道最终可能由一个或多个类实施。在一个被划分为泳道的活动图中,每个活动严格地属于一个泳道,而转移可以跨越泳道。

2.7 对象流

    对象可以被包含在与一个活动图相关的控制流中。例如,在上图出来订单的工作流中,将问题空间的词汇中也将包括像Order(订单)和Bill(账单)这样的类。这两个类的实例将由一定的活动生成(例如Process order将创建一个Order对象),其他的活动可能使用或修改这些对象(例如Ship order将把Order对象的状态变为filled)。把这些对象放置在活动图中,并用箭头将它们连接到产生或使用这些对象的活动上。

对象流描述了一个对象值从一个动作流向另一个动作。对象流本质上意味着控制流(没有对象值,就无法执行一个需要该对象的动作),因而无需在对象流连接的动作之间再画出控制流。

2.8 扩展区域

    同一操作经常要在一组元素上执行。例如,若订单包含一组订单行项,那么订单处理程序就必须对每一行都执行相同的操作:检查有效性、查询价格、检查是否收税等。 

2.9 一般用法

    活动图用于对系统的动态方面建模,这些动态方面可以涉及系统体系结构的任意视图中任何类型抽象的活动,这些抽象类型包括类、接口、构件和结点。

    当使用活动图对系统的某些动态方面建模时,事实上可以在任意建模元素的语境中这样做。但通常是在整个系统、子系统、操作或类的语境中使用活动图。还可以把活动图附在用况(对脚本建模)和协作(对象群体的动态方面建模)上。

    对一个系统的动态方面建模时,通常有两种使用活动图的方式。

1)对工作流建模

    此时要关注与系统进行协作的参与者所观察到的活动。工作流常常位于软件密集系统的边缘,用于可视化、详述、构造和文档化被开发的系统所涉及的业务过程。在活动图的这种用法中,为对象流建模特别重要。

2)对操作建模

   此时,要把活动图作为流程图来使用,对一个计算的细节建模。在活动图的这种用法中,对分支、分岔和汇合状态的建模特别重要。用于这种方式的活动图语境包括该操作的参数和局部对象。

3. 常用建模技术

3.1 对工作流建模

3.2 对操作建模

 

 

 

 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值