首页 > 解决方案 > ocl 对集合大小的约束

问题描述

绘制我的情况
在上面的链接中,我们可以看到类StudentClass. 我想做出一个不变的约束,以确保Student每个类不能注册超过 5 个sessionYear

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

context Student
inv maxClassStudent: classTaken->collect(sessionYear)->size() < 6

但是,我想要的是找到仅使用相同的集合形成的集合的大小sessionYear。换句话说,我希望为每个不同的人收集一个集合,sessionYear以验证那一年的Student课程是否少于 6 个。

我认为我可以利用或基于它forAll(c1,c2|c1<>c2 implies c1.sessionYear <> c2.sessionYear)的差异,但我似乎无法弄清楚。ClasssessionYear

标签: constraintsocl

解决方案


难题通常可以通过将它们分解成更小的部分来解决......

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


推荐阅读