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

news2025/1/11 20:50:04

目录

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)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图像编辑技术的新篇章:基于扩散模型的综述

在人工智能的浪潮中,图像编辑技术正经历着前所未有的变革。随着数字媒体、广告、娱乐和科学研究等领域对高质量图像编辑需求的不断增长,传统的图像编辑方法已逐渐无法满足日益复杂的视觉内容创作需求。尤其是在AI生成内容(AIGC)的…

【论文复现|智能算法改进】一种基于多策略改进的鲸鱼算法

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 SCI二区|鲸鱼优化算法(WOA)原理及实现【附完整Matlab代码】 2.改进点 混沌反向学习策略 将混沌映射和反向学习策略结合,形成混沌反向学习方法,通过该方 法…

三十八篇:架构大师之路:探索软件设计的无限可能

架构大师之路:探索软件设计的无限可能 1. 引言:架构的艺术与科学 在软件工程的广阔天地中,系统架构不仅是设计的骨架,更是灵魂所在。它如同建筑师手中的蓝图,决定了系统的结构、性能、可维护性以及未来的扩展性。本节…

LSSS算法实现,基于eigen和pbc密码库【一文搞懂LSSS,原理+代码】

文章目录 一. LSSS简介1.1 概述1.2 线性秘密分享方案(LSSS)与 Shamir的秘密分享方案对比LSSS1.2.1 Shamir的秘密分享方案1.2.2 线性秘密分享方案(LSSS)1.2.3 主要区别 二. 基于矩阵的LSSS加解密原理分析2.1 LSSS矩阵构造2.1.1 定义…

【python】python基于微博互动数据的用户类型预测(随机森林与支持向量机的比较分析)(源码+数据集+课程论文)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

群体优化算法---电磁共振优化算法(EROA)介绍包含示例滤波器设计

介绍 电磁共振优化算法(Electromagnetic Resonance Optimization Algorithm, EROA)是一种新型的元启发式优化算法,其灵感来源于电磁共振现象。电磁共振是一种物理现象,当一个系统在特定频率下响应最大时,这个频率被称…

【算法】优先级队列-基础与应用

优先级队列(Priority Queue)是一种特殊的队列类型,它允许在其元素中分配优先级。与传统的先进先出(FIFO)队列不同,优先级队列中元素的出队顺序取决于它们的优先级。优先级较高的元素会被优先处理&#xff0…

LLaMA:挑战大模型Scaling Law的性能突破

实际问题 在大模型的研发中,通常会有下面一些需求: 计划训练一个10B的模型,想知道至少需要多大的数据?收集到了1T的数据,想知道能训练一个多大的模型?老板准备1个月后开发布会,给的资源是100张A100,应该用多少数据训多大的模型效果最好?老板对现在10B的模型不满意,想…

完美解决找不到steam_api64.dll无法执行代码问题

游戏缺失steam_api64.dll通常意味着该游戏依赖于Steam平台的一些功能或服务,而这个DLL文件是Steam客户端的一部分,用于游戏与Steam平台之间的交互。如果游戏中缺失这个文件,可能会出现无法启动、崩溃或其他问题。 一,详细了解stea…

数据结构8---查找

一、静态查找和动态查找 (一)静态查找 静态查找:数据集合稳定,不需要添加,删除元素的查找操作。 对于静态查找来说,我们不妨可以用线性表结构组织数据,这样可以使用顺序查找算法,如果我们再对关键字进行…

XSS跨站攻击漏洞

XSS跨站攻击漏洞 一 概述 1 XSS概述 xss全称为:Cross Site Scripting,指跨站攻击脚本,XSS漏洞发生在前端,攻击的是浏览器的解析引擎,XSS就是让攻击者的JavaScript代码在受害者的浏览器上执行。 XSS攻击者的目的就是…

【从0实现React18】 (三) 初探reconciler 带你初步探寻React的核心逻辑

Reconciler 使React核心逻辑所在的模块,中文名叫协调器,协调(reconciler)就是diff算法的意思 reconciler有什么用? 在前端框架出现之前,通常会使用 jQuery 这样的库来开发页面。jQuery 是一个过程驱动的库,开发者需要…

SLAM Paper Reading和代码解析

最近对VINS、LIO-SAM等重新进行了Paper Reading和代码解析。这两篇paper和代码大约在三年前就读过,如今重新读起来,仍觉得十分经典,对SLAM算法研发具有十分重要的借鉴和指导意义。重新来读,对其中的一些关键计算过程也获得了更新清…

java的输出流File OutputStream

一、字节输出流FileOutput Stream 1、定义 使用OutputStream类的FileOutput Stream子类向文本文件写入的数据。 2.常用构造方法 3.创建文件输出流对象的常用方式 二、输出流FileOutputStream类的应用示例 1.示例 2、实现步骤 今天的总结就到此结束啦,拜拜&#x…

JVM专题七:JVM垃圾回收机制

JVM专题六:JVM的内存模型中,我们介绍了JVM内存主要分哪些区域,这些区域分别是干什么的,同时也举了个例子,在运行过程种各个区域数据是怎样流转的。细心的小伙伴可能发现一个问题,在介绍完方法弹栈以后就没有…

SQL找出所有员工当前薪水salary情况

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 有一个薪水表…

13.爬虫---PyMongo安装与使用

13.PyMongo安装与使用 1.安装 PyMongo2.使用PyMongo2.1连接数据库和集合2.2增加数据2.3修改数据2.4查询数据2.5删除数据 3.总结 MongoDB 安装可以看这篇文章MongoDB安装配置教程(详细版) 1.安装 PyMongo PyMongo 是Python中用于连接MongoDB数据库的库&a…

win32API(CONSOLE 相关接口详解)

前言: Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外,它同时也是⼀个很⼤的服务中⼼,调⽤这个服务中⼼的各种服务(每⼀种服务就是⼀个函数),可以帮应⽤程式达到开启视窗、描绘图形…

Linux使用——查看发行版本、内核、shell类型等基本命令

先做快照 虚拟机中编辑网络 关机 普通账户和管理员账户 互相对照 localhost相当于IP 参数: 短格式:以减号(-)开头,参数字母 长格式:以2个减号(--)后跟上完整的参数单词 当前发行版本 [rootserver ~]# cat /etc/redhat-release Red Hat Enterprise Linux release 9.…