OO面向对象系统中功能复用,常见的两种技术是类继承与对象组合composition。
通过类继承的复用通常可视其为白盒复用(while-box reuse),即在继承方式中,父类的内部细节对子类可见;
对象组合这种复用被称为黑盒复用(black-box resue),即对象的内部细节不可见,对象只能以“黑箱”形式出现。
类继承是在编译时刻静态定义的,可以直接使用。类继承的不足之处,白盒复用,导致子类揭示了父类的实现细节,也被认为“破坏了封装性”。子类中的实现与父类有如此紧密的关系,以致与父类实现中的任何变化必然会导致子类发生变化。
对象组合的优势,有助于保持每个类被封装。这样类和类的继承层次会保持比较小的规模,不大可能增长为一个庞然大雾。另一方面,基于对象组合的设计会有更多的对戏那个(而有更少的类),而且系统的行为将依赖于对象间的关系而不是被定义在某个类中。
=======》
面向对象的设计原则:
优先使用对象组合,而不是类继承。
利用组合建立的系统具有很大的弹性,不仅可以将算法族封装成类,更可以“在运行时动态的改变行为”,只要组合的行为对象符合正确的接口标准即可。