Class 列表属性上的OCL集合操作

Class 列表属性上的OCL集合操作,class,collections,uml,software-design,ocl,Class,Collections,Uml,Software Design,Ocl,我正在模拟一个问题,其中有学生和课程。 每门课程都有一些其他课程作为先决条件,我想对学生的“joinCourse()”操作进行OCL约束,以允许他们在完成必修课程时才加入课程 这是我制作的uml类图的草稿: 现在,我的问题是: 是否可以进行收集操作,如对列表属性进行“includeAll”操作,如完成课程 我制作了这个ocl costraint: context Student::joinCourse(c: Course) pre: self.finishedCourses->inclu

我正在模拟一个问题,其中有学生课程。 每门课程都有一些其他课程作为先决条件,我想对学生的“joinCourse()”操作进行OCL约束,以允许他们在完成必修课程时才加入课程

这是我制作的uml类图的草稿:

现在,我的问题是: 是否可以进行收集操作,如对列表属性进行“includeAll”操作,如完成课程

我制作了这个ocl costraint:

context Student::joinCourse(c: Course)
pre: self.finishedCourses->includesAll(c.requiredCourses)
对吗


谢谢,这是事先准备好的

简而言之:是的,这是正确的

正当理由 在这种情况下,多样性和集合之间存在着明确的联系:

7.5.3.2。MultiplicationElement是一个元素,可以通过某种方式实例化它来表示一组值。(……)

解释了自身与上下文的关系(第7.3.4条):

OCL表达式可以是前置条件或后置条件的一部分, 对应于的«先决条件»和«后决条件»刻板印象 与操作或其他行为特征关联的约束。 因此,上下文实例本身是拥有该上下文的类型的实例 作为特征的操作或方法

因此,在表达式中,
self
指的是
Student
,点允许访问其属性,例如self.finishedCourse指的是集合属性

OCL定义了集合类型(第11.6条)和所有集合的格式良好的一般操作(第11.7.1条):

includesAll(c2:Collection(T)):布尔值
self是否包含
c2
的所有元素
post:
result=c2->forAll(elem | self->includes(elem))

因此,
self.finishedCourses->includesAll(c.requiredCourses)
是一个有效的表达式,在您期望的情况下,它是正确的还是错误的

补充说明
属性可以表示分类器的属性或关联的成员端。您可以将
完成课程
表示为
学生
课程
之间的第二次关联的结束(需要理解的是,所修的所有课程都不一定完成)

不幸的是,您的“蓝图”(类图?)不可见,因为您的问题中提供的url需要注册。您能以另一种方式分享吗?我建议您使用一个OCL评估器,比如Eclipse OCL Interactive Xtext OCL控制台来实践您的OCL评估。