多个泛化和泛化集

时间:2018-02-06 20:36:40

标签: uml generalization

我试图对证券交易所数据进行建模,并对如何模拟情况存在疑问:我在证券交易所(现货和未来)有2种交易,并有订单和交易。因此,我可以使用isDisjoint泛化集进行两种类型的交易,使用isDisjoint泛化集进行Trade Stage类,然后我可以使用上述所有的多重继承对Trade进行建模。但我直觉地不喜欢这个结果。是否有可能以更好的方式对上述所有内容进行建模? enter image description here

更新了该模型的版本。

enter image description here

1 个答案:

答案 0 :(得分:3)

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

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

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

  2. {disjoint}适用于这两个层次结构,但在您的交易中,您继承了所有这些层次结构,因此Trade有效地违反了泛化集的isDisjoint属性。

      

    (9.7.3)如果isDisjoint为true,则没有任何具体的实例   分类器也可以是任何其他特定分类器的实例。

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

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

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

    a)使用枚举

    如果您关心的唯一属性是基本"标签"贸易是未来/现货/交易/ ......,那么你可以使用枚举。

    enter image description here

    b)使用关联和动力类型

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

    enter image description here

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

    当然,根据具体情况,您可以将所有方法结合起来。

相关问题