【发布时间】:2014-05-08 16:01:14
【问题描述】:
我的学生班级有两个协会:研究生和本科。我正在尝试创建一个不变量,以确保没有学生与两者相关联。我对 OCL 很陌生,不知道这种方法或语法。我想我需要有类似的东西 Student.allInstances->forAll(这里有东西)
但我不知道。
谢谢!
【问题讨论】:
标签: associations uml ocl
我的学生班级有两个协会:研究生和本科。我正在尝试创建一个不变量,以确保没有学生与两者相关联。我对 OCL 很陌生,不知道这种方法或语法。我想我需要有类似的东西 Student.allInstances->forAll(这里有东西)
但我不知道。
谢谢!
【问题讨论】:
标签: associations uml ocl
UML 甚至在两个具有此确切含义的关联之间具有图形异或依赖关系,因此如果您希望甚至可以跳过这个特定的 ocl 约束。
【讨论】:
{xor} 约束的示例位于uml-diagrams.org/constraint.html
该协会是学生的自我参照吗?还是在关联的末尾有另一个类?
如果有另一个类“Study”(例如)并且它们之间的关联将是基数 *,那么解决方案可能是:
context Student s:
inv only_one_graduate_type:
( (s.graduate -> notEmpty() implies s.undergraduate -> isEmpty()) &&
(s.undergraduate -> notEmpty() implies s.graduate -> isEmpty()) )
如果您使用 Student.allInstances-> 之类的东西,最好使用 context Student s
重写您的 OCL 表达式【讨论】:
这个怎么样?
context Student:
inv max_one_association:
not (self.graduate -> notEmpty() && self.undergraduate -> notEmpty())
顺便说一句,如果您可以发布类图,包括 Student 类和受影响的关联,那就太好了。以防万一……
【讨论】: