ocl ограничение на размер коллекции - PullRequest
0 голосов
/ 11 ноября 2018

розыгрыш моей ситуации
По ссылке выше мы видим классы 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, но я не могу понять это.

1 Ответ

0 голосов
/ 11 ноября 2018

Трудные проблемы часто разрешимы, разбивая их на более мелкие кусочки ...

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

...