【问题标题】:One-to-many association constraint in oclocl中的一对多关联约束
【发布时间】:2020-06-20 02:12:44
【问题描述】:

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

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

【问题讨论】:

  • 对不起,我不明白。
  • 同上。编写 OCL 约束的秘诀是音译清晰的英文说明。你的说明还不够清楚。
  • 尝试完成以下一项:“每位教师都有……”或“每位学生都有……”。

标签: constraints uml class-diagram ocl


【解决方案1】:

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

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

  • 参加课程的学生年龄小于 16 岁:{ self.student.age > 16 }
  • 有课的老师还没有退休(退休老师是可能的,但他们不会与学生关联:{ self.teacher.retired = false }
  • 老师应该比他/她的每个学生都大:{ self.student->forAll(age<teacher.age) }

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

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

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

如果要描述场景中的特定情况,则不应使用 OCL 约束。在 olde UML 1.4.x 中,有 object diagram。它允许在给定的时间点绘制特定的实例并记录它们的特定值。在这样的图表中,您将有一个矩形用于 Smith 老师,而 4 个矩形用于该组的每个 student。

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

【讨论】:

  • (UML 对象图只是受限制的内容/样式的 UML 类图。它们广泛用于模型转换领域,其中对象图非常适合可视化左侧模式匹配和右侧模式创建。请参阅 TGG 或 UMLX。)
  • @EdWillink 感谢您的解释。不得不承认,当对具体案例有疑问时,我会时不时地在白板上继续使用它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多