Papyrus UML: добавление типа к свойству с помощью профиля (расширение метамодели)

Я определяю профиль, используя Papyrus UML в Eclipse. Я расширил метаклассы «Класс» и «Свойство» несколькими классами стереотипов. Я правильно вижу новые Стереотипы в моей реальной модели. Я хочу сделать то же самое, определив свои собственные типы в своем профиле, чтобы использовать их для свойств внутри классов в моей модели.

Пример: я хочу иметь свойство в классе с типом HashMap, которое не определено внутри базового типа Java. Я могу определить класс <<Primitive Type>> в своем профиле, назвав его «HashMap», но мне не ясно, какой метакласс UML мне нужно расширить.

Пожалуйста, предоставьте мне пошаговый пример определения профиля, если у вас есть время. Большое спасибо!


person Simone Pulcini    schedule 28.02.2015    source источник


Ответы (1)


Вам не нужно расширять существующий метакласс UML для создания нового типа. В метамодели UML определено, что атрибут (Property) связан с Type ссылкой type. Type, который можно прикрепить к свойству, может быть Inteface/Class/PrimitiveType... экземпляром. На самом деле, часть базовых типов UML — это всего лишь PrimitiveType экземпляры, определенные в другой модели, которая импортируется (ищите packageImport в своей модели UML XMI).

Когда вы устанавливаете тип Property на Integer, вы устанавливаете тип своего экземпляра Property на экземпляр PrimitiveType с именем Integer. Итак, если вам нужен тип HashMap, вам просто нужно создать экземпляр PrimitiveType с именем HashMap (как вы сделали), и все.

Однако, поскольку вы «привязываете» свою модель к Java, я подозреваю, что вы, вероятно, захотите моделировать общие типы (например, HashMap<String, Integer>). Для этого вам придется обрабатывать шаблоны UML.

http://www.uml-diagrams.org/template.html

В этом случае вам нужно будет создать шаблон Class с двумя формальными параметрами с именем HashMap и связать его, чтобы создать связанный тип. Затем вы сможете использовать связанный тип в качестве типа для экземпляра Property (также нет необходимости в расширении метамодели UML).

Примечание. PrimitiveType — это метакласс UML. Вы можете расширить его, используя стереотип (скажем, A здесь), чтобы создать более совершенный метакласс PrimitiveType. Если вы сделаете это, в вашей UML-модели вы сможете создать экземпляры A, но не сможете использовать A в качестве типа Property. Единственными объектами, которые вы сможете использовать, будут созданные экземпляры A.

person Vincent Aranega    schedule 28.02.2015