活动图可用于描述如何编排活动以提供不同抽象级别的服务。活动图的最大优点是它们支持和鼓励并行行为。这使得它们成为工作流建模以及原则上多线程编程的重要工具。活动图还可以通过使用对象名称标记活动或使用游泳标签来定义与对象的关联,这允许根据职责构建活动图。

活动图类似于业务工作流程图或只是具有更丰富语义的流程图。它描述了系统活动或执行活动的人,以及这些活动的顺序流程。活动图是与面向对象方法相关的 UML 图之一,通过它可以用于任何其他软件开发范式。

在统一建模语言 (UML) 中,活动图是一组已执行的过程系统活动的图形表示,并被视为状态图的变体。活动图详细描述了并行和有条件的活动、用例和系统功能。活动图通过关注动作序列和相应的动作启动条件来模拟大型活动的顺序工作流。活动的状态与每个工作流步骤的性能有关。

例如,活动图通常用于说明用例,我们将使用几个示例向您展示如何使用活动图对用例中的流程进行建模。

活动图中使用的元素

活动——活动用圆角矩形表示,活动之间的控制流用实线箭头表示。一个活动代表一个过程中的一个动作。一个活动可以大也可以小,一个活动可以继续拆分成更小的活动。活动的粒度由图表的含义决定,无论它是打算表示一个广泛的过程还是一个特定的过程。

起点和终点——一个活动图只能有一个起点,但它可以有多个终点。

分支决策——菱形代表分支决策,与流程图的分支决策相同。上面的分支判断意思是:醒来,看看是不是该上班了,如果不是,就回去睡觉;如果是的话,起来洗漱。

 

Fork and Join – fork 和 merge 必须结合使用来指示并发操作。一个分叉意味着一个活动完成,导致多个后续并行活动;汇合意味着多个活动在下一个活动之前完成。分叉是指向多个点,收敛是指向合并在一起的多个点。fork和sink之间的activity是并行执行的,全部执行完后统一合并到下一个activity中。

目的

对象用矩形框表示,对象的名称是名词。活动可以有多个输入和输出,对象可以是成为活动的输入。在 UML 中,动作状态和对象之间的对象流转换显示为虚线箭头。使用对象作为输入的动作状态显示为从对象指向动作状态的对象流转换箭头。更新或生成对象作为输出的动作状态显示为从动作状态指向对象的对象流转换箭头。

由动作产生或使用的对象。这使我们能够对对象流进行建模。

 

活动图控制流示例

泳道

泳道活动图将活动分组到泳道列中,其中包含与该泳道表示的类别匹配的所有活动。泳道可以代表许多类别的信息,例如执行活动的参与者(即角色或部门)、活动发生的过程阶段或文档创建者认为应该强调的任何其他信息,以及通过泳道图进行沟通。使用术语泳道是因为图表的水平行与游泳池中的泳道在视觉上相似。

活动图泳道示例

 

用例 1 – 早上

每天醒来,先看看是不是该起床,如果没有,你就回去睡觉;如果是,你尽快起床,洗漱吃早饭,晚饭后出去。

在下图中,显示了每个早晨的活动图。活动图允许更清晰地表示动作的流程,并很好地表示动作的过程、决策、交互和并发性。

 

用例 2 – 产品生命周期流程

在产品项目立项前,首先进行市场分析,进行产品定位和可行性分析。

项目立项后进行需求分析,通过需求分析准备业务需求文档、市场需求文档和产品需求文档。然后根据要求进行样机制图和产品设计及工艺分析。完成这些任务后,进入开发阶段:架构设计、大纲设计、详细设计、代码开发和软件测试。

上述活动被组织成如下图所示的活动图。

 

上图显示了产品开发过程的整个生命周期。在制造产品之前,需要对产品进行定位,指明方向,然后进行可行性研究(技术可行性、经济可行性和社会可行性),三种可能性并行执行。

项目批准后,分析产品需求,作为需求阶段的结果,生成三个文档

  • 业务需求文件 (BRD)
  • 市场需求文件 (MRD)
  • 产品需求文件 (PRD)

在上图中,这三个文档用矩形框表示,代表对象,即需求分析产生的三个文档对象。

这些对象可以作为下一个活动的输入,也可以作为活动的输出,输入和输出对象可以是一个或多个。之后,它会经历原型设计、技术设计、开发、测试和最终产品发布。

用例 3 – 下订单

客户在在线购物网站上购买并下订单。付款后生成交货单,供应商发货。交货后,订单结束。

这种情况涉及客户、系统和供应商之间的交互。客户的活动包括下订单和选择付款;系统生成交货单并收取货款;供应商的活动包括交货和订单修改行动。如果使用以前的活动图形式,很难表达客户、供应商和系统之间的活动。如果要更好地表达角色和活动之间的关系,则需要添加角色,这里称为泳道。

如上所示的业务图如下。

上图中客户、系统和供应商所属的大矩形是每个对象的泳道。车道中的活动代表对象所属的动作。通过跨泳道的信息交互,可以更好地表达对象之间的关系。信息与活动的互动。泳道的名称应该是物体的名称。既然是对象名,泳道名就应该是名词。