几条面向对象课上介绍的高质量代码写作原则:
1. Don‘t Repeat Yourself
不要重复你自己,重复代码,类似代码都是问题的隐患。程序员为了能够节省时间,喜欢复制现成的代码,稍加修改制作自己的调用的函数(方法),这种做法将会把原有的问题复制一份,修改的时候也要修改两份。重复代码的问题在诸多问题之中往往被列为首位。
2. Single Responsibility Principle
单一职责原则。一个类只干与自己相关的事情,一个方法只做一件事情,一个变量只表达一个意思。如果违背这个原则,那么代码理解的速度就会降低。并且,调用的时候会由于名称的误导而导致重复调用、意外行为等不可预期的错误。而修改代码的时候也因为其职责过多而致使影响性变大,导致无从下手,或者不敢下手。
3. Open Closed Principle
开放封闭原则,指的是代码对变更封闭,对扩展开放。当系统需要扩展的时候,可以通过派生子类或者重载函数的方式进行扩展,而无需修改原来的代码。这样做的好处是,当系统进行扩展的时候由于无需修改原来的代码,所以对原来系统的影响性也可以降到最小。
4. Liskov Substitute Principle
里氏代换原则。子类可以替代父类。这句话看似废话。但是实际上含义很深。比如经典的对面向对象技术的质疑话题:园非椭圆问题。即根据面向对象原则,园应该是椭圆的一个子类。但是当椭圆进行单轴拉伸的时候,圆无法做到这一点。实际上这违反了里氏代换原则。即圆是受限制的椭圆,圆无法继承椭圆所有行为和属性。所以,在面向对象课上老师爱用的例子:动物->狗这个例子也会有其谬误之处。动物在这里更应该是多个接口,而不是类,因为它不能保证所有的属性都会被所有的子类正确的继承。例如:
5. Interface Segregation Principle
接口分离原则。一个接口只做一类事情,将无关的行为分离成为其他的接口。从而使得接口单元变小。则调用方只需要了解自己相关的几个接口就可以了,而无需了解那些与自己无关的接口。同时也避免了去访问那些它不应该访问的接口。
6. Dependency Inversion Principle
依赖倒置原则。有两层意思:访问依赖于抽象,不依赖于具体实现;实现依赖于抽象,抽象不依赖于实现。当调用方和实现都依赖于接口的时候,二者的耦合度就大为降低了。
7. Law of Demeter
迪米特法则。也叫最少知识原则。即对象只需要了解那些它需要的属性,只访问那些和它关系最密切的对象。这样可以减少对象的外部依赖。但是,需要了解的是,迪米特法则会创建大量的中介类。