Я бы изменил вопрос на "Могут ли ссылки на любой класс рассматриваться как атрибуты в другом классе?" Технически ответ «да», но вы не должны моделировать это таким образом в UML. Вы должны моделировать простые значения как атрибуты (внутри прямоугольника класса), а непростые ссылки моделировать как ассоциации. Простые значения идентифицируются только их значениями (например, число 5), тогда как непростые ссылки указывают на вещи с идентичностью. В вашем случае каждый Die
должен иметь идентификатор, отличный от его текущей номинальной стоимости. Следовательно, вы не должны моделировать атрибуты типа Die
, вы должны моделировать свойство в конце ассоциации.
На опубликованной вами диаграмме есть три (!!) свойства типа Die
. Один называется die1
, один называется die2
, а третий безымянный с кратностью 2
. На языке программирования это дало бы вам четыре места для хранения ссылок на игральные кости, что явно неверно.
Я бы смоделировал это следующим образом:
Когда вы создаете код (или транскрибируете его вручную), свойство dice
становится переменной-членом в DiceGame
. Эта переменная-член обычно типизируется коллекцией в вашем языке программирования, но ее также можно смоделировать как массив. Эта коллекция или массив позволяет вам получить доступ к обоим кубикам.
Обратите внимание, что ассоциация является однонаправленной. Это потому, что Die
, вероятно, не нужен доступ к Dice Game
. (Однако, если вам нужно, чтобы каждый Die
был активным объектом, работающим в своем собственном потоке, вам может понадобиться, чтобы ассоциация была двунаправленной, чтобы каждый Die
мог отправлять сигнал, когда он закончил работу или что-то в этом роде.)
person
Jim L.
schedule
31.05.2016