В диаграмме объектов UML, как представить отношения через списки/коллекции?

Если я моделирую диаграмму объектов UML (также известную как "диаграмма экземпляров") Year, в котором есть поле, представляющее собой список Month, должен ли я также явно создать поле для экземпляра List? Мне кажется, что если я нарисую линии, напрямую соединяющие экземпляр Year с 12 экземплярами Month, то я ожидаю увидеть 12 полей на Year, таких как month1, month2 и т. д.

Если вы связываете их напрямую, то как на диаграмме показать, что связь не прямая, а через список? Или эта диаграмма более концептуальна и точная природа этих отношений неоднозначна?

tl;dr: В диаграмме объектов UML коллекции, такие как списки, получают свои собственные блоки, через которые соединяются ваши модели? Если нет, то как это представить?


person Sled    schedule 10.10.2013    source источник


Ответы (1)


Фактически, вы должны сначала определить свою диаграмму классов. Тогда диаграмма объектов будет получена естественным образом.

Я бы представил диаграмму классов следующим образом:

diagram1

И с этой диаграммой классов то, что вы сами говорите для диаграммы объектов, правильно (рисунок линий, соединяющих экземпляр Year с экземплярами 12 Month), потому что каждая соединительная линия сама по себе является экземпляром стрелки на диаграмме классов. (в терминологии UML ссылка является экземпляром ассоциации)

diagram2

Конечно, если ваша диаграмма классов вместо этого просто выставляет атрибут months : List, ответ будет другим. Но это не кажется подходящим.

Примечание 1: вы видите на моей диаграмме классов, что нет намека на то, что это на самом деле список. Это потому, что, на мой взгляд, это просто деталь реализации. Например, это может быть и массив, но важным моментом является кратность 12, что означает, что это кратное значение.

Примечание 2: не беспокойтесь о том, что вы говорите о 12 полях в году, это не так. На диаграмме объектов значения полей представлены непосредственно в экземпляре класса, как и атрибуты на диаграмме классов.

Изменить:

Если вы хотите сделать различие абсолютно четким, вы можете назвать кончик стрелки months для каждого экземпляра месяца, тем самым заявив, что все они соответствуют одному и тому же уникальному полю месяцев. В противном случае они будут называться month1, month2, .... Точно так же вы бы назвали кончик стрелки на диаграмме классов.

person Steph    schedule 10.10.2013
comment
Ну, я не хочу указывать, что это конкретно список, а скорее то, что они находятся в коллекции, а не в отдельных полях. Это различие я считаю важным (мой реальный случай - это разрешения и роли, а не месяцы, а одинаковая структура). - person Sled; 11.10.2013
comment
Если вы хотите сделать различие абсолютно четким, вы можете назвать кончик стрелки months для каждого экземпляра месяца, тем самым заявив, что все они соответствуют одному и тому же уникальному полю months. В противном случае они будут называться month1, month2, .... Точно так же вы бы назвали кончик стрелки на диаграмме классов. - person Steph; 11.10.2013
comment
Хотите добавить это к своему ответу, и я соглашусь? (Мне нравится полный ответ без необходимости копаться в комментариях) - person Sled; 11.10.2013