UML活动图:<<迭代>>的含义

3

我想查看在活动图的扩展区域中,“迭代”一词的定义。 对于我个人来说,这从未是一个问题,因为我理解它为让我使用 For 循环,例如:

For i=1 to 10 
  Do-Something // So it does it 10 times 
End For 

然而,在向观众展示我的UML图表时,一位工程师团队领导(不是UML专家)反对“迭代”这个术语,因为他把“迭代”理解为“迭代过程”,即每个步骤都改善了结果。我也知道这个定义,但我认为UML的定义不是这样的,而是指一个简单的“for循环”。
请确认UML中“迭代”的定义和迭代就像一个简单的For-Loop。如果不是,请说明。
2个回答

1
Ahhh, 语义学...
首先声明一下 - 我不是以英语为母语的人。但我相信我的英语水平和IT经验足以回答这个问题。
让我们先看看迭代(iterative)的词典定义

iterative 形容词

/ˈɪtərətɪv/
/ˈɪtəreɪtɪv/, /ˈɪtərətɪv/

(指一个过程)涉及重复一遍或多遍某个程序或一组指令,每次都将其应用于前一阶段的结果

  • 我们使用了一个反复精炼和修改的迭代过程。
  • 一个迭代的过程/方法/方法论
带有字体样式的突出显示是我的。
当然,这只是一个纯单词定义,不涉及软件开发的上下文。
在现实生活中,一个过程可能被认为是重复的,但本质上并不是迭代的。想象一下一个大规模生产工厂的装配线。在其中一个位置上,应用了特定的螺钉/一组螺钉来连接两个或更多元素。对于每个下一个运行,相同类型和数量的螺钉被应用于相同的元素集合。有着几乎无穷无尽的类似部件集的流,每个集合都由先前相同类型的零件组成,并需要相同类型的连接。从位置的角度来看,连接元素是一个重复的过程,但它不是迭代的,因为每个连接都应用于不同的元素集-它不适用于已经连接的元素。
如果你考虑代码,情况就有些不同了。当应用循环时,几乎总会有某种受其影响的结果集,可以说随着每个循环步骤,该结果集正在被进一步改变,这意味着下一个循环步骤是应用于上一个步骤的结果。从这个角度来看,几乎每个循环都是迭代的。
另一方面,你可以有这样一个循环:
loop
  wait 10
while buffer is empty
 
read buffer

你可以清楚地说这是一个循环,没有任何东西被改变。所有的代码都在等待缓冲区填充。所以它不是迭代的。
对于UML来说,具体含义包含在qwerty_so的答案中,因此我不会在这里重复。

我经常会查阅字典来寻找那些没有明确定义的术语。这种情况在 UML 规范中比较常见,因为缺少词汇表。但是,在这种情况下,UML 的作者已经对该术语进行了定义。 - qwerty_so
我同意。我只是想指出问题最初可能来自开发者的地方。另外,另一个原因是在其他领域建立了命名约定,这创造了与 UML 规范中列出的特定含义关联不同的含义关联。 - Ister
我认为最糟糕的是共享聚合,他们(现在)定义它是未定义的,但人们同时有一些内部心态,认为它应该是什么。语义很糟糕;-) - qwerty_so

1
不是,它有不同的含义。UML 2.5 在第480页中指出:
扩展区域的模式控制其扩展执行的方式。
如果值为“迭代”,则扩展执行必须按照迭代序列进行,一个完成后另一个才能开始。第一个扩展执行在 ExpansionRegion 开始执行时立即开始,随后的执行在前一个执行完成时开始。如果输入集合是有序的,则扩展执行按输入集合引起的顺序进行排序。否则,扩展执行的顺序未定义。
此关键字的其他值包括“并行”和“流”。您可以猜测在并行区域中定义的行为可以并行执行。“流”稍微复杂一些,您可以在 UML 规范的该页面上阅读。
for 循环本身来自您传递给区域的输入集合。这可以以上述任一方式处理。
因此,与 for 循环不同,区域的关键字“迭代”表明其行为可能无法并行处理。

如果循环是有序的、顺序的,并且在一个有限集合上,那么可以说它是迭代的。无限集合是流(并且按顺序处理或不按顺序处理是另一回事),在任何情况下都是非顺序的或以任何顺序排列的,而且在任何情况下都是有限的并行。但需要补充的是,通过模型并行的循环仍然可以以顺序有序的方式实现(在大多数情况下)。但可能需要独立处理结果。 - Ister
@Ister 我不明白你的想法。有限与否并不重要。关键字只是告诉我们输入集如何处理。第482页上的例子很有帮助。两个输入数组可以并行处理,因为它们的条目不互相依赖。如果不是这种情况(没有好的例子),那么你需要一个接一个地处理它们。 - qwerty_so
1
有限或非集合对于流式(无限)而不是非流式(有限)具有影响。我认为并行或迭代(顺序)很简单。一个需要重视顺序,而类型必须是迭代的例子可以是计算处理(其中运算符的顺序具有意义,上一个计算的结果是下一个计算的输入)。 - Ister

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接