【问题标题】:UML modeling - How to represent a multi-way inheritance onto a class diagram?UML 建模 - 如何将多路继承表示到类图上?
【发布时间】:2016-05-09 10:04:27
【问题描述】:

如何以更优雅(和专业)的方式(使用继承?)将这种情况表示到类图上?

演员 [class] 可以是自然人 [class] 或公司 [class],但不能同时是两者。
演员可以是内部演员 [class]或外部演员 [class],但不能同时是两者。
内在演员可以是自然人或公司,但不能同时是两者。
外部参与者可以是自然人或公司,但不能同时是两者。

当然,这里所说的每个类都有其特定的属性、方法以及与图表上其他一些类的关系。

【问题讨论】:

  • 自然人(和公司)可以是演员以外的东西吗?
  • @Oliver:如果您没有找到您喜欢的答案,请离开 cmets 吗?

标签: class inheritance uml modeling class-diagram


【解决方案1】:

如果你不介意多重继承,你可以考虑这样的事情:

(为了简化图表,Inner Actor被显示了两次,它是同一个类。)

【讨论】:

  • 这个答案在这些词出现的任何地方都错过了“但不是两者”的要求。为此,您需要覆盖和不相交公理。 (即,{完整,不相交}。)
  • 是的,确实如此。每个实例都可以是自然人或公司,但不能同时是两者。每个实例都可以是外部参与者或内部参与者,但不能同时是两者。
  • 此模型允许创建不是内部或外部参与者的Company 实例。
  • 只是忘记将 Company 指定为抽象类,以及其他中间类。 Tks,已修复。
【解决方案2】:

这是一种用最少的类在 UML 中表示您想要的内容的优雅方式:

由于{complete, disjoint} 约束,此模型要求实例恰好是Physical Person 之一 Company,同时又恰好是Inner Actor 之一External Actor。底部的实例规范显示了如何实例化它。

UML 可以毫无问题地表示这一点。但是,如何将其映射到编程语言中是另一回事。 (还有另一个 SO 问题。)许多语言不支持实例的多重分类,因此您必须将方形钉锤入圆孔。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多