0%

面向对象中:组成和组合的关系

2018年10月24日 下午3:18

2019年3月28日 下午2:20
背会一个例子就理解了

2018年10月24日 下午2:05
面向对象语言中的HAS-A,IS-A术语 - 码客
这是面向对象的编程和UML术语,而不是特定于Java的。

第一种例子解释方式:房子

实际上有三种情况你应该注意:

  1. House房子是建筑物(继承);
  2. A House有一个房间(组成);
  3. A House有一个占用者(聚合)。
    (2)和(3)之间的区别是微妙但重要的区分。它们一起是结社的形式。

有什么不同?

  1. 组合,意味着 子对象不能在父级的上下文之外生活 (破坏房屋和房间消失),
  2. 聚合,意味着 子元素可以独立存在 (破坏房屋并且占用者去其他地方)。

第二种例子解释方式:车

  1. 名字字几乎意味着所有。
  2. 可以将IS-A类视为对继承其所有属性的另一个类的实例的专用引用。
    1. 如果存在名为Vehicle的类。然后任何类型的车辆都可以继承这个超类的属性。
    2. 例如,警车将继承车辆的所有属性,因为它是后者的专业化。
  3. 另一方面,HAS-A类具有对另一个类的引用或另一个类的实例。
    1. 换句话说,它与另一个类共享一个关联。
    2. 有两种类型的HAS-A类,
      1. 聚合,意味着该类可以独立存在
      2. 组合,意味着该类只能与它共享一个关联的一侧存在。
    3. 重要的是要知道何时将对象分类为组合类或简单地将其分类为另一个类的属性。
    4. 再次使用Vehicle类,Driver类将被视为聚合,因为即使Vehicle类不再存在,Driver类也可以作为独立实体存在。
    5. 如果Vehicle类不存在则Engine类不存在,因为Engine不能存在于Vehicle范围之外。Engine类视为组合