constraints - ocl 对集合大小的约束
问题描述
绘制我的情况
在上面的链接中,我们可以看到类Student
和Class
. 我想做出一个不变的约束,以确保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)
的差异,但我似乎无法弄清楚。Class
sessionYear
解决方案
难题通常可以通过将它们分解成更小的部分来解决......
让 sessionYears = classTaken->collect(sessionYear)->asSet() in sessionYears->forAll(sy | classTaken->select(sessionYear = sy)->size() < 6)