多重泛化和泛化集

Multiple generalisation and generalisation sets

我正在尝试对证券交易所数据建模,但不确定如何对这种情况建模:我在证券交易所有两种交易类型(现货和期货),并且有订单和交易。所以我可以用 isDisjoint 泛化集做 2 种类型的交易,用 isDisjoint 泛化集做 Trade Stage class,然后我可以用上面所有的多重继承来建模 Trade。但我直觉上不喜欢这个结果。是否有可能以更好的方式对上述所有内容进行建模?

模型的更新版本。

感谢@GerdWagner 指出我犯过的明显错误(此后已改正)。

您的层次结构存在几个问题:

  1. 商承天下。所以它同时是 Future、Spot、Traded 和 Ordered。这没什么意义。

  2. {disjoint} 应用于两个层次结构,但在您的 Trade 中您继承了所有层次结构,因此实际上 Trade 违反了泛化集的 isDisjoint 属性。

    (9.7.3) if isDisjoint is true, then no instance of any of the specific Classifiers may also be an instance of any other of the specific Classifiers.

  3. 交易类型为powertype; subclassing 就像使 class 狗成为 Species 的子class(感谢@GerdWagner)

  4. 交易阶段(我假设)可以在运行时改变。但是你不能交换父 classes。如果您的 Trade 是不可变的,并且从 Ordered 到 Traded 会创建一个新的 Trade 实例,这就没问题了。然而,在这种情况下使用关联更为常见。

这可以通过多种方式解决。

a) 使用枚举

如果您唯一关心的 属性 是一个基本的 "label",贸易是 future/spot/traded/...,那么您可以只使用枚举。

b) 使用关联和权力类型

但在许多情况下,您实际上拥有与类型关联的其他信息,例如订购时间、交易时间、不同价格等。在这种情况下,您可以通过关联附加信息,或通过反向层次结构。

请注意,贸易层次结构已完全颠倒。未来贸易现在是一种贸易,而不是贸易是一种未来贸易。

当然也可以根据情况综合使用所有方法。