编程原则
一、开闭原则(Open Close Principle)
软件实体应当对扩展开放,对修改关闭
当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求
在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果;简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类
- 项目中划分出的模块
- 类与接口
- 方法
"抽象约束、封装变化":即通过接口或者抽象类为软件实体定义一个相对稳定的抽象层,而将相同的可变因素封装在相同的具体实现类中。
二、里氏替换原则(Liskov Substitution Principle)
子类可以扩展父类的功能,但不能改变父类原有的功能
修正方法:程序违背了里氏替换原则,取消原来的继承关系,重新设计它们之间的关系 里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
三、依赖倒置原则(Dependence Inversion Principle)
这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。 高层模块不应该依赖低层模块,两者都应该依赖其抽象 抽象不应该依赖细节,细节应该依赖抽象 面向接口编程
- 每个类尽量提供接口或抽象类,或者两者都具备。
- 变量的声明类型尽量是接口或者是抽象类。
- 任何类都不应该从具体类派生。
- 使用继承时尽量遵循里氏替换原则。
四、单一职责原则
一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分
使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度,它强调降低依赖,降低耦合
五、接口隔离原则(Interface Segregation Principle)
尽量将臃肿庞大的接口拆分成更小的和更具体的接口
六、迪米特法则(Demeter Principle)
只与你的直接朋友交谈,不跟 "陌生人" 说话
最少知道原则;一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
七、合成复用原则(Composite Reuse Principle)
在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现