ocl中的一对多关联约束

One-to-many association constraint in ocl

我是 ocl 的新手,遇到了一个问题。我为一所学校构建了一个 UML class 图,我想创建一个关联,将 class Teachers 的一名教师与 class Students 的许多学生联系起来.

我的问题不在于创建关联,而在于创建约束以确保确切的一位老师将使用他们的名字连接到确切数量的学生,例如,史密斯老师将教一组名为(约翰, lily、sami、diana),这些名字已经在 class 个学生中,还有其他学生的名字。

class-图中的约束旨在表达关于class及其实例的一般性陈述。因此约束必须对关联的所有可能实例都有效,而不仅仅是一个特定实例。

例如一些仅供说明的愚蠢的假设约束:

  • 参加课程的学生超过 16 岁:{ self.student.age > 16 }
  • 拥有 class 的老师尚未退休(退休教师是可能的,但他们不会与学生关联:{ self.teacher.retired = false }
  • 老师应该比每个 his/her 学生年长:{ self.student->forAll(age<teacher.age) }

如果您要定义一个非常具体的约束条件,则它必须适用于教师和学生之间的每个关联:

  • { self.teacher.name='Smith' and Set { 'john', 'lily', 'sami', 'diana' }->includes(self.student.name) }

这将是一所非常小的学校,或者可能很多学生和老师同名 ;-) 这不是 OCL 的本意。

如果你想描述场景中的特定案例,那么你不应该使用OCL约束。在旧的 UML 1.4.x 中,有 object diagram。它允许绘制特定实例并记录它们在给定时间点的特定值。在这样的图表中,史密斯老师有一个矩形,小组中的每个学生都有 4 个矩形。

显然,这种图并不经常使用:UML 2.5 根本没有提到它。所以原则上不应该使用它。但这也不是禁止的。如果您要描述特定案例,我怀疑这种形式的图表比 OCL 对您的帮助更大。