uml - OCL - 关于 UML 约束的疑问和 Papyrus 中的完整 OCL 文件
问题描述
我想评估 UML 类图和完整 OCL 文件中的约束。我进行了搜索,但只找到了方法在同一类中的示例。下面是一个 UML 图类的例子,我有以下问题:
- 使用 Papyrus,如何在图表中设置集合类型(Bag、Set 等),因为它们在输入和返回参数类型选择窗口中不可用?它仅适用于 Ecore (EEList, EMap)
如何定义上下文和操作(参数/参数),因为两者都在其他类中,根据上面的类图?
如何在 OCL 完整文件中的两个类之间导航?
OCL Complete 文件是否允许使用命令:def、let、if-then-else 等?
提前致谢。
解决方案
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>
。
推荐阅读
- arduino - 连接 WEMOS D1 R32 和 SIM800L
- html - 如何将表 tr 和 td 与角度 11 中的对象数组绑定
- node.js - 当数据在对象数组中时,使用 mongoose.populate 和 mongoose-pagivate-v2
- php - 使用 curl 检索 api 数据
- angular - NativeScript:Scrollableheight 始终为 0
- javascript - 在输入字段中输入时,以太坊到美元/其他货币
- java - 更改活动标签颜色 - Android Studio
- install4j - 最新版本的 install4j 9.0.1 不会禁用按钮
- php - 遇到非数字值 PHP MySQL PHPExcel
- reactjs - 如何避免 React 中的“ERR_CERT_AUTHORITY_INVALID”错误?