0

我是 Rational Software Architect 8 和 OCL 的新手。我定义了一个包含两个原型的配置文件,一个应用于类,另一个应用于关联。更多细节请参见图。

替代文字

现在,我想使用 OCL 表达一个约束:如果一个类具有 <> 构造型,那么我希望连接到该类的所有关联都具有RPAssignment 构造型。值得注意的是,使用Permission 构造型的类将没有属性或操作。

我创建了一个小示例来测试我的 OCL 约束。这是由 RSA 生成的图表以及相应 xmi 文件的相关位。

模型

    <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 -stereotyped 类(和一些变体)上尝试了以下约束,但它似乎无法正常工作。您可能已经注意到,在我创建的示例中,关联没有所需的构造型,因此验证应该失败。然而,它成功了。

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

我在这里错过了一些微不足道的事情吗?

4

2 回答 2

0

您引用了不是合法的原型名称的 <> 原型。为了合法名称,我将使用 XXX。

像下面这样的东西可能在 Papyrus 中起作用。然而,它依赖于我对 UML 规范中关于原型导航的非常有限的提示的推断。从这个意义上说,OCL 规范根本没有提到刻板印象。

上下文 XXX inv:base_Class.allAttributes()->forAll(association <> null 暗示 association.extension_RPAssignment->notEmpty())

NB 关联对于简单的属性是 null 并且导航 null 将导致无效的评估。

如果您的 extension_RPAssignment 最多为 1,则可以使用 <> null 而不是 ->notEmpty()。

于 2018-11-22T16:06:02.200 回答
-1

您不能添加约束以创建构造型。您只能手动创建关联的刻板印象。约束应该用于另一个上下文,而不是用于创建原型。这是我参加这次讨论的一分钱。

于 2010-12-17T17:26:15.520 回答