Open-Closed Principle 开-闭原则

S7-1500与WinCC GroupDisplay组显示的高效配置指南 本文详细介绍了S7-1500 PLC与WinCC GroupDisplay组显示功能的高效配置方法,涵盖报警状态配置、WinCC端组显示控件设置及常见问题排查。通过实战案例和优化建议,帮助工程师快速掌握工业自动化项目中报警信息可视化的关键技术,提升生产线监控效率。 阅读详情

这个原则最早是由Bertrand Meyer提出,英文的原文是:Software entities should be open for extension,but closed for modification.意思是说,一个软件实体应当对扩展开放,对修改关闭.也就是说,我们在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,换句话说就是,应当可以在不必修改源代码的情况下改变这个模块的行为.



Software entities (classes, modules, function, etc.) should be open for extension, but closed for modification.

软件实体(模块,类,方法等)应该对扩展开放,对修改关闭。

开闭原则(OCP:Open-Closed Principle)是指在进行面向对象设计(OOD:Object Oriented Design)中,设计类或其他程序单位时,应该遵循:
- 对扩展开放(open)
- 对修改关闭(closed)
的设计原则。

开闭原则是判断面向对象设计是否正确的最基本的原理之一。

根据开闭原则,在设计一个软件系统模块(类,方法)的时候,应该可以在不修改原有的模块(修改关闭)的基础上,能扩展其功能(扩展开放)。
- 扩展开放:某模块的功能是可扩展的,则该模块是扩展开放的。软件系统的功能上的可扩展性要求模块是扩展开放的。
- 修改关闭:某模块被其他模块调用,如果该模块的源代码不允许修改,则该模块修改关闭的。软件系统的功能上的稳定性,持续性要求是修改关闭的。

这也是系统设计需要遵循开闭原则的原因:
1)稳定性。开闭原则要求扩展功能不修改原来的代码,这可以让软件系统在变化中保持稳定。
2)扩展性。开闭原则要求对扩展开放,通过扩展提供新的或改变原有的功能,让软件系统具有灵活的可扩展性。
遵循开闭原则的系统设计,可以让软件系统可复用,并且易于维护。

 

开闭原则的实现方法
为了满足开闭原则的 对修改关闭(closed for modification) 原则以及扩展开放(open for extension) 原则,应该对软件系统中的不变的部分加以抽象,在面向对象的设计中,
- 可以把这些不变的部分加以抽象成不变的接口,这些不变的接口可以应对未来的扩展;
- 接口的最小功能设计原则。根据这个原则,原有的接口要么可以应对未来的扩展;不足的部分可以通过定义新的接口来实现;
- 模块之间的调用通过抽象接口进行,这样即使实现层发生变化,也无需修改调用方的代码。

接口可以被复用,但接口的实现却不一定能被复用。接口是稳定的,关闭的,但接口的实现是可变的,开放的。可以通过对接口的不同实现以及类的继承行为等为系统增加新的或改变系统原来的功能,实现软件系统的柔软扩展。

简单地说,软件系统是否有良好的接口(抽象)设计是判断软件系统是否满足开闭原则的一种重要的判断基准。现在多把开闭原则等同于面向接口的软件设计。


开闭原则的相对性
软件系统的构建是一个需要不断重构的过程,在这个过程中,模块的功能抽象,模块与模块间的关系,都不会从一开始就非常清晰明了,所以构建100%满足开闭原则的软件系统是相当困难的,这就是开闭原则的相对性。但在设计过程中,通过对模块功能的抽象(接口定义),模块之间的关系的抽象(通过接口调用),抽象与实现的分离(面向接口的程序设计)等,可以尽量接近满足开闭原则。


Android 11多窗口+分屏+APP窗口嵌套TaskView实现原理一 然而随着版本的迭代升级,google对分屏的定制差异化也越来越大,Androd 11的分屏用的是split-screen-primary和split-screen-secondary的方式,在systemui中去实现的,其定制化的灵活度不是很高,很多业务都是放到sustemui或者fw去实现,但是随着版本的升高,后面出现了TaskView来替代了老版本的分屏方式,但是Task的核心原理其实和之前的方式是一样的,TaskView来实现分屏。 阅读详情

相关推荐

深入解析CycloneDDS跨域通信中的XML配置文件优化策略

本文深入解析了CycloneDDS跨域通信中XML配置文件的优化策略,重点介绍了网络接口配置、多播设置、性能调优参数及复杂场景下的配置案例。通过实战技巧和调试方法,帮助开发者在SoC环境中实现高效稳定的跨域通信,提升系统性能。

soda5的博客 688

开闭原则(Open Closed Principle)

/ 抽象动物类// 派生类:狗@Override");// 派生类:猫@Override");// 示例代码// 输出:Woof!// 输出:Meow!在上述示例中,我们有一个抽象的动物类Animal,并派生出了具体的狗类Dog和猫类Cat。抽象动物类定义了一个抽象方法,派生类必须实现该方法。在Main类的示例代码中,我们可以使用基类引用指向派生类的对象。通过多态性,我们可以调用基类中定义的方法,而实际调用的是派生类中实现的方法。现在,假设我们要新增一种动物,比如鸟类。

qq_29355763的博客 306

使用FloodRisk2插件进行洪水风险评估

入汛以来,长江流域持续的强降雨使得沿岸多地成为洪水风险极高地区,抗洪、抢险、救灾继新冠病毒之后成为又一个攻坚阵地。如何科学地评估洪水风险,是快速决策的关键。 实际生活中,根据风险是否可控,一般将洪水风险大致分为两类:一类是通过数据分析可以得出其发生的可能性和后果,如强降雨引发的区域性洪水、水库/大坝溃决洪水等。这类洪水可以通过有关资料分析和设定一定条件计算得到可能的损失后果,也就是说,风险可以预判。另一类洪水风险基本是未知的,如滑坡堵塞河道形成堰塞湖引发的洪水,无法预知事件发生的地点和规模,具体的洪水风险无

QGISClass的博客 2879

开放封闭原则(Open Closed Principle)

在面向对象的设计中有很多流行的思想,比如说 “所有的成员变量都应该设置为私有(Private)”,“要避免使用全局变量(Global Variables)”,“使用运行时类型识别(RTTI:Run Time Type Identification,例如 dynamic_cast)是危险的” 等等。那么,这些思想的源泉是什么?为什么它们要这样定义?这些思想总是正确的吗?本篇文章将介绍这些思想的基础:开放封闭原则(Open Closed Principle)。 Ivar Jacobson 曾说过 “所有系统在其

u010001360的博客 1420

开关电源环路补偿--开关电源进阶知识补充1

笔记 一 . 做开关电源环路补偿时候为了使得环路更加稳定。 1 .-- > 希望开关电源的相位裕量在45° 以上, 2. – > 希望开关电源的增益裕量在10db 以上 3. – > 希望开关电源增益曲线在过0db 时候以20db /dec 斜率下降(体现1个极点) 4. – > 希望开关电源补偿之后的带宽达到开关频率的是1/5 ~1/10,用以原理开关电源的开关噪音。 左边图示电源瞬态拉载和释放负载的时候输出电压存在明显的振铃,说明这个目前的环路相位裕量(phase m

qq_29776365的博客 1万+

iSLIP算法实战:如何用Python模拟交换机优先级匹配(附完整代码)

本文详细介绍了如何使用Python实现iSLIP算法,模拟交换机优先级匹配过程。通过核心的指针滑动逻辑和迭代循环策略,构建了一个完整的iSLIP算法模拟器,并加入可视化模块以直观展示匹配过程。文章还提供了完整的代码框架和性能优化建议,适合网络工程师和Python开发者直接集成到测试环境中。

weixin_29313239的博客 251

开闭原则(Open Closed Principle)

类、模块和函数,应该对扩展开放(对提供方来说),对修改关闭(对使用方来说)。

Never-Say-Never 806

手把手教你用Xilinx SelectIO IP核搞定ADS42LB69高速ADC的DDR数据采集(附仿真调试技巧)

本文详细介绍了如何使用Xilinx SelectIO IP核实现ADS42LB69高速ADC的DDR数据采集,包括IP核配置、仿真验证和硬件调试技巧。通过精准的时序控制和实战调试方法,解决高速数据采集中的时序对齐问题,提升系统稳定性和可靠性。特别适合FPGA工程师和高速ADC接口设计者参考。

weixin_42533622的博客 153

开放-封闭原则是面向对象设计中的一个基本原则,主要强调软件实体(如类、模块、函数等)应该对扩展开放

这意味着一个软件实体的功能扩展应该通过添加新的代码来实现,而不是通过修改现有的代码来完成。这样,当我们需要支持新的支付方式时,只需添加一个新的类来实现该接口,而不必修改现有系统的代码。开放封闭原则(Open/Closed Principle,OCP)是面向对象设计中的一个基本原则,它指的是软件实体(类、模块、函数等)应该对扩展开放,对修改封闭。例如,通过实现新的接口或继承新的类来实现功能扩展。:由于新功能是通过添加新的代码实现的,而不是通过修改现有代码,这样可以降低引入错误的风险,提高系统的可维护性。

[Blog][Domain] programb.blog.youkuaiyun.com 1797

mongodb在游戏开发领域的优势

目前游戏服务器使用mysql作为数据库的较多,然而,使用mongodb来作为存储层,在某些方面比mysql更为方便和适合。

littleschemer的博客 1699

MuJoCo XLA (MJX) 强化学习人形机器人四足机器人入门教程(三)

MJX 是用 JAX 编写的 MuJoCo 实现,可以在 GPU/TPU 上进行大批量训练。在本笔记本中,我们将演示如何使用 MJX 训练 RL 策略。在开始大量 RL 工作负载之前,我们先从一个简单的示例开始!xml = """"""接下来,我们使用 MJX 将 MuJoCo 模型和数据放到 GPU 设备上。下面,我们将打印来自 MuJoCo 和 MJX 的 qpos。

2506_90492529的博客 2472

开放-封闭原则(The Open-Closed Principle)

开放-封闭原则(The Open-Closed Principle)

一朝风月 2644

【误码率仿真】基于matlab 小波变换OFDM误码率仿真

其中,与传统的 OFDM 相比,小波变换 OFDM 在进行调制和解调时,使用的是小波变换函数。需要注意的是,由于小波变换函数将频域信号转换为时域信号,因此与传统 OFDM 不同,小波变换 OFDM 中的信号需要在时域上添加循环前缀。与传统的 OFDM 不同,小波变换 OFDM 使用小波函数作为基函数,而非正弦函数作为基函数,因此可以在保持子载波正交性的同时,让子载波之间的带宽变得更加均匀。在频域进行信号加权,然后进行小波逆变换,得到时域信号。在接收端进行信号接收,去掉循环前缀并进行小波变换得到频域信号。

Fanjufei的博客 662

“开-闭”原则 (Open-Closed principle, OCP)

“开-闭”原则 (Open-Closed principle, OCP) 一个软件实体应当对扩展开放,对修改关闭。Software entities should be open for extension, but closed for modification.在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。 “可变性的封装原则”从工程的角度讲解了

moon1128的专栏 9870

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

“开-闭”原则(Open-Closed Principle)

1.1   “开-闭”原则(Open-Closed Principle) 1.1.1 作用 它指导我们如何提高代码的可扩展性! 1.1.2 定义 (1)Open(Open for extension) 模块的行为必须是开放的、支持扩展的,而不是僵化的。 (2)Closed(Closed for modification) 在对模块的功能进行扩展时,不应该影响或大规模地影响已有的程

软件设计专栏 5395

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

设计原则之“开-闭”原则(Open-Closed Principle)

"开-闭"原则是指:一个软件实体应当对扩展开放,对修改关闭。--《Java与模式》 "开-闭"原则是说,在设计模块的时候,应当使这个模块在不被修改的前提下,进行扩展。举例如下,孙悟空大闹天宫时,玉帝给了一个弼马温的职位。在天庭的职位体系中,扩展一个弼马温的职位并未修改天庭中其他职位系统。  在这个例子中,“文武仙卿”就是各个职位的一个抽象,在不改变抽象层的情况下,扩展了实现层。从而满足了“...

帅帅的博客 1267

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

开-闭原则(OCP - Open-Closed Principle )

软件实体(函数、类、模板等等)应该是可扩展的、但是不可修改的。 可扩展- 增加新的功能。 应对新的功能需求。 不可修改- 不修改源码。避免关联源码的修改、重新编译、链接。 一个软件实体,例如一个函数,怎样才能做到即增加新的功能,又不修改它的源码呢。 答案就是抽象。 先看一个不遵守OCP原则的例子: client类调用server类实现某些功能。 如果有新的需求,c

鸿博客 617

“开-闭”原则(Open-Closed principle, OCP)

“开-闭”原则(Open-Closed principle, OCP) 一个软件实体应当对扩展开放,对修改关闭。 Software entities should be open for extension, but closed for modification. 在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。 “可变性的封装原则”从工程的角度讲解了如何实现“...

weixin_30710457的博客 70

Golang 通过接口实现“开-闭”原则(Open-Closed Principle,常缩写为OCP)

Golang 通过接口实现“开-闭”原则(Open-Closed Principle,常缩写为OCP)

wgchen 297

设计模式(二)“开-闭”原则(OCP-----Open-Closed Principle)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33779515的博客 178
上一篇: 浅谈流形学习
下一篇: 接口和抽象类的区别
randomnet
博客等级 码龄19年 59粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值