关于软件复用
在这里我们可以将其划分为两种,一种是面向复用编程,即开发出可以复用的软件,还有一种是基于复用编程,即利用已有的可复用软件搭建应用系统。
为什么要复用?
- 降低成本和开发时间
- 经过充分测试,可靠、稳定
- 标准化,在不同应用中保持一致
复用性能的检测
- 复用的机会有多频繁?复用的场合有多少?
- 复用的代价有多大?
不同级别的复用
- 代码级别的复用
- 模块级别的复用:class/interface
- Library级别的复用:API/Package
- 系统级别的复用:Framework
1.代码级别
代码级别的复用就是复制粘贴代码到你的程序中,缺点有很多:需要在多个场景下优化你的代码、并且需要你获得源代码的使用权限。
2.模块级别
无需源代码,只需要包含在classpath中,在这个方法中需要更少的代码管理,但是需要先将相关的class打包到一起来进行使用。
3.Library级别
使用开发好的API来进行复用,更加便捷。
4.Framework级别
开发者根据framework的规约,填充自己的代码进去,从而形成一个完整的体系。
Behavioral subtyping and Liskov Substitution Principle
子类型多态:客户端可以用统一的方式处理不同类型的对象
对于子类型的要求:子类型可以增加方法,但不可以删去,子类型需要实现抽象类型中的所有未实现方法,子类型中重写的方法必须有相同或子类型的返回值符合co-variance的参数,子类型中重写的方法必须使用同样类型的参数或者符合contra-variance的参数,子类型中重写的方法不能抛出额外的异常。
LSP:前置条件不能强化,后置条件不能弱化,不变量要保持,子类型方法参数:逆变,子类型方法的返回值:协变,异常类型:协变。