子类型的定义?(见第17讲)
聚集
基于继承的代码复用是通过把一个类的代码包含(复制)到另一个类中来实现的。
继承不是代码复用的唯一方式,有些代码复用不宜用继承来实现(如飞机类复用发动机类)。
代码复用的另一种方式是通过聚集/聚合(aggregation)来实现,即把一个类作为另一个类的成员对象类。
- 具有继承关系的两个类之间通常属于一般与特殊的关系(is-a-kind-of)。
- 具有聚集关系的两个类之间通常属于整体与部分的关系(is-a-part-of)。
在基于对象的程序设计中,一般采用聚集来实现代码复用。
继承和聚集的比较
继承与封装存在矛盾:
- 在继承方式的代码复用中,一个类通过
protected
访问控制,向外界提供两种接口: -
public
:对象(实例)用户;public + protected
:派生类用户
- 在聚集方式的代码复用中,一个类对外只需一个接口
public
。
继承更容易实现子类型:
- 在C++中,
public
继承的派生类往往可以看成是基类的子类型。 - 在需要基类对象的地方可以用派生类对象替代;
- 发给基类对象的消息也能发给派生类对象。
而具有聚集关系的两个类不具有子类型关系。
Loading Comments By Disqus