组合与继承

Zio*_* TM 3 oop inheritance uml class-diagram composition

对于 UML 类图,如果一个类 A 与另一个类 B 具有组合关系,它是否像继承一样工作?我知道类A不能没有类b而存在,但是类A继承了类B的属性和方法吗?

Chr*_*phe 11

组合优于继承

在面向对象设计中,一个常见的建议是优先选择组合而不是继承。这可能会误导人们认为这两个不同概念之间存在联系:

  • 继承是关于类之间的关系。
  • 组合是关于类的对象之间的关系。

更具误导性的是:一般 OO 文献中使用的“组合”通常对应于简单的 UML 关联,并且不应被理解为像 UML“组合”那样具有限制性。

继承是关于泛化和特殊化

如果类D继承自 B,则意味着D 专门化了更一般的概念 B

  • 它具有以下所有属性和操作B(无需在图中重复),
  • B它可以具有与 、和不相关的附加属性和操作
  • 它可以执行一些B不同的操作。
  • 类的任何对象在其整个生命周期中D也是类的对象B。这就是为什么我们谈论“”关系。

简单的例子(仅用于说明):

在此输入图像描述

组合是关于非常不同类的对象的关联

如果类B“组合”(具有组合关联C,则意味着该对象可以在其生命周期内B与不同的对象关联。CAnf 类的对象C

  • 始终属于拥有B它的对象。这就是为什么我们有时会说“”关系;
  • B其拥有的对象 将无法生存。

注意:UML 组合是关于排他所有权的。在面向对象的文献中,术语“组合”通常指没有任何所有权甚至排他性的较弱关联。

简单的例子(仅用于说明):

在此输入图像描述

  • 这就是我们回到爱因斯坦的地方:尽可能简单,但不简单。可以作为长时间讨论的内容:-) (2认同)