软件设计七大原则

软件设计七大原则

 

一、 开闭原则

定义:一个软件实体,如类、模块和函数应该对扩展开放,对修改关闭。
中心思想:用抽象构建框架,用实现扩展细节。即面向抽象编程。
优势:提升软件系统的可复用性和可维护性。
举例:不少互联网公司实行弹性制考勤,天天上班8小时,这是不可修改的,可是什么时间上班和下班,是开放的。

由于越低层次的模块,越基础的模块,变化后影响的范围是越大的。越高层次的模块变化后影响的范围则越小。故面向对象编程中,必定要强调开闭原则。
编程

 

二、 依赖倒置原则

定义:高层模块不该该依赖底层模块,两者都应该依赖其抽象。
抽象不该该依赖细节,细节应该依赖抽象。
针对接口编程,不要针对实现编程。
优势:能够减小类间的耦合性、提升系统稳定性,提升代码的可读性和可维护性,可下降修改程序所形成的的风险。

程序应依赖于接口,不该该依赖具体的实现类。

相对于细节的多变性,抽象的东西要稳定得多,以抽象为基础搭建起来的架构比 以细节为基础搭建起来的架构要稳定得多。
架构

 

三、 单一职责原则

定义:不要存在多于一个致使类变动的缘由。
一个类/接口/方法只负责一项职责。
优势:下降类的复杂度、提升类的可读性,提升系统的可维护性,下降变动引发的风险。
框架

 

四、 接口隔离原则

接口是设计时,对外部约定的契约。
定义:用多个专门的接口,而不使用单一的总接口,客户端不该该依赖它不须要的接口。
一个类对一个类的依赖应该创建在最小的接口上。
创建单一接口,不要创建臃肿庞大的接口。
尽可能细化接口,接口中的方法尽可能少。
注意适度原则,必定要适度。不要多大不要多小。
优势:符合咱们常说的高内聚低耦合的设计思想,从而使得类具备很好的可读性,可扩展性和可维护性。

与单一职责原则的区别:
单一职责原则:指的是类、接口和方法的职责是单一的,强调的是职责,也就是说在接口里,只要是职责是单一的,有多个方法也能够,针对的是程序中的实现和细节。
接口隔离原则:注重的是对接口依赖的隔离,主要约束的是接口,针对抽象、程序总体框架的构建。
函数

 

五、 迪米特法则(最少知道原则)

定义:一个对象应该对其余的对象保持最少的了解,又叫最少知道原则。
尽可能下降类与类之间的耦合。
优势:下降类之间的耦合。

强调只和朋友交流,不和陌生人说话。
朋友:出如今成员变量、方法的输入、输出参数中的类称为成员朋友类,而出如今方法体内部的类不属于朋友类。

减小每一个类之间没必要要的依赖,从而达到下降耦合。但凡是都要有个度,若是过度的使用迪米特原则,可能会产生大量的中介类,致使系统变复杂,为维护带来难度。因此在使用迪米特的时候,须要反复权衡,既要作到结构清晰,又要作到低耦合高内聚。
若是一个方法放在本类中,既不增长类间关系,也对本类不产生负面影响,就能够放在本类中。
设计

 

六、 里氏替换原则

定义:若是对每个类型为T1的对象o1,都有类型为T2的对象02,使得以T1定义的全部程序P在全部的对象o1都替换成o2时,程序P的行为没有发生变化,那么类型T2是类型T1的子类型。
定义扩展:一个软件实体若是适用一个父类的话,那必定适用于其子类,全部引用父类的地方必须能透明地使用其子类的对象,子类对象可以替换父类对象,而程序逻辑不变。

引伸意义:子类能够扩展父类的功能,但不能改变父类原有的功能。
含义1:子类能够实现父类的抽象方法,但不能覆盖父类的非抽象方法。
含义2:子类中能够增长本身特有的方法。
含义3:当子类的方法重载父类的方法时,方法的前置条件(即方法的输入/入参)要比父类方法的输入参数更宽松。
含义4:当子类的方法实现父类的方法时(重写/重载或实现抽象方法),方法的后置条件(即方法的输出/返回值)要比父类更严格或相等。

优势1:约束继承泛滥,开闭原则的一种体现。
优势2:增强程序的健壮性,同时变动时也能够作到很是好的兼容性提升程序的维护性、扩展性。下降需求变动时引入的风险。
对象

 

七、 合成复用原则(组合复用原则)

定义:尽可能使用对象组合/聚合,而不是继承关系达到软件复用的目的。
聚合has-A和组合contains-A。
优势:可使系统更加灵活,下降类与类之间的耦合度,一个类的变化对其余类形成的影响相对较少。
继承

相关文章
相关标签/搜索