第四章:
一、面向复用的软件构造技术
最主要的复用是在代码层面,但软件构造过程中的任何实体都可能被复用:需求、设计/规约、数据、测试用例、文档。
两种代码复用的方式:
白盒复用:源代码可见,可修改和扩展。复制已有代码到正在开发的系统,进行修改。定制化程度高。对其修改增加了软件的复杂度,且需要对其内部充分的了解。
黑盒复用:源代码不可见,不能修改。只能通过API接口来使用,无法修改代码。
Module-level reuse: class/interface
LSP:在任何父类型可一应用的场景,子类型都可以应用。
子类型多态:客户端可用统一的方式处理不同类型的对象。
协变:父类型→子类型:越来越具体specificCovariance。 返回值类型:不变或变得更具体异常的类型:也是如此。
逆变:父类型→子类型:越来越具体。参数类型:要相反的变化,要不变或越来越抽象。
委派/委托:一个对象请求另一个对象的功能。
委派模式:通过运行时动态绑定,实现对其他类中代码的动态复用。
“委托”发生在object层面,而“继承”发生在class层面。
CRP原则更倾向于使用委派而不是继承来实现复用。