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

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

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

相关文章

MySQL命名规范(自用)

MtySQL命名规范 基本通用规范 1.【推荐】关键字必须大写 所有关键字必须大写,如:INSERT、UPDATE、DELETE、SELECT及其子句,IF……ELSE、CASE、DECLARE等 2.【强制】字段和建表必须写备注 COMMENT写备注 3.【强制】字母数字下划线 采用26个英…

国产MCU芯片(2):东软MCU概览及触控MCU

前言: 国产芯片替代的一个主战场之一就是mcu,可以说很多国内芯片设计公司都打算或者已经在设计甚至有了一款或多款的量产产品了,这也是国际大背景决定的。过去的家电市场、过去的汽车电子市场,的确国产芯片的身影不是很常见,如今不同了,很多fabless投身这个行业,一种是…

OpenGL3.3_C++_Windows(18)

接口块: glsl彼此传输数据,通过in / out,当更多的变量,涉及数组和结构体接口块(Interface Block)类似struct,in / out 块名{……}实例名 Uniform缓冲对象: 首先理解uniform Object:负责向gl…

程序人生:关于RHCE红帽认证这件事

花了两个月备考红帽,最终终于双满分通过。 关于考试 RHCE红帽认证总共需要考两门:RHCSA、RHCE。 RHCSA主要是考察基本的Linux操作:用户、权限、空间扩容、yum、容器等内容。 RHCE主要是考察ansible playbook 代码的开发。 通过考试没有别…

【内存管理】页面分配机制

前言 Linux内核中是如何分配出页面的,如果我们站在CPU的角度去看这个问题,CPU能分配出来的页面是以物理页面为单位的。也就是我们计算机中常讲的分页机制。本文就看下Linux内核是如何管理,释放和分配这些物理页面的。 伙伴算法 伙伴系统的…

设计模式4-模版方法

设计模式 重构获得模式重构的关键技法1. 静态转动态2. 早绑定转晚绑定3. 继承转组合4. 编译时依赖转运行时依赖5. 紧耦合转松耦合 组件协助动机模式定义结构 要点总结。 例子示例解释: 重构获得模式 设计模式的目的是应对变化,提高复用 设计模式的要点…

[SAP ABAP] 排序内表数据

语法格式 整表排序 SORT <itab> [ASCENDING|DESCENDING]. 按指定字段排序 SORT <itab> BY f1 [ASCENDING|DESCENDING] f2 [ASCENDING|DESCENDING] ... fn [ASCENDING|DESCENDING].<itab>&#xff1a;代表内表 不指定排序方式则默认升序排序 示例1 结果显…

.hmallox勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言&#xff1a; 在当今数字化时代&#xff0c;勒索病毒已经成为网络安全的一大威胁&#xff0c;其中包括了最近出现的.hmallox勒索病毒。这类恶意软件不仅能够对计算机系统进行加密&#xff0c;还会要求用户支付赎金以换取解密密钥&#xff0c;给个人用户和企业带来了严重的…

C++的特殊类设计 饥饿汉模式

目录 特殊类设计 设计一个不能被拷贝的类 设计一个只能在堆上创建对象的类 设计一个只能在栈上创建对象的类 设计一个不能继承的类 设计模式 单例模式 饿汉模式 饥汉模式 特殊类设计 设计一个不能被拷贝的类 C98的设计方式&#xff1a;将该类的拷贝构造和赋值运算符…

一小时搞定Git(含盖IDEA使用)

文章目录 1. git基本概念1.1版本控制1.1.1 版本控制软件 2. 命令的使用2.1 Linux命令2.2 git基础指令2.2.1 设置用户2.2.2 初始化本地仓库2.2.3 查看本地仓库状态2.2.4 添加暂存区域2.2.5 提交本地库2.2.6 切换版本 2.3 分支操作2.3.1 分支基本操作2.3.2 合并操作2.3.4 分支开发…

基于STM32的智能家居安防系统

目录 引言环境准备智能家居安防系统基础代码实现&#xff1a;实现智能家居安防系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景&#xff1a;智能家居安防管理与优化问题解决方案与优化收尾与总结 1. 引言 智能家居安防系统通过使…

195.回溯算法:分割回文串(力扣)

代码解决 class Solution { public:vector<string> res; // 当前路径&#xff0c;用于存储一个可能的回文分割结果vector<vector<string>> result; // 存储所有可能的回文分割结果// 判断子串 s[left:right] 是否是回文bool isPalindrome(const string& …

Linux应用系统快速部署:docker快速部署linux应用程序

目录 一、背景 &#xff08;一&#xff09;引入docker的起因 &#xff08;二&#xff09;docker介绍 &#xff08;三&#xff09;Docker部署的优势 1、轻量级和可移植性 2、快速部署和扩展 3、一致性 4、版本控制 5、安全性 6、资源隔离 7、简化团队协作 8、多容器…

VMware虚拟机三种网络模式设置 - Bridged(桥接模式)

一、前言 由于linux目前很热门&#xff0c;越来越多的人在学习linux&#xff0c;但是买一台服务放家里来学习&#xff0c;实在是很浪费。那么如何解决这个问题&#xff1f;虚拟机软件是很好的选择&#xff0c;常用的虚拟机软件有vmware workstations和virtual box等。 在使用虚…

基于imx6ull开发板 移植opencv4.7.0

一、概述 本章节是针对opencv-4.7.0移植到Linux系统&#xff0c;运行在正点原子-I.MX6U ALPHA开发板 上&#xff0c;详细的移植流程如下。 二、环境要求 2.1 硬件环境 正点原子-I.MX6U ALPHA开发板虚拟机&#xff1a;VMware 2.2 软件环境 Ubuntu系统要求&#xff1a;20.0…

DIVE INTO DEEP LEARNING 50-55

文章目录 50. semantic segmentation50.1 Basic concepts50.2 Major application 51. Transposed convolution51.1 Basic concepts51.2 Major role51.3 Implementation steps and application areas51.4 Transposed convolution51.5 Transposed convolution is a type of convo…

谁说串口通信波特率越高越好?

在电子世界里&#xff0c;串口通信就像是电子设备之间的“悄悄话”&#xff0c;它们通过串行数据传输来交换信息。但你知道吗&#xff1f;串口通信的波特率并不是越高越好&#xff0c;这事儿得好好聊聊。 1.什么是串口通信&#xff1f; 串口通信&#xff0c;就像它的名字一样&a…

深度学习11-13

1.神经元的个数对结果的影响&#xff1a; &#xff08;http://cs.stanford.edu/people/karpathy/convnetjs/demo/classify2d.html&#xff09; &#xff08;1&#xff09;神经元3个的时候 &#xff08;2&#xff09;神经元是10个的时候 神经元个数越多&#xff0c;可能会产生…

计算机组成原理 —— 存储系统(DRAM和SRAM,ROM)

计算机组成原理 —— 存储系统&#xff08;DRAM和SRAM&#xff09; DRAM和SRAMDRAM的刷新DRAM地址复用ROM&#xff08;Read-Only Memory&#xff08;只读存储器&#xff09;&#xff09; 我们今天来看DRAM和SRAM&#xff1a; DRAM和SRAM DRAM&#xff08;动态随机存取存储器&…

展示3D模型的网站哪个好?

如果仅仅是模型展示&#xff0c;目前国内外值得推荐的无非就是那么几个&#xff0c;它们各自有不同的特点和优势&#xff1a; 1、Sketchfab&#xff1a;Sketchfab是一个知名的3D模型展示平台&#xff0c;提供了海量的模型资源和出色的3D展示效果。用户无需安装任何插件即可在线…