集合大小的 ocl 约束
ocl constraint on collection size
draw of my situation
在link上面,我们可以看到classStudent
和Class
。我想做一个不变的约束来确保 Student
每个 sessionYear
不能注册超过 5 classes。
有了这个约束,我可以确定 Student
是否大于 5 classes
context Student
inv maxClassStudent: classTaken->collect(sessionYear)->size() < 6
但是,我想要的是找到仅由相同 sessionYear
形成的集合的大小。换句话说,我希望为每个不同的 sessionYear
制作一个集合,以验证那一年 Student
是否少于 6 个 class。
我想我也许可以利用 forAll(c1,c2|c1<>c2 implies c1.sessionYear <> c2.sessionYear)
或基于 sessionYear
的差异 Class
类似的东西,但我似乎无法弄清楚。
难题通常可以通过分解成更小的部分来解决...
let sessionYears = classTaken->collect(sessionYear)->asSet()
在 sessionYears->forAll(sy | classTaken->select(sessionYear = sy)->size() < 6)
draw of my situation
在link上面,我们可以看到classStudent
和Class
。我想做一个不变的约束来确保 Student
每个 sessionYear
不能注册超过 5 classes。
有了这个约束,我可以确定 Student
是否大于 5 classes
context Student
inv maxClassStudent: classTaken->collect(sessionYear)->size() < 6
但是,我想要的是找到仅由相同 sessionYear
形成的集合的大小。换句话说,我希望为每个不同的 sessionYear
制作一个集合,以验证那一年 Student
是否少于 6 个 class。
我想我也许可以利用 forAll(c1,c2|c1<>c2 implies c1.sessionYear <> c2.sessionYear)
或基于 sessionYear
的差异 Class
类似的东西,但我似乎无法弄清楚。
难题通常可以通过分解成更小的部分来解决...
let sessionYears = classTaken->collect(sessionYear)->asSet() 在 sessionYears->forAll(sy | classTaken->select(sessionYear = sy)->size() < 6)