面向对象程序设计的五个基本原则

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/FutureLifes/article/details/81117565

面向对象程序设计一共有五个基本原则,分别是:

单一职责原则(SRP)、开放-封闭原则(OCP)、里氏替换原则(LSP)、依赖倒置原则(DIP)、接口隔离原则(ISP)

单一职责原则(SRP):

WHAT:对于一个类而言,应该仅有一个引起它变化的原因。

WHY:如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。

辅助理解:单细胞生物进化成为多细胞生物的过程中,从前的单细胞生物一个细胞负责很多功能,防御、繁衍、消化、进食等等,而多细胞生物一个细胞只负责一个功能,淋巴细胞负责防御,血红细胞负责运输,精元细胞负责繁衍。软件工程的发展过程与之非常接近,现在我们编程中的类理解成一个细胞,一个类只负责一个功能。

开放-封闭原则(OCP):

WHAT:软件实体(类、模块、函数等等)应该可以扩展,但是不可以修改。

WHY:开放-封闭原则是面向对象编程的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可拓展、可复用、灵活性好。开发人员应该仅仅对程序中呈现出频繁变化的那些部分做出抽象,然而对于应用程序中的每个部分都刻意进行抽象同样不是一个好主意。拒绝不成功的抽象和抽象本身一样重要。

辅助理解:我们国家有一项基本国策是”一国两制“,但是宪法规定我们国家是我们国家是无产阶级领导的社会主义国家,国家的性质不能改变,港澳台的政治制度也不能轻易变动,所以就提出了一国两制的思想,港澳台的政治制度是对中国政治制度这个类的扩展,而不是修改。

里氏替换原则(LSP):

WHAT:子类型必须能够替换掉它们的父类型。

WHY:只有当子类型可以替换掉父类,软件单位的功能不受影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。正是由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展。

辅助理解:建立一个Animal类,拥有吃、喝、跑、叫这些方法,猫继承动物类,有一天我们需要添加马、牛、羊等类,由于它们都继承于动物,所欲除了更改实例化的地方,程序其他处不需要修改。

依赖倒置原则(DIP):

WHAT:A高层模块不应该依赖底层模块,两个都应该依赖抽象。B抽象不应该依赖细节。细节应该依赖抽象。

WHY:依赖倒转其实可以说是面向对象设计的标志,用哪种语言来编写程序不重要,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象的设计,反之那就是过程话的设计了。

接口隔离原则(ISP):

WHAT:A客户端不应该依赖它不需要的接口。B一个类对另一个类的依赖应该建立在最小的接口上。

WHY:使用多个专门的接口比使用单一的总接口要好。一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。

辅助理解:人体身上有很多管道,比如说血管、输尿管、输卵管、汗腺等等,这么多的管道每种只负责一个功能,假如说血管和汗腺重合了,人体就会处大毛病。

猜你喜欢

转载自blog.csdn.net/FutureLifes/article/details/81117565