uml - 允许加入节点的多个事件操作
解决方案
是否允许在一个连接节点上使用多个事件
是的,JoinNode是同步多个流的ControlNode。
是虚构的标记,可以用来描述一个活动流,在第二个事件出现之前就在那里并消失了
当连接没有通过时,传入边缘上提供的令牌被阻塞,JoinNode通过的时刻取决于它的joinSpec:
- 如果JoinNode没有joinSpec,则这等效于带有布尔运算符“and”的joinSpec表达式。也就是说,隐含的默认joinSpec条件是在每个传入的ActivityEdge上至少提供一个令牌
- 否则joinSpec它是一个ValueSpecification确定连接将发出令牌的条件,然后在每个传入的ActivityEdge上至少提供一个令牌时不是必需的。每当在任何传入的ActivityEdge上向JoinNode提供新令牌时,都会评估此ValueSpecification。
有关更多信息,这里是正式/ 2017-12-05 的 §15.3.3.4 加入节点第 389 页的副本:
JoinNode 是同步多个流的 ControlNode。一个 JoinNode 应该只有一个传出的 ActivityEdge,但可能有多个传入的 ActivityEdge。如果 JoinNode 的任何传入边是 ObjectFlow,则传出边应是 ObjectFlow。否则,出边将是一个控制流。
连接节点可能有一个 joinSpec,它是一个 ValueSpecification,它确定连接发出令牌的条件。
如果一个 JoinNode 有一个 joinSpec,那么只要在任何传入的 ActivityEdge 上向 JoinNode 提供一个新令牌,就会评估这个 ValueSpecification。评估期间提供的任何新代币都不会中断该评估,也不得在评估期间提供新代币时启动并行评估。ValueSpecification 应评估为布尔值。
如果 joinSpec ValueSpecification 由文本表达式给出,则传入边的名称可用于表示布尔值,指示存在(真)或不存在(假)来自 ControlFlow 的提议或表示与从 ObjectFlow(如果有)提供的对象令牌。或者,joinSpec 可以由一个带有单个布尔运算符名称且未指定操作数的表达式组成。在这种情况下,joinSpec 的值应通过将给定运算符应用于布尔值来给出,该布尔值指示每个传入边上的报价存在(真)或不存在(假)(未指定操作数的顺序)。
如果 JoinNode 没有 joinSpec,则这等效于带有布尔运算符“and”的 joinSpec 表达式。也就是说,隐含的默认 joinSpec 条件是在每个传入的 ActivityEdge 上至少提供一个令牌。
如果 JoinNode 的(隐式或显式)joinSpec 评估为 true,则根据以下规则在 JoinNode 的传出 ActivityEdge 上提供令牌:
- 如果在输入边上提供的所有令牌都是控制令牌,则在输出边上提供一个控制令牌。
- 如果在传入边上提供的一些令牌是控制令牌,而其他令牌是对象令牌,则在传出边上只提供对象令牌。令牌在传出边缘上提供的顺序与它们提供给连接的顺序相同。如果 JoinNode 的 isCombinedDuplicate 为真,则在将对象令牌提供给传出边之前,将包含具有相同标识的对象的那些对象组合成一个令牌。
上述规则适用于提供给 JoinNode 的所有令牌,包括从同一传入边缘提供的多个令牌。
如果有任何令牌被提供给 JoinNode 的传出 ActivityEdge,则在向传出边缘提供更多令牌之前,它们应被目标接受或拒绝遍历边缘(例如,由于守卫失败)。如果令牌被拒绝遍历,它们将不再提供给传出边缘。如果 JoinNode 被阻止在其传出边缘上提供令牌,则符合要求的实现可能会省略不必要的 joinSpec 评估。
推荐阅读
- python-3.x - 是一个返回抽象类的python“抽象属性”,是工厂模式的一个例子
- c++ - C/C++ 编译器优化:我应该更喜欢创建新变量、重用现有变量还是完全避免变量?
- c++ - 使用 boost 将 ffmpeg 输出通过管道传输到 ffplay 标准输入
- excel - C# VSTO Excel加载项在按下箭头按钮时滚动
- node.js - 如何避免在 Node js 中等待多个函数?
- node.js - 在 NodeJS REST API 中使从 URL 下载的图像保持不变(不会被新的图像替换)
- python - 在 Google Colab 中的 *.m (Matlab) 文件上使用 Oct2Py 后未定义“exists_or_mkdir”
- python - 带有 sqlite 的 Pandas read_sql 在简单查询上非常慢,这是预期的吗?
- java - 我需要文件为 1529 字节,但它不起作用
- python - 如何截取生成器的第一个值并透明地从其余值中产生