对集合大小的OCL约束

时间:2018-11-11 07:47:58

标签: constraints ocl

draw of my situation
在上面的链接中,我们可以看到类StudentClass。我想做一个不变的约束,以确保每个Student的{​​{1}}不能注册超过5个类。

有了这个约束,我可以确定sessionYear是否超过5个类

Student

但是,我想要的是找到仅由相同的context Student inv maxClassStudent: classTaken->collect(sessionYear)->size() < 6 组成的集合的大小。换句话说,我希望为每个不同的sessionYear进行一次收集,以验证sessionYear在该年中是否少于6个班级。

我认为我可能可以使用Student或类似基于其forAll(c1,c2|c1<>c2 implies c1.sessionYear <> c2.sessionYear)的差异Class的东西,但我似乎无法弄清楚。

1 个答案:

答案 0 :(得分:0)

硬问题通常可以通过将它们分解成小块来解决...

let sessionYears = classTaken-> collect(sessionYear)-> asSet() 在sessionYears-> forAll(sy | classTaken-> select(sessionYear = sy)-> size()<6)