设计可复用类
面向对象编程可复用类设计
1、Encapsulation and information hiding 封装与信息隐藏
2、Inheritance and overriding 继承与重写
3、Overloading 重载
4、Parametric polymorphism and generic programming 参数多态与泛型编程
5、Behavioral subtyping and Liskov Substitution Principle (LSP) 行为子类型与Liskov替换原则
6、Composition and delegation 组合与委托
其中前四种均为OOP基本技术,以下重点说明后两点
行为子类型与Liskov替换原则
行为子类型
子类型可以增加方法,但不可以减少方法
子类型需要实现抽象类(接口、抽象类)中未实现的方法
子类型中重写的方法必须使用同样类型的参数或者符合contra-variant的参数(此种情况Java目前按照重载overload处理)
子类型中重写的方法不能抛出额外的异常
LSP
Let q(x) be a property provable about objects x of type T, then q(y) should be provable for objects y of type S where S is a subtype of T.
如果对于类型T的对象x,q(x) 成立,那么对于类型T的子类型S的对象y,q(y) 也成立。
LSP是针对强行为子类型提出的,除了满足上述行为子类型的要求外,还需满足:
前置条件不强化
后置条件不弱化
不变量要保持不变
子类型方法参数逆变
子类型方法返回值协变
异常类型协变
【关于逆变与协变的总结】
对于子类型及LSP的总结:
委托与组合 Delegation and Composition
设计可复用库与框架
API and Library
Framework
Java Collections Framework