有谁知道好的对象约束语言(OCL)教程?

Art*_*tur 6 uml modeling constraints

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

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


困扰我的限制因素:

  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中,我是否将个体员工与他们的实际经理/经理薪水进行比较.

Art*_*tur 5

终于有了一些好事!

这是来自对象管理组(OMG)的非常翔实的文档(PDF):

对象约束语言规范

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


Jor*_*bot 3

针对约束的快速解决方案:

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

context 公司投资: self.employee->forAll(e| e.manager<>e)

context 公司投资: self.employee->forAll(e| e.salary<=e.manager.salary)

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

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