Моделирование уникальных отношений в диаграммах классов UML
Этот вопрос о диаграммах классов UML на этапе анализа. Я сделал минимальный пример для иллюстрации:
Билет действителен на одно место и один конкретный семинар. Место может быть назначено нескольким билетам, но только одной уникальной комбинации билет / семинар. (То же самое касается семинара и уникальной комбинации билет / место.)
Диаграмма не отражает это. Я пометил неправильные кратности красным.
Какие варианты (чем больше, тем лучше) вы знаете, чтобы правильно смоделировать требование?
3 ответа
Такая коммутативная проверка согласованности не может быть выражена ни диаграммами UML, ни отношениями сущностей. Кстати, вы также не можете выразить, что из экземпляра заявки билет пути -> место -> место проведения семинара должен вести к тому же экземпляру, что и билет -> семинар -> местоположение семинара.
Формально кратности, отмеченные красным, верны. Место видит более одного билета, только на разные семинары, и наоборот.
Поэтому единственное решение, которое я могу предложить, - включить требование в текстовую спецификацию этих отношений. Это неплохо, так как любой конечный набор графических символов может выражать только подмножество всех возможных требований.
Билет может быть ассоциативным классом между местом и семинаром. Или просто используйте OCL, чтобы выразить это ограничение
"Вы также не можете выразить, что из экземпляра заявки билет пути -> место -> место проведения семинара должен вести к тому же экземпляру, что и билет -> семинар -> местоположение семинара"
1) OCL - контекстная заявка inv: semin.seminarLocation = seat.seminarLocation
2) перетянуть Seat, Seminar и Ticket класса ассоциации между Seat и Seminar - в SeminarLocation(рисунок 13-70 http://msdl.cs.mcgill.ca/people/tfeng/docs/The%20Unified%20Modeling%20Language%20Reference%20Manual.pdf или Рисунок 14-84 http://www.utdallas.edu/~chung/Fujitsu/UML_2.0/Rumbaugh--UML_2.0_Reference_CD.pdf)