UML类attribute与property的不同表示法及UML2.5.1规范疑问
基础概念澄清
先把两个容易混淆的UML元模型概念理清楚:
- property是UML里的广义结构化特性,它有三种合法身份:可以是分类器(classifier)的attribute,可以是关联的成员端,也可以同时具备这两种身份。
- attribute是归属在分类器下的一类特殊property,它和关联端property的边界本身就没有做绝对的硬性切割。
- 类的attribute最常用的表示法,是直接列在类矩形的属性分栏里,这也是绝大多数建模场景里大家熟悉的写法。
对9.5.4条款的准确解读
UML 2.5.1规范第9.5.4章(第114页)提到的attribute关联式表示法,不能理解为「用关联线展示attribute时必须标注聚合符号」。
条款原文的表述是「在分类器中,attribute也可使用关联表示法展示,此时仅可在箭头尾部标注aggregation adornment(空心或实心菱形)」,这里的「仅可」是对允许添加的标记范围的限定,不是强制要求:
这条规则的实际约束是:用关联线形式展示attribute时,关联线的源端(箭头尾部,对应持有该attribute的分类器一侧)唯一允许添加的特殊修饰符就是聚合菱形,不能添加其他关联端专属的、不适用于attribute的标记。带聚合菱形的写法只是这种表示法的合法形式之一,不是必须遵守的强制格式。
关于表示法混淆的疑问
这种写法不会和聚合类型的property产生语义混淆,核心原因是二者本来就不存在绝对的语义边界:
- 如果用关联线展示attribute时加了聚合菱形,本质就是在显式声明这个attribute的聚合属性:实心菱形代表组合,意味着该属性值的生命周期和持有它的分类器实例强绑定;空心菱形代表共享聚合。
- 聚合关联的成员端本身就属于property的范畴,UML元模型本来就允许一个property同时承担classifier的attribute和关联成员端两个身份,这种关联式表示法只是把property的双重身份做了直观的图形化呈现,并没有创造新的独立建模元素,自然不存在冲突混淆的问题。
关于和共享聚合语义条款的矛盾疑问
这一表示法规则和「共享聚合无明确语义」的表述完全不存在矛盾:
- 规范中提到的「共享聚合无明确语义」,指的是空心菱形代表的共享聚合,UML没有为其定义跨场景通用的严格强制语义,具体含义(比如是代表弱生命周期的部分-整体关系,还是仅代表普通引用持有)由建模团队在项目内自行统一约定。
- 9.5.4条款只是开放了在关联式attribute表示法中使用空心菱形标记的权限,并没有给共享聚合新增任何统一的强制语义,两个条款的约束范围完全不重叠,不存在逻辑矛盾。
内容的提问来源于stack exchange,提问作者Christophe
相关产品推荐
相关产品推荐

