在 UML 2.5.1 规范的第 180 页,第 9.9.7.4 节“属性”下的
Generalization
,如果可以返回 null 布尔值,则布尔返回值的默认值对我来说没有任何意义。描述如下:
isSubstitutable : Boolean [0..1] = true
Indicates whether the specific Classifier can be used wherever the general Classifier can be used. If true, the
execution traces of the specific Classifier shall be a superset of the execution traces of the general Classifier. If
false, there is no such constraint on execution traces. If unset, the modeler has not stated whether there is such
a constraint or not.
如果没有给出其他值,则应使用默认值;但是,如果返回空布尔值,则已经是这种情况,表明 “建模者尚未指定是否存在这样的约束。” 如果返回默认值,查询此属性的客户端将永远不会看到空布尔值因此无法确定建模者的意图或缺乏意图,那么为什么需要额外的默认值呢?
我认为这个属性的声明应该要么没有任何默认值,要么具有多重性
1..1
和一些默认值......true
在这里是否比false
更有意义也是有争议的。如果由我决定,我会完全放弃默认值,并将多重性设置为1..1
。
如果有人可以向我解释一下就好了?
关于默认值:
我认为
true
是一个很好的默认值,考虑到泛化的概念。通常,如果 X 的实例在某种算法中发挥作用,那么 Y 的实例(其中 X 是 Y 的泛化)也可以在该算法中发挥作用。例如,如果我有一个销售自行车的网店,其中 Bicycle 是 MountainBike、TouringBike 等的概括,那么 Bicycle 的销售流程也适用于 MountainBike 和 TouringBike。
关于多重性:
我认为
[0..1]
是一个很好的重数。 true表示可替代,false表示不可替代,unset表示不保证可替代性。如果多重性是 [1..1],建模者将无法选择指示后者。例如,建模者可能没有足够的信息来决定为自行车提供的所有功能是否也适用于新推出的超级自行车。