UML中对象实例的所属类是否支持在创建后发生变更?
简而言之
主流的基于类的面向对象语言不允许对象创建后变更所属类。我基于UML 2.5规范中的以下条款,默认UML也存在同样约束:
7.5.1:类型和多重性用于声明包含值的元素,以此约束可包含的值的类型与数量。
9.2.3.2:分类器的实例同时也是其所有泛化的(间接)实例。
但在某相关回答的评论区中,多位资深UML专家对这一假设提出了质疑。因此我想询问:UML中的实例是否支持变更所属类?UML规范中有哪些条款允许此类变更?
补充论据
我暂未在UML规范中找到关于实例与类关系的更明确条款,我理解以下内容可作为类固定的佐证:
11.4.3.1:……主动对象是这样一类对象:它在被创建后就立即开始执行其分类器行为,直到完整行为执行完毕,或是对象被其他外部对象终止,行为才会停止。
(该条款针对主动对象。但若对象创建后可变更所属类,它要么不再是主动对象,要么在归属新类后仍沿用旧行为,逻辑上并不合理)
此外若实例所属类可动态变更,多条规范条款都会出现歧义。例如6.5.1条款内容:
类可以包含不变量条件,这些条件在操作执行前后都必须成立,但在操作方法的执行过程中允许被违反。
若类实例执行操作期间不变量不再成立,会发生什么?该实例会丧失所属类的实例资格吗?它可能成为不归属于任何类的实例吗?
属性的语义规定,当带有默认值的属性被实例化时,如果没有为该属性设置特定值,就会对默认值求值,作为该属性的初始值。
若实例不再归属某个带默认值的类,它会自动获取新归属类的属性默认值吗?若一个实例可同时匹配两个相似类,它会同时获取两个类的默认值吗?
内容的提问来源于stack exchange,提问作者Christophe
相关产品推荐
相关产品推荐

