Ограничение OCL для профиля UML в Rational Software Architect 8 - PullRequest
0 голосов
/ 17 декабря 2010

Я новичок в Rational Software Architect 8 и OCL.Я определил профиль, который состоит из двух стереотипов, один применяется к классу, а другой применяется к ассоциации.См. Рисунок для более подробной информации.

alt text

Теперь я хотел бы выразить ограничение, используя OCL: если у класса есть стереотип <>, тогда я хочу, чтобы все ассоциацииподключен к этому классу, чтобы иметь стереотип RPAssignment .Стоит отметить, что классы со стереотипом Permission не будут иметь атрибутов или операций.

Я создал небольшой пример для проверки моего ограничения OCL.Вот диаграмма, а также соответствующие биты соответствующего файла xmi, созданного RSA.

model

    <packageImport xmi:id="_dNGWEwhgEeCzvt5Jj9Wjpg">

  <importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/>

</packageImport>

<packagedElement xmi:type="uml:Class" xmi:id="_sUoV4AhgEeCzvt5Jj9Wjpg" name="ProfileClass"/>

<packagedElement xmi:type="uml:Class" xmi:id="_LkpUwAkoEeCs_vLJf1t9eg" name="Perm1">

  <ownedAttribute xmi:id="_PjkJ8Qk_EeCD2J3jYOsnVw" name="clas" visibility="private" type="_OWO0IAk_EeCD2J3jYOsnVw" association="_PjbAAAk_EeCD2J3jYOsnVw">

    <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_PjkJ8wk_EeCD2J3jYOsnVw" value="1"/>

    <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_PjkJ8gk_EeCD2J3jYOsnVw" value="1"/>

  </ownedAttribute>

</packagedElement>

<packagedElement xmi:type="uml:Class" xmi:id="_OWO0IAk_EeCD2J3jYOsnVw" name="class1">

  <ownedAttribute xmi:id="_PjbAAQk_EeCD2J3jYOsnVw" name="perm1" visibility="private" type="_LkpUwAkoEeCs_vLJf1t9eg" association="_PjbAAAk_EeCD2J3jYOsnVw">

    <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_PjkJ8Ak_EeCD2J3jYOsnVw" value="1"/>

    <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_PjbAAgk_EeCD2J3jYOsnVw" value="1"/>

  </ownedAttribute>

</packagedElement>

<packagedElement xmi:type="uml:Association" xmi:id="_PjbAAAk_EeCD2J3jYOsnVw" name="gets" memberEnd="_PjbAAQk_EeCD2J3jYOsnVw _PjkJ8Qk_EeCD2J3jYOsnVw"/>

Мне кажется, что конец ассоциации, когдаон помечен как судоходный, является свойством, как атрибут.Я пробовал следующее ограничение на классы со стереотипами Permission (и несколько вариантов), но, похоже, оно работает неправильно.Вы могли заметить, что в примере, который я создал, ассоциация не имеет требуемого стереотипа, и поэтому проверка должна завершиться неудачей.Однако, это успешно.

self.base_Class.getAllAttributes()->forAll(att:Property | att.association.getAppliedStereotype('testProfile::RPAssignment') <> null)

Я что-то упускаю здесь тривиально?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Вы ссылаетесь на стереотип <>, который не является допустимым именем стереотипа. Я буду использовать XXX ради законного имени.

Что-то вроде следующего может работать в папирусе. Однако он опирается на мою экстраполяцию очень ограниченных подсказок относительно стереотипной навигации в спецификации UML. Спецификация OCL вообще не упоминает стереотип в этом смысле.

контекст XXX inv: base_Class.allAttributes () -> forAll (ассоциация <> null подразумевает association.extension_RPAssignment-> notEmpty ())

NB-связь для простых атрибутов равна нулю, а переход на ноль приведет к неверной оценке.

Если ваш extension_RPAssignment не более одного, вы можете использовать <> null вместо -> notEmpty ().

0 голосов
/ 17 декабря 2010

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

...