面象对象设计:当处理有包容关系的类时,应该使用继承机制还是聚合机制?

一。类是一系列既有共性又有个性的对象的高度概括
     根据面象对象原理,类是对象的抽象.类是一系列既有共性又有个性的对象的高度概括.类的属性和方法代表了隶属于该类的的所
有对象的共性.类的每个对象都可以有不同的属性值,反映每个对象的个性.
  注意对象的共性和个性是相对的.
   首先必须基于需求来确定继承的粒度.如要提取的对象的某一个共性对于解决问题没有帮助或帮助很小就
没必要提取
  其次,对象的某些共性更适合于用属性而不是新的基类和派生类来表示.
  最后.利用类和对象来模拟现实世界是手段而不是目的.不能为了提取类而提取类.软件内部结构和现实世界一模一样并不
见得是件好事.最终目的是最大限度的实现代码复用,提高软件质量.

二. 多重继承
当不断提取对象的共性,形成多层的继承树时,就会遇上多重继承的问题.
多重继承有优点,但同时会带来软件的复杂度.有可能带来客户程序调用时二义性。

三。 聚合的粒度
在UML中,聚合(Aggregation)关系指的是整体和部分的之间的关系.有时聚合关系可以有效避免多重继承的麻烦,而且表示问题
也显得更为合理.同时使用聚合关系完全能够实现代码复用的目标.
  与继承关系代码相比,聚合关系中只多了一些消息转发的代码(这种用法被称为"委托").
  因为物质是无限可分性的聚合的粒度原则同继承的粒度一样:
  模拟现实世界只是手段而不是目的,最终目的是改善代码结构,提高代码的复用性.
  将聚合粒度控制在一个既能满足需求又不过分增加软件复杂性的水平上.

 个人学后有些不解之处:
      从个人的开发过程继承的使用多于聚合,事实上聚合用得非常少,在开发过程中也很少看到身边同事运用,不知大家能否给我提供一个有关聚合运用的例子进行学习,对于聚合比继承要更好的论述在不少书上看到过,但运用却看到的不多。请大家发表意见。
 来自面象对象学习书本的一些记录。

原文地址:https://www.cnblogs.com/Army/p/1127106.html