深入浅析:面向对象编程四大原则

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

深入浅析:面向对象编程四大原则

  在面向对象设计中,如何通过很小的设计改变就可以应对设计需求的变化,这是令设计者极为关注的问题。为此不少OO先驱提出了很多有关面向对象的设计原则用于指导OO的设计和开发。下面是几条与类设计相关的设计原则。

  1. 开闭原则(the Open Closed Principle OCP)

  一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。因此在进行面向对象设计时要尽量考虑接口封装机制、抽象机制和多态技术。该原则同样适合于非面向对象设计的方法,是软件工程设计方法的重要原则之一。我们以收音机的例子为例,讲述面向对象的开闭原则。我们收听节目时需要打开收音机电源,对准电台频率和进行音量调节。但是对于不同的收音机,实现这三个步骤的细节往往有所不同。比如自动收缩电台的收音机和按钮式收缩在操作细节上并不相同。因此,我们不太可能针对每种不同类型的收音机通过一个收音机类来实现(通过重载)这些不同的操作方式。但是我们可以定义一个收音机接口,提供开机、关机、增加频率、降低频率、增加音量、降低音量六个抽象方法。不同的收音机继承并实现这六个抽象方法。这样新增收音机类型不会影响其它原有的收音机类型,收音机类型扩展极为方便。此外,已存在的收音机类型在修改其操作方法时也不会影响到其它类型的收音机。

  2. 替换原则 (the Liskov Substitution Principle LSP)

  子类应当可以替换父类并出现在父类能够出现的任何地方。这个原则是Liskov于1987年提出的设计原则。它同样可以从Bertrand Meyer 的DBC (Design by Contract) 的概念推出。

  我们以学生为例,夜校生为学生的子类,因此在任何学生可以出现的地方,夜校生均可出现。这个例子有些牵强,一个能够反映这个原则的例子时圆和椭圆,圆是椭圆的一个特殊子类。因此任何出现椭圆的地方,圆均可以出现。但反过来就可能行不通。

  运用替换原则时,我们尽量把类B设计为抽象类或者接口,让C类继承类B(接口B)并实现操作A和操作B,运行时,类C实例替换B,这样我们即可进行新类的扩展(继承类B或接口B),同时无须对类A进行修改。

  3. 依赖原则 (the Dependency Inversion Principle DIP)

  在进行业务设计时,与特定业务有关的依赖关系应该尽量依赖接口和抽象类,而不是依赖于具体类。具体类只负责相关业务的实现,修改具体类不影响与特定业务有关的依赖关系。

  在结构化设计中,我们可以看到底层的模块是对高层抽象模块的实现(高层抽象模块通过调用底层模块),这说明,抽象的模块要依赖具体实现相关的模块,底层模块的具体实现发生变动时将会严重影响高层抽象的模块,显然这是结构化方法的一个"硬伤"。

  面向对象方法的依赖关系刚好相反,具体实现类依赖于抽象类和接口。

  为此,我们在进行业务设计时,应尽量在接口或抽象类中定义业务方法的原型,并通过具体的实现类(子类)来实现该业务方法,业务方法内容的修改将不会影响到运行时业务方法的调用。

  4. 接口分离原则(the Interface Segregation Principle ISP)

  采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。

  ISP原则是另外一个支持诸如COM等组件化的使能技术。缺少ISP,组件、类的可用性和移植性将大打折扣。

  这个原则的本质相当简单。如果你拥有一个针对多个客户的类,为每一个客户创建特定业务接口,然后使该客户类继承多个特定业务接口将比直接加载客户所需所有方法有效。

  以上四个原则是面向对象中常常用到的原则。此外,除上述四原则外,还有一些常用的经验诸如类结构层次以三到四层为宜、类的职责明确化(一个类对应一个具体职责)等可供我们在进行面向对象设计参考。但就上面的几个原则看来,我们看到这些类在几何分布上呈现树型拓扑的关系,这是一种良好、开放式的线性关系、具有较低的设计复杂度。一般说来,在软件设计中我们应当尽量避免出现带有闭包、循环的设计关系,它们反映的是较大的耦合度和设计复杂化。

面向对象六大原则详解 本文来说下面向对象六大原则 文章目录概述 概述 阅读详情

相关推荐

面向对象的七大原则

单一职责原则 单一职责原则定义:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。 单一职责原则是实现高内聚、低耦合的指导方针。一个类承担的职责越多,它被复用的可能性越小。一个类的职责太重,将导致系统非常脆弱,一个职责的变化可能会影响到其他职责。另一方面,类的职责也不应过分细分,这将降低代码的维护性。 该职责的核心在于掌握好每个类的颗粒度大小。 开闭原则 开闭原则的定义:一...

GoldenBullet的博客 431

程序设计-面向对象程序设计四大基本原则

一、面向抽象原则二、开闭原则三、多用组合少用继承原则四、高内聚低耦合原则

zw3413的专栏 1601

面向对象设计四大原则

法则1:优先使用(对象)组合,而非(类)继承[Favor Composition Over Inheritance] 组合:是一种通过创建一个组合了其它对象的对象,从而获得新功能的复用方法。将功能委托给所组合的一个对象,从而获得新功能。   优点:   1)容器类仅能通过被包含对象的接口来对其进行访问。   2)“黑盒”复用,因为被包含对象的内部细节对外是不可见。   3)实现上的相互依赖

pymqq的专栏 974

面向对象编程五大原则

在面向对象设计中,如何通过很小的设计改变就可以应对设计需求的变化,这是令设计者极为关注的问题。为此不少OO先驱提出了很多有关面向对象的设计原则用于指导OO的设计和开发。下面是几条与类设计相关的设计原则。   单一职责原则SRP:Single Responsibility Principle   开放封闭原则OCP:Open-Close Principle   Lisko...

agol83082486的博客 278

面向对象设计的四大原则

多年前看到的一篇Bob Tarr 著,outmyth译的文章,虽然这四个原则都是我们平日里熟知的,但是很多时候我们却想不起来用,今日再读仍受益匪浅。特转载一下,希望大家都能从中有所收获。 法则1:优先使用(对象)组合,而非(类)继承[ Favor Composition Over Inheritance ] 组合:是一种通过创建一个组合了其它对象的对象,从而获得新功能的复用方...

emowuyi 282

Java面向对象编程核心:从类与对象到集合框架的实践指南

面向对象编程(OOP)是一种以对象为核心的软件开发范式,其核心思想是通过封装、继承和多态来模拟现实世界。在Java语言中,OOP不仅是语法特性,更是构建模块化、可复用和易维护软件系统的基石。封装通过private修饰符保护数据,继承实现了代码复用,而多态则提供了接口统一和运行时灵活性。这些特性共同支撑了大型软件项目的开发,例如在企业级应用、安卓开发中广泛使用。本文聚焦Java面向对象的核心实践,通过实验解析类与对象、继承多态、抽象类接口、异常处理及集合框架等关键概念,帮助开发者从理论到实践掌握Java OO

weixin_30673611的博客 322

android开发知识点汇总

六大原则设计模式创建型模式(5种)结构型模式(8种)行为型模式(12种)数据结构算法排序算法查找算法。

cplasf2012的博客 1690

Android 进阶知识汇总

Android 进阶知识汇总

qq_16948605的博客 1429

面向对象编程七大编程原则概述详解

面向对象编程原则概述 1.1 软件的可维护性和可复用性 可维护性较低的软件设计,通常由于如下四个原因造成: 过于僵硬(Rigidity) :灵活性不够 过于脆弱(Fragility) :健壮性(鲁棒性) 不够复用率低(Immobility) :不能重用 黏度过高(Viscosity) :高耦合,关联性太高 一个好的系统设计应该具备如下三个性质: 可扩展性(Extensibility) 灵活性(Flexibility) 可插入性(Pluggability) 程序设计原则:高内聚,低耦合 面向对象编程

Pluto372的博客 1938

面向对象程序设计要考虑的7个原则

面向对象程序设计要考虑7个原则,在此记录下,方便以后自己翻阅。 单一职责原则:设计目的单一的类; 开放封闭原则:对扩展开发,对修改封闭; 李氏替换原则:子类可以替换父类; 依赖倒置原则:要依赖于抽象,不依赖于具体,面向接口的编程; 接口隔离原则:使用多个专用的接口比使用单一的接口要好; 组合重用原则:尽可能使用组合,而非继承; 迪米特原则:一个对象尽可能少的了解其他对象。 ...

IT1995的博客 2188

面向对象编程的六大原则

面向对象的六大原则,在代码设计中充分利用,可在代码层面提高项目的复用、抽象能力、拓展及高内聚低耦合

规则中找出不规则,挫折中找出突破点 918

没错,这就是面向对象编程(设计模式)需要遵循的 6 个基本原则

在讨论面向对象编程和模式(具体一点来说,设计模式)的时候,我们需要一些标准来对设计的好还进行判断,或者说应该遵循怎样的原则和指导方针。 现在,我们就来了解下这些原则: 单一职责原则(S) 开闭原则(O) 里氏替换原则(L) 接口隔离原则(I) 依赖倒置原则(D) 合成复用原则 及迪米特法则(最少知道原则) 本文将涵盖 SOLID + 合成复用原则的讲解及示例,迪米特法则以扩展阅读形...

allen的博客 647

面向对象的四大设计原则

最关键的软件开发工具是受过良好设计原则训练的思维

qq_42367749的博客 1053

面向对象编程的编程原则

S.O.L.I.D是面向对象设计和编程(OOD&OOP)中几个重要编码原则(Programming Priciple)的首字母缩写。 SRP The Single Responsibility Principle 单一责任原则 OCP The Open Closed Principle 开放封闭原则 LSP The Liskov Substituti...

qq_36777191的博客 360

Java 面向对象的三个特性和五个基本原则

面向对象(OOP)的三个特性: 封装性(Encapsulation),继承性和多态性。 面向对象(OOP)的五个原则:单一职责原则(SRP)、开放封闭原则(OCP)、里氏替换原则(LSP)、依赖倒置原则(DIP)、接口隔离原则(ISP)。 1.面向对象的三个特性 面向对象的三个特性: 封装性(Encapsulation),继承性和多态性。 1.1封装性 封装性:将数据和对数据...

学习笔记 1万+

00-设计模式原则

文章目录1 单一职责原则2 开闭原则3 里氏代换原则4 依赖倒转原则5 接口隔离原则6 迪米特法则7 合成复用原则 1 单一职责原则 对于类来说,**一个类应该只负责一种职责。**如果类A负责两个不同的职责:职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2。 2 开闭原则 **对扩展开放,对修改关闭。**在程序需要进行扩展的时候,不能去修改原有的代码。 需要使用接口和抽象类。只要抽象合理,可以基本保持可以基本保持软件架构的稳定。而软件中易变的细节可以从

Seven_Year1的博客 583
上一篇: OpenGL学习:第一课
下一篇: WinMain函数
tnt32
博客等级 码龄17年 15粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值