【问题标题】:Class Diagrams - Attribute Inheritance类图 - 属性继承
【发布时间】:2011-05-09 17:15:55
【问题描述】:

我需要从一个类继承,我只需要继承选定的属性,这可能吗?或者如果你需要所有属性,你可以只从类继承吗?

谢谢,

克里斯。

【问题讨论】:

  • 提及编程语言和仅继承选定属性的目的会有所帮助。

标签: class model uml diagram


【解决方案1】:

听起来您正在寻找实现继承而不是接口继承。请参阅this thread 以获得解释,如果仍然不清楚原因,请在下方注明。

鉴于您只想重用选定属性的子集,您最好使用组合而不是继承。

注意

它不能是接口继承(子类型化),因为仅通过“继承”属性的子集,子类实例不能替代超类实例。例如:假设子类没有继承的超类公开属性A。在运行时,声明为超类类型的变量v 绑定到子类的实例。然后一个表达式引用v.A。完全合理的要求——但显然会失败。换句话说,你违反了接口契约。谷歌“里氏替换原则”了解更多信息。

【讨论】:

    【解决方案2】:

    这是可能的。当超类定义一个属性时,任何子类都可以重新定义该属性以具有 [0..0] 的多重性。因此,子类只能继承它需要的东西。 但是,正如@sfinnie 所说,这会破坏Liskov Substitution,所以你最好知道你在做什么!

    我手头的 UML 2.5 规范草案说:

    MultiplicityElement 可以定义两个边界都为零的多重性。这将允许的基数限制为 0;也就是说,它要求此元素的实例化不包含任何值。 [...] 它适用于(但不限于)重新定义更一般的分类器中存在的属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-06
      • 2013-04-13
      • 2015-05-08
      • 2013-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多