Множественность ассоциаций UML
У меня вопрос об ассоциациях, а точнее, мне интересно о множественности, я их понимаю, но, например, если бы я:
--------- ---------
| |1 * | |
|CLASS |----------| STUDENT |
| | | |
--------- ---------
что означает, что в ЛЮБОЙ точке во время существования системы должно быть не менее 1 ученика, назначенного классу, или эти множественности должны быть истинными, если система работает нормально.
Я задаю этот вопрос, потому что мне было интересно о момент создания объекта. Сначала мы создаем пустой класс, а затем заполняем его учениками. В течение некоторого времени класс пуст, но только во время создания и заполнения, тогда у него есть хотя бы один ученик. Потому что, если бы я изменил 1 на 0..1, он предположил бы, что может быть пустой класс, это не ложь (этот момент заполнения), но позже я не хочу разрешать классы без студентов.
EDIT: изменилось 0.. * до 0..1, должно быть, как сейчас, извините за путаницу.
Ответы
Ответ 1
что означает, что в ЛЮБОЙ точке во время существования системы должно быть не менее 1 ученика, назначенного классу, или эти множественности должны быть истинными, если система работает нормально.
Это хороший вопрос. Это означает, что, когда система находится в стабильном состоянии, каждый ученик ДОЛЖЕН быть связан только с одним классом. Это, в свою очередь, вызывает другой вопрос: что представляет собой "стабильное государство"? UML вообще не формализует это. Интуитивно, это означает, что нет активной активности, которая активно меняет состояние. Некоторые профили UML создают более жесткую настройку. Например, исполняемый UML говорит, что система может нарушать ограничения мощности, пока выполняется действие состояния. Однако, когда действие состояния завершается, оно должно оставить систему в правильном состоянии, т.е. Где все ограничения мощности выполнены.
Базы данных обеспечивают хорошую аналогию здесь. Ограничения DB (например, не нулевые и внешние ключи) должны иметь значение true, когда система стабильна. Во время выполнения транзакции ограничения могут быть временно нарушены. Однако, когда транзакция завершается, она должна оставить db в допустимом состоянии.
Итак, для вашего примера, как показано:
- Это справедливо для того, чтобы класс существовал без студентов, когда система стабильна (
*
говорит 0 или более - поэтому у класса не должно быть никаких учеников)
- Нельзя, чтобы студент существовал без присвоения класса, когда система стабильна ( "1" означает ровно один). Таким образом, независимо от того, что создает транзакция, Студент также должен ассоциировать ученика с классом.
НТН.
Ответ 2
что означает, что в ЛЮБОЙ точке во время существования системы должно быть не менее 1 студент, назначенный классу
Это означает, что для нескольких студентов назначается ровно один класс.
Каждый конец ассоциации имеет границу верхней границы множественности и меньшую границу множественности, но большинство редакторов UML будут показывать только одно значение, если верхняя и нижняя границы одинаковы. Если вы хотите разрешить (ноль или один) для многих, вы можете записать его так:
0..1 *
-----------
То, что вы действительно хотите здесь, это отношения "многие ко многим"... студенты могут быть во многих классах, а классы могут содержать много студентов.
Ответ 3
Нет, * означает, что в любой момент не должно быть хотя бы одного ученика в каждом классе. Но в другом направлении, смотря от ученика к классу, множественность означает, что любой студент имеет ровно один класс.
По соображениям моделирования вам может понадобиться изменить значение 1 на *, но это зависит от вашего контекста.