2

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

模型的更新版本。

在此处输入图像描述

4

1 回答 1

4

感谢@GerdWagner 指出我犯的明显错误(并且已经修复)。

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

  1. 贸易继承所有父母。所以它同时是 Future、Spot、Traded 和 Ordered。这没什么意义。

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

    (9.7.3) 如果 isDisjoint 为真,则任何特定分类器的实例都不可能是任何其他特定分类器的实例。

  3. 交易类型是一种力量类型;子类化它就像使 Dog 类成为 Species 的子类(感谢@GerdWagner)

  4. 交易阶段可以(我假设)在运行期间发生变化。但是你不能交换父类。如果您的 Trade 是不可变的,这将是可以的,并且从 Ordered 到 Traded 将创建一个新的 Trade 实例。然而,在这种情况下使用关联更为常见。

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

a) 使用枚举

如果您关心的唯一属性是 Trade 是 future/spot/traded/... 的基本“标签”,那么您可以只使用枚举。

在此处输入图像描述

b) 使用关联和幂类型

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

在此处输入图像描述

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

当然,根据情况,您可以组合所有方法。

于 2018-02-06T21:42:12.433 回答