Соотношение множественности для диаграммы UML
Итак, у меня есть этот вопрос, который я застрял в течение некоторого времени. Я должен нарисовать отношения, основанные на некоторых бизнес-правилах, а также на множителях. Вопрос в следующем:
В фильме одна звезда, две коллеги или более 10 человек, которые смотрят вместе. Звезда должна быть хотя бы в одном фильме.
Я получил эти отношения до сих пор,
Кино ----------------------------1..* Звезда
Какой должна быть множественность отношений между фильмом и звездой? Я знаю, что это что-то вроде 1..2 или 11..*
Могу ли я объединить эти 2, чтобы получить кратность 1..2..11..*?
Помощь будет оценена.
Спасибо!
1 ответ
Выдержка из формальной спецификации UML:
"Множественность - это определение включающего интервала неотрицательных целых чисел, начинающегося с нижней границы и заканчивающегося (возможно, бесконечной) верхней границей".
Таким образом, вы можете иметь только один непрерывный сегмент как кратность.
В вашем случае я бы использовал 0.. * на обоих концах и указывал бы эти специальные ограничения отдельно. Вы можете указать их более или менее формально. Некоторые идеи:
- формальный способ: использование предварительных условий, постусловий и инвариантов, в конечном итоге в OCL (пожалуйста, Google эти условия, если хотите)
- неформальный способ: использование простых текстовых заметок или описаний классов / методов.
Эта логика может быть далее реализована в методе Movie, таком как addStars(Star[]), для его централизации. Однако есть много правильных решений.
Может быть, вы заметили, что я рекомендовал 0.. * вместо 1.. *. Это всего лишь предложение, которое приведет к гораздо более гибкому решению. Нижняя граница 1 слишком ограничительна и должна использоваться только тогда, когда это действительно необходимо (например, родитель-ребенок может быть рожден, ребенок не может родиться без родителя). Его значение 1 на конце звезды будет означать, что по крайней мере 1 звезда должна быть связана с фильмом в процессе его создания! Я нахожу это довольно уродливым. Что если в системе еще не создано ни одной звезды?
Что, если фильм создается в виде списка желаний, или состав во время создания просто неизвестен? Что если в фильме просто нет звезд?:)
Оставив обе границы на 0, вы можете создавать фильмы и запускать независимо друг от друга. Вы всегда можете связать их позже, делая вашу систему намного более гибкой и удобной.