首页 > 解决方案 > 组合与继承

问题描述

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

标签: oopinheritanceumlcompositionclass-diagram

解决方案


组合优于继承

在 OO 设计中,一个常见的建议是更喜欢组合而不是继承。这可能会误导人们认为这两个不同的概念之间存在关系:

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

更容易产生误导:一般 OO 文献中使用的“组合”通常对应于简单的 UML 关联,不应理解为与 UML“组合”一样具有限制性。

继承是关于泛化和专业化

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

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

天真的示例(仅用于说明):

在此处输入图像描述

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

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

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

警告:UML 组合是关于独占所有权。在 OO 文献中,术语“组合”通常是指没有任何所有权甚至排他性的较弱关联。

天真的示例(仅用于说明):

在此处输入图像描述


推荐阅读