【问题标题】:Does anyone know good Object Constraint Language (OCL) tutorial?有谁知道好的对象约束语言(OCL)教程?
【发布时间】:2009-05-23 19:08:08
【问题描述】:

我遇到了几个关于 OCL 表达式的问题。在阅读了一些大学幻灯片并在谷歌上搜索后,我仍然无法正确理解它。

我想知道你们中是否有人知道我应该阅读以理解这些东西的任何好资源。


困扰我的约束:

  1. 在部门工作的每个人都有同一个经理。
  2. 公司里没有人是他/她自己的经理。
  3. 公司里没有人比他的经理挣得更多。

对于我拥有的第一个:

上下文系

inv self.stuff -> forAll(manager = self.staff.manager)

第二个:

上下文公司

inv self.employee -> select(manager = manager.manager) -> isEmpty()

第三个:

上下文公司

inv self.employee -> select(salary > manager.salary) -> isEmpty()

但我认为这些都不对。我最不确定的是,在示例 2 和示例 3 中,我是否真的将个别员工与他们的实际经理/经理工资进行了比较。

【问题讨论】:

    标签: uml constraints modeling


    【解决方案1】:

    终于有好东西了!

    这是来自 Object Management Group (OMG) 的内容丰富的文档 (PDF):

    Object Constraint Language Specification

    我喜欢回答自己的问题 :)

    【讨论】:

      【解决方案2】:

      @Artur 发布的 PDF 文件的链接已更改,这是新链接 http://www.omg.org/spec/OCL/2.0/PDF/

      【讨论】:

      • 感谢您告诉我。我已经更新了我帖子中的链接。为你 +1 ;)
      【解决方案3】:

      对于初学者,我推荐这本书:对象约束语言:让您的模型为 MDA 做好准备,作者是 Jos Warmer 和 Anneke Kleppe(Jos 是 OCL 的主要创建者之一)。

      还有这个免费的OCL tutorial(pdf + 幻灯片)

      我也很喜欢你已经找到的官方规范(特别是提供语言非正式描述的章节)。

      【讨论】:

        【解决方案4】:

        关于约束的快速解决方案:

        上下文部门inv: self.staff -> forAll(s1,s2| s1.manager = s2.manager)

        上下文公司投资: self.employee->forAll(e| e.managere)

        上下文公司投资: self.employee->forAll(e| e.salary

        顺便说一句,我真的不认为需要 Company 类(系统中有多少 company 类型的对象?)。如果约束二和三对所有公司都成立,那么它们可以以这种方式使用 Person 作为上下文来表达(例如,使用数字 2): context Person inv: self.managerself)

        我们还可以在进行比较之前添加检查以查看员工是否有经理

        【讨论】:

        • 这不是实际的系统。这是考试的复习题之一:)我一直在琢磨为什么会有公司课……非常感谢您的帮助。
        猜你喜欢
        • 2010-10-23
        • 2020-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-03
        • 1970-01-01
        相关资源
        最近更新 更多