OCL - 关于 UML 约束和 Papyrus 中完整 OCL 文件的疑问

OCL - Doubts about UML constraints and Complete OCL file in Papyrus

我想评估 UML class 图和完整 OCL 文件中的约束。我进行了搜索,但只找到了方法在相同 class 中的示例。下面是一个 UML 图的示例 class,对此我有以下问题:

  1. 使用 Papyrus,如何在图表中设置集合类型(Bag、Set 等),因为它们在输入和 return 参数类型选择 window 中不可用?它仅适用于 Ecore(EEList、EMap)

  1. 如何定义上下文和操作 (parameters/arguments),因为两者都在其他 class 中,根据上图 class?

  2. 如何在 OCL 完整文件中的两个 class 之间导航?

  3. OCL Complete 文件是否允许使用命令:def、let、if-then-else 等?

提前致谢。

UML 不支持集合或映射。相反,它具有多样性和合格的协会。对于通常的常见情况,指定无限上限和唯一且有序的极性足以为 OCL 配置 Bag/OrderedSet/Sequence/Set 的 UML 多重性。

UML 支持模板,但 OMG OCL 不支持,尽管 OMG OCL 与 UML 保持一致。相反,OMG OCL 具有神奇的“T”和“T1”类型,它们看起来非常像模板参数,但没有被定义为模板参数。基于 Pivot 的 Eclipse OCL 为许多 OMG OCL 问题的原型解决方案实现了模板,因此允许 UML 用户定义数据类型 属性,其类型模板来自 Eclipse OCL 标准库的相关 collection/map 类型。

对于平面集合,使用库类型只是一种替代方法。对于 UML 不支持的嵌套集合,使用 DataType 定义全部或除一层嵌套之外的所有嵌套是唯一的选择。

(Papyrus 使用基于 Pivot 的 Eclipse OCL。)

完整的OCL应该可以正常工作; UML 多重性被转换为 to/interpreted 作为 OCL 集合类型。在基于 Pivot 的 Eclipse OCL 中,有一个遗留语法使用 () 来引用例如Set(MyClass) 但一个 novel/familiar <> 来声明例如MyAggregate<E>.