我是 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)
我在这里错过了一些微不足道的事情吗?