You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UML 2.5.1中Classifier::inheritedMember()的OCL关键字self指代疑问

UML 2.5.1规范定义(第176页)
分类器(9.9.4.7节“操作”):

• inheritedMember() : 命名元素 [0..*]
inheritedMember关联是通过继承父类的可继承成员推导而来的。

body: inherit(parents()->collect(inheritableMembers(self))->asSet())
                                                    ^^^^
问题

请问OCL关键字self是指代parents()集合中的元素,还是定义inheritedMember()操作的分类器?根据文本描述,我认为它应该是parents()集合中的元素,但对此并不确定,另一种选项在我看来并不合理。

解答

self在这里指代的是定义inheritedMember()操作的分类器实例,而非parents()集合中的元素。

原因如下:

  1. 按OCL基础语义,在类操作的body表达式里,self默认指向执行该操作的当前对象实例,也就是拥有这个inheritedMember()操作的分类器本身。
  2. 结合规范逻辑:inheritedMember是当前分类器从父类继承的成员,parents()->collect(inheritableMembers(self))的意思是遍历当前分类器的所有父类,收集每个父类中对当前分类器(self)而言可被继承的成员——父类成员能否被子类继承,需要基于子类上下文判断,这里的self就是要继承成员的子类(定义该操作的分类器)。

你之前的理解有误,看似不合理的选项才是正确的。

内容的提问来源于stack exchange,提问作者Robert Hairgrove

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:53:18