【发布时间】:2015-04-19 14:28:47
【问题描述】:
我有一些具有日期属性的模型,我想包含 ocl 以进行验证和推导。
在互联网上搜索我发现一些文章和论文提到了date.isBefore(date)或date.before(date)方法,但这些方法在OCL中不被识别。
另外我想定义推导,例如derivation: endDate + 10;。
我必须用我需要的所有方法重新定义一个 Date 类吗?
欢迎任何与之相关的材料或链接。
【问题讨论】:
我有一些具有日期属性的模型,我想包含 ocl 以进行验证和推导。
在互联网上搜索我发现一些文章和论文提到了date.isBefore(date)或date.before(date)方法,但这些方法在OCL中不被识别。
另外我想定义推导,例如derivation: endDate + 10;。
我必须用我需要的所有方法重新定义一个 Date 类吗?
欢迎任何与之相关的材料或链接。
【问题讨论】:
鉴于 OCL 没有定义 Date,作者应该走很长的路才能正式定义 isBefore(并且页面是学术写作中的稀缺资源;)
预定义了一些“原始类型”,包括数字和字符串 在 UML [RJB98*, p. 394]。其他类型的可用性,如日期和 金钱是“系统依赖的”。无论如何,原语的语义 类型必须在 UML 之外定义。 (Richters Mark.A Precise Approach to Validating UML Models and OCL Constraints,不来梅大学,第 33、86 页)
[RJB98] Rumbaugh、Jacobson 和 Booch。统一建模 语言参考手册。艾迪生-韦斯利,1998 年。
虽然我不精通 EMF,但根据 this link,任何 Java 数据类型都可以通过将其声明为 Ecore 模型的 EDataType 的实例类型。 (另见this reference)
【讨论】:
java.util.Date 声明了新的EDataType,但在OCL 中,诸如>=、< 之类的操作或data.before(old_data) 之类的方法无法识别。无论如何,我真的很感谢你的帮助。