首页 > 解决方案 > OCL - 关于 UML 约束的疑问和 Papyrus 中的完整 OCL 文件

问题描述

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

在此处输入图像描述

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

在此处输入图像描述

  1. 如何定义上下文和操作(参数/参数),因为两者都在其他类中,根据上面的类图?

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

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

提前致谢。

标签: umloclpapyrus

解决方案


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

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

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

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

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


推荐阅读