使用区域在 UML 活动图中循环

2024-01-08

我正在 UML 活动图中对循环进行建模。它适用于简单的条件节点(图 1),但我正在寻找一种更具表现力的方法来强调循环语义。 所以我来到了所示的“区域”或“可中断区域”here http://www.pst.ifi.lmu.de/~stoerrle/V/AD-4b-ExpansionNJC.pdf and there http://sparxsystems.com/enterprise_architect_user_guide/12.1/building_models/loop_and_conditional_nodes2.html,但我找不到很多真正令人满意的例子。

我的示例是一个处理给定列表的消息的函数。一旦找到第一个有效消息,循环就会中止,然后处理该消息并且函数返回 true。否则,它返回 false(请不要评论有意义或无意义,这只是为了示例)。

图 1:使用良好的旧活动图条件节点。诚然,沿着箭头遵循控制流更容易,但没有“循环”,只有一个“如果”。

图2:

  • 使用中断边沿的(正)退出条件是否正确?确实,它可以与迭代器一起成为循环的 [test] 部分的一部分。
  • 顺便说一句:for 循环的迭代特性如何在 UML 中得到最好的表达?
  • 循环体内的活动最终节点是否正确(即,当条件“消息有效?”产生“否”时)?在这里使用最终节点感觉有点不对,但是我还能如何表达控制流一个循环的?

两个图的功能应该是等效的:


编辑:另一个实施斯蒂芬建议的图表:

  • 循环体内的初始节点和最终节点
  • “进一步处理”现在位于循环体内。嗯...好吧,但可能还有其他循环,我宁愿把它放在外面。那我可能会改变设计......
  • “下一条消息”也可以被视为迭代器对象本身而不是action原始图表中的“(提供)下一条消息”。
  • 两个对象流箭头可能有点矫枉过正,但我​​认为它们是正确的。

在UML中,活动最终节点代表完成,因此当您使用它时,它在循环区域中是正确的,它是循环内容的正常完成(进而导致下一次迭代)。作为旁注,我建议您也使用初始节点作为循环的开始。

还有流程最终节点,它代表退出,而不是完成。因此,您可以使用它来表示“break”语句,而不是您使用的中断边沿。在这种情况下,您必须在“是”分支中集成“进一步消息处理节点”,就在该流最终节点之前。

中断边缘更适合来自当前处理外部的中断。该区域是可中断的,并且无论该区域内容的进度如何,某些事件(通常用接收节点标记)都可能完全中断它。但这里的情况并非如此。

不幸的是,关于迭代角色,没有什么非常直观的东西。我倾向于在区域顶部、初始节点旁边使用对象节点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用区域在 UML 活动图中循环 的相关文章

  • 使用两个 for 循环计算字符串中的字母

    我必须读取字符串 hello world 并仅使用 for 循环输出每个字母的频率 讲师暗示我需要使用两个循环 并为我们提供了以下代码来开始 int ch count for ch a ch lt z ch count the number
  • UML 状态机,本地转换与外部转换

    正如已经问过的http www eclipse org forums index php t 452409 http www eclipse org forums index php t 452409 我不确定我是否正确理解了本地转换的含义
  • 终止或中断java 8流循环[重复]

    这个问题在这里已经有答案了 我有一个包含以下内容的 java 8 流循环 void matchSellOrder Market market Order sellOrder System out println selling market
  • Android:如何在每个(列表)活动中拥有共享菜单而不重写重写方法?

    我知道 Android 提供了一些可以重写的有用方法来定义菜单 Override public boolean onCreateOptionsMenu Menu menu menu add 0 AIS 0 Activity Inventor
  • Android 在显示闪屏时将 url 预加载到 WebView 中

    我有一个带有启动屏幕的应用程序 几秒钟后会打开具有 WebView 的主要活动 问题是 只有这样 主 Activity 才会开始加载 URL 这有时需要几秒钟的时间 双重等待似乎很愚蠢 然而 我预加载 WebView 的尝试不太成功 问题的
  • 以编程方式列出意图过滤器

    在 android Activity 中 有没有一种方法可以以编程方式列出它已注册的活动
  • 删除 numpy 中的循环以进行简单的矩阵分配

    如何删除这个简单矩阵分配中的循环以提高性能 nk ncol nrow index shape for kk in range 0 nk for ii in range 0 nrow for jj in range 0 ncol idx in
  • Python 多元简单线性回归

    注意这是not关于多元回归的问题 这是一个关于在 Python NumPy 2 7 中多次进行简单 单变量 回归的问题 我有两个m x n arrays x and y 这些行彼此对应 每对都是用于测量的 x y 点的集合 那是 plt p
  • 将选择结果(一列)拆分为多列

    我一直在努力找出如何实现这一目标 但我认为我一开始就没有能力知道要寻找什么 我正在使用现有系统 我无法更改数据库架构 也无法规定用户如何输入数据 我必须利用我们现有的资源来工作 目前 我们的用户正在将统计数据放入表中的一个文本字段中 他们使
  • Activity 上的 OnTouchListener

    目前我在按钮上有一个 OnTouchListener 并且它工作正常 代码如下 Button button1 Button findViewById R id btOk1 button1 setOnTouchListener new OnT
  • 是什么让一个 singleTask 活动有 2 个实例?

    根据docs https developer android com guide topics manifest activity element lmode singleTask 活动不能有多个实例 我的应用程序的唯一活动是 single
  • 根据javascript中对象数组中的id替换特定对象

    我有一系列像这样的对象 var books id 1 name Name of the wind year 2015 rating 4 5 author 2 现在我有一个函数 editBooks 它要求用户提供 id 并用用户给出的值替换具
  • Android - 从渲染线程内结束活动

    下午好 我不熟悉 android 中的活动生命周期 并且一直在尽可能地阅读 但我不知道如何以良好的方式解决以下问题 我有一个使用 GLSurfaceView 的活动来在屏幕上绘制各种内容 在这个 GLSurfaceView 的渲染线程中 我
  • Scrapy - 持续从数据库中获取要爬取的url

    我想不断地从数据库中获取要爬行的网址 到目前为止 我成功地从基地获取了 url 但我希望我的蜘蛛继续从该基地读取 因为该表将由另一个线程填充 我有一个管道 一旦爬行 工作 就会从表中删除 url 换句话说 我想使用我的数据库作为队列 我尝试
  • 在旋转时从错误的资源文件夹中提取可绘制对象

    在这里拉我的头发 因此 我正在使用一个具有多种类型的可绘制对象的应用程序 并且它们的结构如下 res Portrait resources drawable mdpi drawable hdpi drawable xhdpi Landsca
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • Android Activity 生命周期函数基础知识

    我正在测试这段代码 它显示活动所处的状态 public class Activity101Activity extends Activity String tag Lifecycle Called when the activity is
  • 如何将点击事件从片段传递到容器活动?

    我正在实现一个导航抽屉活动 其中导航抽屉中有一个片段 由回收器视图组成 可以动态地将项目添加到导航抽屉 我已经成功实现了这个概念 但面临一个小问题 即当我单击片段中的任何项目时 导航抽屉不会关闭 这是因为我无法从片段访问 DrawerLay
  • Objective-C NSString for 循环与characterAtIndex

    我试图逐个字符地循环遍历 NSString 但出现 EXC BAD ACCESS 错误 您知道如何正确执行此操作吗 我已经在谷歌上搜索了几个小时但无法弄清楚 这是我的代码 m self textLength self text length

随机推荐