可复用性 Reusability
可复用性是软件构造过程中一个重要的外部质量指标。对经过充分测试的程序进行复用可以利用其高可靠性、稳定性、适应性,并可降低成本以及开发时间。
1.复用层次
1.1源代码
1.1.1白盒复用
源代码可见,直接复制并进行修改。
需要对源代码内部结构、设计思路充分了解
1.1.2黑盒复用
源代码不可见,只能通过API接口使用
1.2模块:类和接口
类的复用
继承Inheritance与重写override
委托Delegation
1.3库:API
我们经常使用的JDK库Libraries、APIs及其他第三方库(如Apache)均为复用。
1.4架构: 框架framework
框架包含具体类、抽象类及它们之间的连接关系,可以运行;开发者根据规约需要,在框架预留的接口位置填充所需代码形成完整系统
同样存在白盒框架及黑盒框架两种
2.可重用性的外部表现
2.1类型可变
利用泛型来适应不同的类型
2.2实现可变
抽象数据类型ADT有多种不同的实现,但满足的规约specification (pre-condition, post-condition, invariants)相同,可以达到相同的效果
2.3功能分组
在保证完整实现具体功能的同时将不同功能分开实现,在不同需求下复用不同的功能并进行组合
个人理解:与面向对象设计原则OO Design Principles其一的 " SOLID " 原则中的单一责任原则(SRP — The Single Responsibility Principle)有相似之处
2.4表示独立性
对内部代码实现进行修改并不影响客户端,同时实现信息隐藏
2.5共性抽取
把具有相同行为的内容或对象抽象出来形成可复用实体,如父类或抽象类