Как представить Java -значение атрибута в UML? - PullRequest
3 голосов
/ 01 марта 2020

Здравствуйте, я новичок в UML, поэтому я застрял.

Вот код:

private ArrayList<Blocks> blocks = new ArrayList<Blocks>();

Так что я искал способы правильно разместить этот код в UML, но Я не могу этого понять. Итак, вот некоторые вещи, которые я попробовал, но я не знаю, правильно ли

Здесь графические варианты c: enter image description here image

Так что же правильно и есть ли лучший способ сделать это?

Ответы [ 2 ]

3 голосов
/ 01 марта 2020

В каком-то смысле все правильно в диаграмме UML, при условии, что люди (или инструменты), которые читают диаграмму, понимают, что вы имеете в виду.

В другом смысле более привычно / целесообразно использовать UML синтаксис. UML - это язык дизайна, а не язык программирования. Если вы пытаетесь использовать синтаксис языка программирования (т.е. Java) для типов, объявлений и т. Д. c в диаграмме UML, вы (вероятно) упускаете точку UML. (UML-инструмент, вероятно, будет возражать против вас, используя синтаксис Java, но это зависит от того, насколько тесно / глубоко он реализует формальный синтаксис и метамодель UML.)

В этом случае, я думаю, наиболее подходящий способ записать это будет:

  - block : Block[]

или

  - block : Block[1..*]

Тот факт, что вы хотите использовать ArrayList<Block> для реализации многозначного значения, является деталью реализации. Это не относится к диаграмме UML. (На мой взгляд.)

Но есть (возможная) третья альтернатива. Добавьте Block к вашей UML-диаграмме в качестве класса и смоделируйте связь, используя ассоциацию.

2 голосов
/ 01 марта 2020

Диаграммы классов UML могут использоваться как для создания

  1. языка программирования c моделей проектирования и
  2. языка программирования c модели реализации .

В модели проектирования вы бы определили blocks как многозначное ссылочное свойство ссылка на набор / список экземпляров класса Block (то есть Block будет диапазоном свойства blocks), или, что эквивалентно, в качестве имени нефункционального конца ассоциации ассоциации между Class и Block, как в

blocks: Block[0..*] 

Такое эталонное свойство может быть реализовано на любом языке OOP в соответствии с доступными идиомами. Например, в Java его можно реализовать как Set - или List -значное свойство.

В модели реализации OO , например Java модель класса сущности или C# модель класса , вы можете использовать любой подходящий встроенный класс коллекции шаблонов, такой как Set<Block> или List<Block>, как диапазон свойства blocks:

blocks: Set<Block>

Обратите внимание, что обычно в модели класса Java вы не используете ArrayList<Block> в качестве диапазона свойства blocks, а скорее List<Block>, чтобы не исключать преждевременного исключения возможности реализации свойства с LinkedList<Block>.

...