gpt4 book ai didi

oop - 组合与继承

转载 作者:行者123 更新时间:2023-12-05 09:09:41 24 4
gpt4 key购买 nike

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

最佳答案

组合优于继承

在 OO 设计中,一个常见的建议是更喜欢 composition over inheritance .这可能会误导人们认为这两个不同概念之间存在联系:

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

更具误导性:一般 OO 文献中使用的“组合”一般对应于 simple UML association并且不应被理解为与 UML“组合”一样具有限制性。

继承是关于泛化和特化

如果类D继承自B,则意味着D specialises a more general concept B:

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

简单的例子(只是为了说明):

enter image description here

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

如果类B“组合”(有一个composition association)C,这意味着B对象可以关联不同的 C 对象在其生命周期中。 Anf 类 C 的对象:

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

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

简单的例子(只是为了说明):

enter image description here

关于oop - 组合与继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62209348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com