【问题标题】:UML activity diagrams: the meaning of <<iterative >>UML活动图:<<iterative>>的含义
【发布时间】:2021-10-06 21:57:46
【问题描述】:

我想检查活动图中扩展区域中“迭代”的定义是什么。对我个人而言,这从来都不是问题,因为我将其理解为让我执行 For 循环,例如,

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

但是,当我向观众展示我的 UML 图时,一位工程师团队负责人(不是 UML 专家)反对“迭代”一词,因为他将“迭代”理解为“迭代过程”,这样每个step 改善了结果。我也知道这个定义,但我认为 UML 定义不是那个,而是一个简单的 For-Loop。

请确认«iterative»和迭代的UML定义就像一个简单的For循环。否则,如果是这样。

【问题讨论】:

    标签: iteration uml terminology


    【解决方案1】:

    不,它有不同的含义。 UML 2.5 状态在 p。 480:

    ExpansionRegion 的模式控制其扩展执行的方式。

    • 如果值为iterative,则扩展执行必须以迭代顺序发生,一个完成后另一个才能开始。当 ExpansionRegion 开始执行时,第一个扩展执行立即开始,随后的执行在前一个执行完成时开始。如果输入集合是有序的,那么扩展执行将按照输入集合诱导的顺序进行排序。否则,扩展执行的顺序未定义。

    此关键字的其他值是 parallelstream。你可以猜到在 parallel 区域中定义的行为可以并行执行。 stream 有点复杂,您可以在 UML 规范中的该页面上阅读。

    for 循环本身来自您传递给区域的输入集合。这可以通过上述任一方式进行处理。

    tl;dr

    因此,该区域的关键字«iterative»表明它的行为可能不会被并行处理,而不是 for 循环。

    【讨论】:

    • 如果循环是有序的、连续的并且在有限集上,可以说它是迭代的。无限集是流(按顺序处理或不按顺序处理是另一回事),要么是非顺序的,要么是按任何顺序的,在任何一种情况下,有限都是并行的。应该补充的是,模型循环的并行仍然可以按顺序排序的方式实现(在大多数情况下)。但可能需要独立处理结果。
    • @Ister 我无法理解你的想法。有限与否无关紧要。关键字仅说明如何处理输入集。第页上的例子。 482 很有帮助。两个输入数组可以并行处理,因为它们的条目不相互依赖。如果不是这种情况(没有很好的例子),那么您需要一个接一个地处理它们。
    • 有限或非集对流式(无限)而不是非(有限)有影响。我相信并行或迭代(顺序)很简单。顺序很重要且类型必须是迭代的示例可以是计算处理(其中运算符的顺序具有意义,前一个计算的结果是下一个计算的输入)。
    【解决方案2】:

    啊,语义...

    首先声明 - 我不是以英语为母语的人。但我相信我的英语水平和 IT 经验足以回答这个问题。

    我们先来看看dictionary definition of 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 作者确实定义了该术语。
    • 我同意。我只想指出问题首先来自开发人员的地方。顺便说一句,另一个原因是在其他领域建立的名称约定与 UML 规范中具体列出的含义关联不同。
    • 我认为最糟糕的是共享聚合,他们(现在)定义它是未定义的,但同时人们根据它应该是什么有一些内部思维定势。语义很烂;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多