当前位置:首页 > > 充电吧
[导读]在开始今天的说明之前,先来补齐最后一点知识。15.7.25 Variable [Class](变量)15.7.25.1 Description(描述)A Variable is a Connectab

在开始今天的说明之前,先来补齐最后一点知识。


15.7.25 Variable [Class](变量)


15.7.25.1 Description(描述)


A Variable is a ConnectableElement that may store values during the execution of an Activity. Reading and writing the values of a Variable provides an alternative means for passing data than the use of ObjectFlows. A Variable may be owned directly by an Activity, in which case it is accessible from anywhere within that activity, or it may be owned by a StructuredActivityNode, in which case it is only accessible within that node.


变量是一种可连接元素,它可以在活动执行期间储存值。读写变量的值提供了除对象流以外的另一种传送数据的手段。变量可以直接被活动所拥有,这种情况下它可以在活动内部的任何地方被访问,它也可以被结构化活动节点所拥有,这时它只可以在该节点内部被访问。


这段话说明了什么呢?至少有以下几点:


变量是存储值的容器而不是值本身

如果我们把活动看作一个方法(或函数)那么这里的变量就是C/C++语言的局部变量(约等于吧)

通过变量传递值是数据流的代替手段。


回到今天的主题,首先是抽象语法部分,也就是下面这张图。


从图中应该可以(但不限于)读到以下信息:


图中有三个抽象Action类:Action,VariableAction和WriteVariableAction

图中有四个具象Action类:ReadVariableAction,AddVariableValueAction,RemoveVariableValueAction和ClearVarialeAction

所有的VariableAction都和一个Variable相关联

ReadVariableAction有一个输出引脚

所有的WriteVariableAction有[0..1]个value输入引脚

AddVariableValueAction有[0..1]个insertAt输入引脚

AddVariableValueAction有[0..1]个removeAt输入引脚

ClearVariableAction没有引脚


四个抽象类不会在实际应用中使用,所以这里只说明四个具象类。


Read Variable Actions(读变量动作)


读 变量动作就是将变量中的值取出来放到result输出引脚生成的对象令牌中,如果读不到值,就生成空令牌。另外一个就是变量的多重度要和引脚的多重度兼 容,说白了就是引脚要装得下变量中的值,也就是说引脚的多重度下限要小于等于变量的多重度下限,而引脚的多重度上限要大于等于变量的多重度上限。假设变量 的多重度为2..5,如果引脚的多重度如果是1..6,或者2..5就没有问题,如果引脚的多重度为2..4,3..4都是不可以的。


Add Variable Value Action(增加变量值动作)


首先增加变量值动作每次只增加一个值,这个值通过value输入引脚指定。如果这个值已经在变量中存在,那本次操作对变量没有影响。


增加变量值操有有一个选项isReplaceAll,用来控制增加新值时,之前保存在变量中的值如何处理。


当isReplaceAll为真时会清除之前保存在变量中的所有值,这时增加变量值操作实际上是一个替换操作。


当isReplaceAll为假时,就意味着随着增加变量动作的进行,变量中保存的值会逐渐增加。如果变量是无序的,就不用在意值的位置,随便丢进去就可以了;如果变量是有序的就需用通过insertAt引脚提供一个指定插入位置的整数。


如果向变量插入一个已经存在的值,这时增加变量值动作相当于移动变量值动作。


Remove Variable Value Actions(移除变量值动作)


和增加变量值动作类似,移除变量值也是每次操作一个值。


移 除变量值操作有一个选项:isRemoveDuplicates,用于表明是否要从变量中移除重复值。如果isRemoveDuplicates为假,而 且变量是有序的,那么就通过removeAt引脚取得移除对象的位置然后变量中移除该位置的值;其他的情况下,value引脚有效并提供作为操作对象的 值。变量中所有与之相同的值都会被移除。


Clear Variable Actions(清除变量动作)


清除变量动作移除变量的所有变量值。


注意


需要注意的是,这里提到的有序并不是常说的升序/降序排序是的顺序,只是说值可以通过索引访问,换句话说就是数组。详细信息可以参照另一篇文章:EA&UML日拱一卒-Types and Multiplicity。


参考资料:

《OMG Unified Modeling Language TM (OMG UML) Version 2.5》

  


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

C语言是一种高级程序设计语言,它提供了十分完备的规范化流程控制结构。因此采用C51语言设计单片机应用系统程序时,首先要尽可能地采用结构化的程序设计方法,这样可使整个应用系统程序结构清晰,易于调试和维护。对于一个较大的程序...

关键字: C51语言 变量 存储

其实在 c++语言里面const修饰的才算是一个真正的常量,在 c 语言中 const 可以说是个“冒牌货”。为什么会这样?其实是 c++ 编译器对 const 进行了加强,当 c++ 编译器遇到常量声明时,不会像 c...

关键字: c++ C语言 const

定义一个变量,就是在内存中为你定义的这个变量开辟一段内存空间,如果这个变量没有初始化,那么系统会随机给这个变量赋一个值,这个值我一般称它为"垃圾数"。没有初始化的变量我认为它是没有意义的,是在浪费内存,就比如人刚出生的时...

关键字: 变量 初始化 赋值

返回函数的引用去初始化一个新的引用这个和前面一样,都是不会产生副本,但是现在是用返回值去初始化一个引用声明c,也就是说这时候变成了变量temp的别名,在c的生命周期内temp是一直有效的,这样做完全可以。

关键字: c++ 返回值 引用声明

用静态局部变量,还是临时变量,要牵涉到你项目具体情况,比如:RAM资源、代码运行效率等。(临时变量还会有一个数据拷贝过程)所以,该如何分配堆栈,该用静态还是临时变量,需要综合考虑你项目的情况而定。

关键字: 静态局部 变量 项目

C++是一种面向对象的高级程序设计语言,是C语言的超集。

关键字: c++ C语言

在C语言中,按照生命周期来分,变量只有两类:静态变量和动态变量。

关键字: C语言 变量

分析:这是Adobe 公司2007 年校园招聘的最新笔试题。这道题除了考察应聘者的C++ 基本功底外,还能考察反应能力,是一道很好的题目。 在Java 中定义了关键字final ,被final 修饰的

关键字: c++ class

泛型算法中的定制操作很多算法都会比较输入序列中的元素,通过定制比较动作,可以控制算法按照编程者的意图工作。本文以string排序为例进行说明,首先是缺省的排序动作: vector v{"This","

关键字: c++

为什么是lambda?讲了这么多天的lambda表达式,有一个很基本的问题没有回答:为什么叫lambda表达式呢?首先这个lambda就是罗马字母λ,lambda表达式即λ表达式。数学上有一个概念叫λ

关键字: c++
关闭