我有一个学生班,有两个协会:研究生和本科生。我正在尝试创建一个不变量,确保没有学生与两者相关联。我是OCL的新手,不知道这个或语法的方法。我想我需要有类似的东西 Student.allInstances-> forAll(这里的东西)
但我不知道。
谢谢!
答案 0 :(得分:2)
UML甚至在具有这种确切含义的两个关联之间具有图形xor依赖关系,因此如果您希望甚至可以跳过此特定的ocl约束。
答案 1 :(得分:1)
该协会是学生的自我参照吗?或者在协会结束时还有另一个班级?
如果还有另一个课程“学习”(作为一个例子),并且它们之间的关联与基数*,那么解决方案可能是:
context Student s:
inv only_one_graduate_type:
( (s.graduate -> notEmpty() implies s.undergraduate -> isEmpty()) &&
(s.undergraduate -> notEmpty() implies s.graduate -> isEmpty()) )
如果您使用 Student.allInstances-> 之类的内容,请使用上下文学生
更好地重写您的OCL表达式答案 2 :(得分:0)
这个怎么样?
context Student:
inv max_one_association:
not (self.graduate -> notEmpty() && self.undergraduate -> notEmpty())
顺便说一句,如果您可以发布类图,包括Student类和受影响的关联,那将是一件好事。以防万一...