里氏代换原则(LSP):如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有变化,那么类型T2是类型T1的子类型。换言之,一个软件实体如果使用的是一个基类的话,那么一定使用于其子类,而且它根本不能察觉出基类对象和子类对象的区别。

里氏代换原则是继承复用的基石。只有当衍生类可以替换掉基类,软件单位的功能不会受到影响时,基类才真正被复用,而衍生类也才能够在基类的基础上增加新的行为。



依赖倒转原则(DIP):
要依赖于抽象,不要依赖于具体。

传统的过程性系统的设计方法倾向于使高层次的模块依赖于低层次的模块;抽象层依赖于具体层次 。倒转原则就是要把这种错误的依赖关系倒转过来。

三种耦合关系:

零耦合:如果两个类没有耦合关系,就称之为零耦合。

具体耦合:具体性耦合发生在两个具体的(可实例化)类之间,经由一个类对另一个具体类的直接引用造成。

抽象耦合:抽象耦合关系发生在一个具体类和一个抽象类(或者接口)之间,使两个必须发生关系的类之间存在有最大的灵活性。

依赖倒转原则要求客户端依赖于抽象耦合

抽象不应当依赖于细节;细节应当依赖于抽象。

要针对接口编程,不要针对实现编程。

变量被声明时的类型叫做变量的静态类型,也叫做明显类型,变量所引用的对象的真实类型叫做变量的实际类型

程序在需要引用一个对象时,应当尽可能的使用抽象类型作为变量的静态类型,这就是针对接口编程的含义。