可复用原因:1.降低成本和开发时间
2.经过充分的测试可靠稳定
3.标准化,在不同应用中保持一致
白盒复用:源代码可见,可修改和拓展
黑盒复用:源代码不可见,不能修改
体现在java编程:灵活的复用=委派+继承
子类型多态:客户端可用统一的方式处理不同类型对象
LSP:
子类可以增加方法,不能删
前置条件不能强化,后置条件不能弱化
不变量保持/更强
子类一定要实验抽象类中未实现的方法
子类型方法参数:逆变
(即不变或越来越抽象)
子类型返回值:协变
异常类型:协变
子类可以任意取代父类,由父类到子类spec越来越具体
设计可复用类:
1.设计和信息隐藏
2.继承和重写
3.多态、子类型多态、重载
子类若只需要复用父类小部分更倾向于委派(delegation),避免大量无用方法。
CRP:利用接口和委派编程(共性和个性混杂在一起)
白盒框架:没有委派,只有继承关系。