【UML用户指南】-21-对基本行为建模-活动图

目录

1、概念

2、组成结构

2.1、动作

2.2、活动节点

2.3、控制流

2.4、分支

2.5、分岔和汇合

2.6、泳道

2.7、对象流

2.8、扩展区域

3、一般用法

3.1、对工作流建模

3.2、对操作建模


一个活动图从本质上说是一个流程图,展现从活动到活动的控制流

活动图能够展示并发和控制分支。

活动图用于对系统的动态方面建模。

包括对计算过程中顺序的(也可能是并发的)步骤进行建模。

也可以用活动图对步骤之间的值的流动进行建模。

活动图可以单独用来可视化、详述、构造和文档化对象群体的动态特性,也可以用于对一个操作的控制流建模。

交互图强调的是从对象到对象的控制流,而活动图强调的是从步骤到步骤的控制流。

一个活动是行为的一个持续发生的结构化执行。

活动的执行最终延伸为一些单独动作的执行,每个动作都可能改变系统的状态或者传送消息。

甘特图(Gantt chart)和波特图(Pert chart)

一方面,可以建立脚本的故事板,其中包括某些感兴趣的对象之间的交互以及它们之间传递的消息。在UML中,有两种方法对这些故事板建模:强调消息的时间顺序(使用顺序图)或强调参加交互的对象间的结构关系(使用通信图)

另一方面,可以用活动图对这些动态方面建模,它首先关注于对象间发生的活动,如图所示。从这方面看,活动图与波特图类似。活动图本质上是流程图,它强调随着时间的前进而发生的活动。你可以把活动图看作翻新花样的交互图。

交互图观察的是传送消息的对象,而活动图观察的是对象之间传送操作

1、概念

活动图(activity diagram)显示从活动到活动的流。

一个活动(activity)是一个状态机中进行的非原子的执行单元。活动的执行最终延伸为一些独立动作 (action)的执行,每个动作将导致系统状态的改变或消息传送。动作包括调用另一个操作,发送一个信号,创建或撤销一个对象,或者某些纯计算(例如对一个表达式求值)。

在图形上,活动图是顶点和弧的集合。

2、组成结构

动作、活动结点、流、对象值,以及注解和约束

2.1、动作

在一个用活动图建模的控制流中,

1)可能要计算一个设置属性值或返回某个值的表达式。

2)也可能要调用一个对象的操作,发送一个信号给对象,

3)甚至创建或撤销一个对象。

这些可执行的原子计算被称为动作

如下图所示,用一个两头为圆形的盒子来表示一个动作。在这个图符内部可以写一个表达式。

动作原子性、内部行为可不见、不可拆分、持续性

2.2、活动节点

活动结点 (activity node)是活动的组织单元。

通常,活动结点是内嵌的动作组,或者是其他嵌套的活动结点。

此外,活动结点具有可见的子结构。一般来说,活动结点会持续一段时间来完成。

把动作看成是活动结点的特例。动作是一个不能被进一步分解的活动结点。

类似地,可以把活动结点看作一个组合,它的控制流由其他的活动结点和动作组成。放大一个活动结点的细节,就会发现另一个活动图。

如图所示,在活动结点和动作之间没有表示法上的差别,只是活动结点可以有附加的部分,这些附加部分通常由编辑工具在后台维护。

2.3、控制流

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

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

2.4、分支

用一个菱形来表示分支

一个分支可以有一个进入流和两个或多个离去流。在每个离去流上放置一个布尔表达式,在进入这个分支时被判断一次。

在所有这些离去流中,其监护条件不应该重叠(否则,控制流会有二义性),但是它们应该覆盖所有的可能性(否则,控制流可能会冻结)。

使用关键字else来标记一个离去转移,它表示如果其他的监护表达式都不为真时所执行的路径。

当两个控制路径重新合并时,也可以用带有两个输入箭头和一个输出箭头的菱形符号来表示。对于合并来说,无需监护条件。

为了获得迭代的效应,可以用一个动作设置迭代器的值,用另一个动作增加该迭代器的值,并用一个分支来判断该迭代是否结束。虽然UML提供了用于循环的结点类型,但是通常用文字比用图能更容易地表达这些。
 

2.5、分岔和汇合

在UML中,用同步棒来说明这些并行控制流的分岔和汇合。

一个同步棒是一条水平或垂直粗线。

并发控制流经常存在于独立的主动对象的语境中,而主动对象通常被建模为一个进程或线程。

分叉和汇合 常用于主动类、主动对象的进程、线程中。

        分岔表示把一个单独的控制流分成两个或更多的并发控制流。一个分岔可以有一个进入转移和两个或更多的离去转移,每一个离去转移表示一个独立的控制流。在这个分岔之下,与每一个路径相关的活动将并行地继续。从概念上说,这些流中的每一个流的活动都是真实地并行的,尽管在一个运行系统中,这些流既可以是真实并发的(当系统被部署在多个结点上的情况下),也可以是顺序但交替的(在系统只部署在一个结点上的情况下),因此只给出真实并发的图示。

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

 汇合和分岔应该是平衡的,即离开一个分岔的流的数目应该和进入与它对应的汇合的流的数目相匹配。

2.6、泳道

将一个活动图中的活动状态分组,每一组表示负责那些活动的业务机构。每个组被称为一个泳道,因为从视觉上,每组用一条垂直的实线把它与邻居分开

一个泳道说明一组共享某个机构特性的活动,每个泳道在图中都有一个唯一的名称。泳道可能代表现实世界的某些实体。

每个泳道表示一个活动图的全部活动中部分活动的高层职责,并且每个泳道最终可能由一个或多个类实施。在一个被划分为泳道的活动图中,每个活动严格地属于一个泳道,而转移可以跨越泳道。

2.7、对象流

对象可以被包含在与一个活动图相关的控制流中。把这些对象放置在活动图中,并用箭头将它们连接到产生或使用这些对象的活动上。

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

上图中Process order将创建一个Order对象,Ship order将把Order对象的状态变为filled。

显示对象状态是如何改变,通过在对象名下面的方括号中命名它的状态来表示对象的状态。

2.8、扩展区域

扩展区域表示在元素列表或集合上执行的活动模型片断。在活动图中,围绕着一个区域画一条虚线来表示扩展区域。

区域的输入和输出都是值的集合

上图在图的主体中,接收了一个订单。这样就产生了一个类型为Order的值,该值包含了一个类型为LineItem的数组。Order值是向扩展区域的输入。扩展区域的每次执行都作用于 Order 集合中的一个元素。

在区域内部输入值的类型对应于Order 数组的一个元素,即LineItem。

扩展区域活动分岔到两个动作:一个动作找到 Product(产品)并将它加到送货队列;另一个动作计算货物的价格。没有必要按顺序处理 LineItems,扩展区域的不同执行可以并发进行。当扩展区域中所有的执行都结束时,货物被放入 Shipment(Products 的集合),价格也被放入 Bill(Money值的集合)。值Shipment是动作ShipOrder 的输入,而值Bill 是动作SendBill的输入。

3、一般用法

3.1、对工作流建模

建立过程:

        为工作流建立一个焦点。除非很小的系统,否则不可能在一张图中显示所有感兴趣的工作流。

        选择对总体工作流中的各个部分具有高层职责的业务对象。这些业务对象可以是系统词汇中的真实事物,也可能较为抽象。无论哪种情况,为每个重要的业务对象或组织建立一个泳道。

        识别该工作流初始状态的前置条件和该工作流终止状态的后置条件。这对于帮助对工作流的边界建模是重要的。

        从该工作流的初始状态开始,说明随着时间发生的动作,并在活动图中表示它们。
将复杂的动作或多次出现的动作集分解到一个单独活动图中来调用。

        找出连接这些动作和活动结点的流。首先从工作流的顺序流开始,然后考虑分支,接着再考虑分岔和汇合。

        如果工作流中涉及重要的对象,则把它们也加入到活动图中。如果对表达对象流的意图是必要的,则显示其变化的值和状态。

上图显示了一个零售业务的活动图,它所说明的是当一个顾客从邮件订单中返回一个项目时的工作流。工作从顾客对象Customer的动作Request return开始,然后通过Telesales(Get return number),回到 Customer(Ship item),然后到仓库对象Warehouse(先到Receive item,后到Restock item),最后,以会计对象Accounting的Credit account结束。如图20-10所示,一个重要对象(Item的一个实例)也在过程中流动,并且从returned状态变化到available状态。

3.2、对操作建模

建立过程:

        收集这个操作所涉及的抽象。包括操作的参数(及其返回类型,如果有)、所属类的属性以及某些邻近的类。

        识别该操作的初始状态的前置条件和终止状态的后置条件,也要识别操作所属的类在操作执行期间必须保持的不变式。

        从该操作的初始状态开始,说明随着时间发生的活动和动作,并在活动图中将它们表示为活动状态或者动作状态。

        如果需要,使用分支来说明条件路径和迭代。 

        仅当这个操作属于一个主动类时,才在必要时用分岔和汇合来说明并行的控制流。

上图显示了一个在类Line的语境中描述操作intersection的算法的活动图,它的特征标记包含一个参数(line,属于类Line)和一个返回值(属于类Point)。类Line有两个关注的属性:slope(线段斜率)和delta(线段相对原点的偏移量)。

这个操作的算法很简单,如下面的活动图所示。首先,检测当前线段的斜率slope是否和参数line的slope相同。如果相同,线段不交叉,并返回一点Point(0,0)。否则,操作首先计算交叉点的x值,然后计算y值,x和y都是操作的局部对象。最后,返回一个点Point(x,y)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/737013.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

虚拟现实环境下的远程教育和智能评估系统(十三)

管理/教师端前端工作汇总education-admin: 首先是登录注册页面的展示 管理员 首页 管理员登录后的首页如下图所示 管理员拥有所有的权限 课程管理 1、可以查看、修改、增添、删除课程列表内容 2、可以对课程资源进行操作 3、可以对课程的类别信息进行管理&…

C++基础知识——引用

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 博主主页:Yan. yan.                        …

如何用 STM32CubeMX 创建项目并导入 Keil5

一、初始化STM32CubeMX 首先,你需要下载并安装STM32CubeMX软件。这是一个由STMicroelectronics提供的图形化软件配置工具,用于生成初始化代码。 初始化软件后,你将在“File”菜单中选择“New Project”。此时,STM32CubeMX会提示…

AI 大模型企业应用实战(11)-langchain 的Document Loader机制

loader机制让大模型具备实时学习的能力: 0 Loader机制 案例环境准备: import osos.environ["OPENAI_API_KEY"] "sk-javaedge" os.environ["OPENAI_PROXY"] "https://api.chatanywhere.tech"import os from …

项目训练营第二天

项目训练营第二天 用户登录逻辑 1、账户名不少于4位 2、密码不少于8位 3、数据库表中能够查询到账户、密码 4、密码查询时用同样加密脱敏处理手段处理后再和数据库中取出字段进行对比,如果账户名未查询到,直接返回null 5、后端设置相应的脱敏后用户的s…

【IVIF】Equivariant Multi-Modality Image Fusion

2024CVPR Zixiang Zhao团队 分析透彻,方法耳目一新 统一融合架构 1、Motivation Our approach is rooted in the prior knowledge that natural imaging responses are equivariant to certain transformations 我们的方法根植于自然成像响应对于某些变换的等变性…

Go WebSocket入门+千万级别弹幕系统架构设计

Go实现WebSocket(千万级别弹幕系统架构设计) 1 websocket简介(基于HTTP协议的长连接) 使用WebSocket可以轻松的维持服务器端长连接,其次WebSocket是架构在HTTP协议之上的,并且也可以使用HTTPS方式,因此WebSocket是可靠…

C# 类中访问修饰符的优先级

参考链接 : C# 指南 - .NET 托管语言 | Microsoft Learn 访问修饰符 - C# | Microsoft Learn

OpenGL3.3_C++_Windows(17)

Demo演示 demo演示 绘制不同的图元(点,线…): 理解 glDrawArrays 和 glDrawElements的区别 glDrawArrays :渲染的图元模式mode(可以参考),起始位置,顶点数量glDrawElem…

Kafka中的数据本身就是倾斜的,使用FlinkSQL该如何处理

又是经历了一段不太平的变动,最近算是稳定了点,工作内容又从后端开发转换成了sql boy,又要开始搞大数据这一套了。不同的是之前写实时任务的时候都是用的java代码,新环境却更加偏向与使用flink sql 解决,所以记录下使用…

redis持久化操作【随记】

持久化 Redis它是将数据保存到内存当中,内存里的数据最大特点: 断电易失.保存在内存的数据就没有了.如果如果这些数据还有用,业务使用啥的,不能就让它这么没有了. redis当中提供持久化机制, 说白了,将内存的数据 —-> 写入到磁盘. –> 持久化. 1 rdb方式 redis database,…

1.4 Kettle 数据同步工具详细教程

工具介绍 一、概述 Kettle,又名 Pentaho Data Integration(PDI),是一个开源的数据集成工具,最初由 Pentaho 公司开发。它能够从多种数据源提取、转换并加载(ETL)数据,适用于数据仓…

STM32CubeMX 创建 MDK 工程

STM32CubeMX 创建 MDK 工程 MDK (Keil uVision) MDK (Keil uVision) 是 Arm 公司开发的一款集成开发环境 (IDE),专门用于 Arm 架构的嵌入式系统开发。它提供了全面的功能,包括: 代码编辑器,支持语法高亮、代码补全和错误检测调试…

【YOLO 系列】基于YOLO V8的车载摄像头交通信号灯检测识别系统【python源码+Pyqt5界面+数据集+训练代码】

前言 随着智能交通系统的发展,交通信号灯的准确识别对于提高道路安全和交通效率具有至关重要的作用。传统的交通信号灯识别方法依赖于固定的传感器和摄像头,存在安装成本高、维护困难等问题。为了解决这些问题,我们启动了这个项目&#xff0…

微软搁置水下数据中心项目——项目纳蒂克相比陆地服务器故障更少

“我的团队努力了,并且成功了,”COI负责人诺埃尔沃尔什说。 微软已悄然终止了始于2013年的水下数据中心(UDC)项目“纳蒂克”。该公司向DatacenterDynamics确认了这一消息,微软云运营与创新部门负责人诺埃尔沃尔什表示…

八大排序之希尔排序

一、概念及其介绍 希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。 希尔排序又称缩小增量排序,因 DL.Shell 于 1959 年提出而得名。 它通过比较相距一定间隔的元素来进行,各趟比较所用的距离随着算法的进行而减小…

2024最新最全的车载测试教程__各模块测试用例

二、设计用例方法 1.测试用例设计前: a.仔细认真研读prd、理解prd b.质疑prd、有困惑或者想法的点做好记录,可以一次性和产品沟通 2.设计中: 成282 a.根据结构化思维,设计xmind i全链路正向功能点、子链路功能点 ⅱ.考虑业…

注意 llamaIndex 中 Chroma 的坑!

llamaIndex 做索引是默认存在内存中,由于索引需要通过网络调用 API,而且索引是比较耗时的操作,为了避免每次都进行索引,使用向量数据库进行 Embedding 存储以提高效率。首先将 Document 解析成 Node,索引时调用 Embedd…

指令调度基本概念

概述 为了提高处理器执行指令的并行度,处理器将计算机指令处理过程拆分为多个阶段,并通过多个硬件处理单元,将不同指令处理的前后阶段重叠并行执行,形成流水线(pipeline) 处理器的流水线结构是处理器微架构最基本的要素&#xf…

714. 买卖股票的最佳时机含手续费

714. 买卖股票的最佳时机含手续费 原题链接:完成情况:解题思路:ExplanationSummary 参考代码:_714买卖股票的最佳时机含手续费 错误经验吸取 原题链接: 714. 买卖股票的最佳时机含手续费 https://leetcode.cn/probl…