在
StructuredClassifier
第 11.8.15.5 节“关联结束”和 11.8.15.6“操作”中UML 2.5.1规范的PDF版本的275,我们看到这两项的定义:
• /role : ConnectableElement [0..*]{union, subsets Namespace::member} (opposite
A_role_structuredClassifier::structuredClassifier)
The roles that instances may play in this StructuredClassifier.
和
• allRoles() : ConnectableElement [0..*]
All features of type ConnectableElement, equivalent to all direct and inherited roles.
body: allFeatures()->select(oclIsKindOf(ConnectableElement))
->collect(oclAsType(ConnectableElement))->asSet()
/role
的预期推导是什么?它是派生的,但没有给出 OCL 实现。操作 allRoles()
返回拥有和继承的角色,但我认为 /role
不应该返回任何父级 Features
(从 allFeatures()
返回)。它确实是 member
的子集,因此可能包含一些导入的 Elements
。
这是正确的吗?或者
allRoles()
操作是否应该以某种方式实现 /role
属性的派生?
role
的推导由{union}
简单给出。
它是子集
role
的所有属性的派生联合。所以,不需要ocl。 allRoles()
只是为了方便。它用于其他约束。