Ограничение ассоциации «один ко многим» в ocl

Я новичок в ocl, и я застрял в проблеме. Я построил диаграмму классов UML для школы и хочу создать ассоциацию, которая связывает одного учителя из класса Teachers со многими учениками из класса Students.

Моя проблема заключается не в создании ассоциации, а в создании ограничения, которое гарантирует, что один учитель свяжется с определенным числом учеников с их именами, скажем, например, учитель Смит будет учить группу учеников по имени (Джон, Лили, Сами, Диана ), эти имена уже есть в классе учащихся с другими именами учащихся.


person NewProg    schedule 07.03.2020    source источник
comment
Извините, я не понимаю.   -  person qwerty_so    schedule 07.03.2020
comment
То же. Секрет написания ограничения OCL заключается в транслитерации ясного английского описания. Ваше изложение далеко не ясно.   -  person Ed Willink    schedule 07.03.2020
comment
Попробуйте выполнить одно из следующих действий: У каждого учителя есть ... или У каждого ученика .....   -  person Ed Willink    schedule 08.03.2020


Ответы (1)


Ограничения в диаграмме классов предназначены для выражения общих утверждений о классе и его экземплярах. Таким образом, ограничение должно быть действительным для всех возможных экземпляров ассоциации, а не только для одного конкретного экземпляра.

Например, некоторые глупые гипотетические ограничения, которые приведены только для иллюстрации:

  • Учащиеся, посещающие курсы, старше 16 лет: { self.student.age > 16 }
  • Учитель, у которого есть класс, еще не на пенсии (учителя на пенсии возможны, но они не будут связаны со студентами: { self.teacher.retired = false }
  • Учитель должен быть старше каждого своего ученика: { self.student->forAll(age<teacher.age) }

Если бы вы определили очень конкретное ограничение, оно должно быть верным для каждой связи между учителями и учениками:

  • { self.teacher.name='Smith' and Set { 'john', 'lily', 'sami', 'diana' }->includes(self.student.name) }

Это будет очень маленькая школа или, возможно, многие ученики и учителя имеют одно и то же имя ;-) Это не то, для чего предназначен OCL.

Если вы хотите описать конкретный случай в сценарии, вам не следует использовать ограничения OCL. В старом UML 1.4.x была диаграмма объектов. Это позволяло рисовать конкретные экземпляры и документировать их конкретное значение в данный момент времени. На такой диаграмме у вас будет один прямоугольник для учителя Смита и 4 прямоугольника для каждого ученика группы.

Судя по всему, такая диаграмма использовалась нечасто: в UML 2.5 она вообще не упоминается. Так что использовать его в принципе не следует. Но и это не запрещено. Я подозреваю, что эта форма диаграммы поможет вам больше, чем OCL, если вы хотите описать конкретный случай.

person Christophe    schedule 07.03.2020
comment
(Диаграммы объектов UML — это всего лишь диаграммы классов UML с ограниченным содержимым/стилем. Они широко используются в мире преобразования моделей, где диаграмма объектов идеально подходит для визуализации сопоставления левостороннего шаблона и создания правостороннего шаблона. См. TGG или UMLX.) - person Ed Willink; 08.03.2020
comment
@EdWillink Спасибо за это объяснение. Должен признаться, что продолжаю время от времени использовать их на доске, когда возникают сомнения по поводу конкретных случаев. - person Christophe; 08.03.2020