OO设计原则 — The Open-Closed Principle:开放/封闭原则(OCP)

YOLOv8知识蒸馏实战:用BCKD和LD在自制数据集上分别提点1.63%和1.69%的保姆级教程 本文详细介绍了在YOLOv8模型上应用知识蒸馏技术(BCKD和LD方法)的实战教程,通过自制数据集实现性能提升1.63%和1.69%。内容涵盖环境配置、模型选择、BCKD和LD的具体实现及调参技巧,适合目标检测领域的开发者和研究者。 阅读详情

对于一个软件的实体(类,模块,函数等)应该是可以扩展的,但是不可被修改。

一、概要

开放/封闭原则(The Open-Closed Principle:OCP)是在面向对象设计中,类和模块等必须遵循以下规则:

◇ 对于功能的扩展因该是开放的,即可以追加机能。

◇ 对于修改是封闭的,即既存的机能的实体是不可以修改的。

以上两条规则就是说“软件实体应当在不修改的前提下扩展”

开放/封闭原则(OCP)是面向对象设计的最基本的原则。也是之后的面向对象设计原则,

Package设计原则以及设计模式的基础。

二、OCP的优点

◇ 很好的扩展性。OCP的对于扩展的开发原则,当系统要扩展或者添加新的行为的时候

       只需要添加 另外实现的模块即可。

◇  提供软件的安定性、稳定性。OCP的修改封闭原则,要在不修改既存代码的基础上

       进行机能的追加,对原机能影响很小,确保了安全性,同时也保证了原有机能的稳定性。

◇ 再利用性。根据OCP原则设计的类和模块,一般都是可以设计出可重用的机能的抽象和接口等。

      同时,软件的各部分的耦合度也会很低,,使程序模块互换成为可能;

三、OCP实现的手法

实现OCP关键在于抽象,抽象出来的东西是不变的,具体的实现继承于抽象,所以保证了对修改的Close,

而抽象的实现方式有多种,可以随需添加,当然这也就是对扩展的Open。 另外要求的是技术包括,

多态 Polymorphism,接口 Interface,继承 Inheritance. 一般的抽象步骤如下:

◇ 分析机能。

◇ 定义出不需要修改的可以被再利用的Interface。

◇ 通过继承Interface类,来实现机能的扩展和追加。

 

另外在对可变性进行封装的时候也应该注意以下几点:

◇ 识别系统有可能变化的地方。 

◇ 不要将一种可变形散布在多处代码,而应该封装起来。

◇ 不要将一种可变性与另外一种可变性混在一起。  

◇ 两种安全的实现开闭原则的设计模式是:Strategy pattern(策略模式),

      Template Methord(模版方法模式)。

◇ 依据开闭原则,我们尽量不要修改类,只扩展类,但在有些情况下会出现一些比较怪异的

       状况,这时可以采用几个类进行组合来完成。

◇ 将可能发生变化的部分封装成一个对象,如: 状态, 消息,,算法,数据结构等等,

      封装变化是实现"开闭原则"的一个重要手段,如经常发生变化的状态值,如温度,气压,颜色,积分,

     排名等等,可以将这些作为独立的属性,如果参数之间有关系,有必要进行抽象。

     对于行为,如果是基本不变的,则可以直接作为对象的方法,否则考虑抽象或者封装这些行为。


但是,由于软件的不确定性等原因,要想100%的按照OCP原则来进行软件设计是很困难的,

所以,我们实际过程中应该是尽可能的遵守OCP原则,而不是一味必须所有的都要遵守。

frp内网穿透(socks隧道) 在实验过程中还是遇到了挺多的问题,但好在大多都解决了。不过还是遗留了一些不懂的问题,等以后再慢慢研究了。最后,以上仅为个人的拙见,如何有不对的地方,欢迎各位师傅指正与补充,有兴趣的师傅可以一起交流学习。 阅读详情

相关推荐

Vivado时序违例debug

显示了数据路径延迟。例如,对于违例路径,若布线延迟超过50%,说明该延迟是导致时序不能收敛的主要因素,因此可围绕降低布线延迟这一靶心达到时序收敛。对于跨时钟域路径,Requirement数值会有所变化,但如果数值为0.1,显然是不合理的。目的时钟路径单元,时钟从adc0_bufg/O输出,到达PLLE4_ADV,经过BUFGCE输出,最终到达SRLC32E移位寄存器,对应。源时钟路径单元,时钟从adc0_bufg/O输出,到达PLLE4_ADV,经过BUFGCE输出,最终到达FDRE触发器,对应。

weixin_44513618的博客 1618

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

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

一朝风月 2644

在ZYNQMP上点亮800x480 LCD屏:从framebuffer到DRM框架的完整驱动移植实战

本文详细介绍了在ZYNQMP平台上点亮800x480 LCD屏的完整驱动移植实战,从framebuffer到DRM框架的技术实现。内容涵盖硬件配置、设备树设置、显示时序参数调试以及DRM驱动核心实现,帮助开发者快速掌握PetaLinux系统中的LCD驱动开发技巧。

weixin_33701294的博客 426

OO设计原则 — The Open-Closed Principle:OO设计的(OCP) 开放/封闭原则

对于一个软件的实体(类,模块,函数等)应该是可以扩展的,但是不可被修改。 一、概要 开放/封闭原则(The Open-Closed Principle:OCP)是在面向对象设计中,类和模块等必须遵循以下规则: ◇ 对于功能的扩展因该是开放的,即可以追加机能。 ◇

亿言 2194

SpringBoot Actuator未授权访问漏洞实战:从发现到利用

本文深入剖析了SpringBoot Actuator未授权访问漏洞的成因、危害与利用手法。文章详细演示了如何发现暴露的端点,并通过实战案例复现了从敏感信息泄露到利用反序列化漏洞实现远程代码执行(RCE)的全过程,为开发与运维人员提供了从漏洞发现到修复加固的完整安全指南。

weixin_29231221的博客 258

什么是 AI Agent?它和直接调用大模型 API 有什么区别?

什么是 AI Agent?它和直接调用大模型 API 有什么区别?

我哎GIS博客 6476

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

自己设计的软件系统“易于维护”、“扩展性好”、“可重用”、“具有灵活性”,这是每位程序员所追求的目标。“开闭原则”为我们指明了方向,即我们所设计的软件尽量满足“开闭原则–对扩展开放,对修改关闭”,这样就能降低需求不断变换给系统带来的风险。

老马的程序人生 1709

Spring AI 项目实战(十):Spring Boot + AI + DeepSeek 构建智能合同分析技术实践(附完整源码)

摘要:基于Spring AI的智能合同审核系统开发 本文介绍了基于Spring Boot 3.2.0和Spring AI 1.0.0-M4构建的智能合同审核系统。系统采用分层架构设计,整合DeepSeek API实现文档解析、条款提取和风险分析功能。核心技术栈包括Spring AI、H2数据库、Apache POI/PDFBox等文档处理工具,实现了合同条款语义分析、异常识别和审核报告自动生成。项目解决了传统人工审核效率低、主观性强等问题,为合同管理提供了智能化解决方案。文章详细阐述了系统架构设计、技术选型

博客 652

翻译 - The Open Closed Principle 开闭原则

   作者: Robert C. Martin    原文连接: The Open Closed Principle    本翻译未经授权,仅做为私人笔记记录,转载传播责任自负    这是我在C++报导工程笔记专栏的第四篇。这个专栏的主题是C++和OOD的使用,以及解决软件工程方面的问题。我尽力写一些实用性的文章,为奋斗中的软 件工程师提供一些帮助。这些文章将使用Booch和Rumbau...

weixin_34128534的博客 180

《嵌入式最全面试题-Offer直通车》目录

嵌入式领域蓬勃发展,嵌入式工程师成为众多科技企业争抢的热门人才。如果你渴望在嵌入式面试中脱颖而出,成功斩获心仪的 offer,那么《嵌入式最全面试题 - Offer直通车》将是你的绝佳选择。本专栏是优快云是热门专栏,100多篇文章,总字数过百万。每月新增订阅用户过百,现在是优惠价9.9元,后面要逐渐恢复原价,早订阅早受益。本专栏精心整理了众多超万字的精华内容,总计达数十万字的嵌入式面试题总结。涵盖从嵌入式基础知识到各大厂面试真题,从驱动开发到操作系统,从硬件到软件等各个方面。

大模型大数据攻城狮的专栏 8382

四足狗机器人硬件开发技术栈详解

本文系统介绍了四足狗机器人的硬件开发技术,重点分析了五大核心模块:机械结构(骨架设计)、动力系统(关节驱动)、感知系统(环境监测)、控制系统(决策中枢)和电源系统(能源管理)。文章详细阐述了各模块的选型标准、技术要点和协同设计原则,提供了从需求定位到组装调试的完整开发流程,并针对常见问题给出解决方案。随着材料轻量化、模块标准化和AI集成化的发展趋势,四足机器人硬件将向更灵活、更智能的方向演进,为工业巡检、应急救援等场景提供更强大的移动平台支持。

start_up_go的博客 284

开闭原则 (Open/Closed Principle, OCP)

开闭原则是面向对象设计中的基本原则之一,通过确保软件实体对扩展开放,对修改关闭,可以提高系统的稳定性、灵活性和可维护性。在实际开发中,遵循开闭原则有助于我们设计出高质量的代码,使系统更加健壮和易于扩展。希望这个博客对你有所帮助。如果你有任何问题或需要进一步的例子,请随时告诉我!

qq_42798343的博客 3355

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

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

OO设计的开闭原则—The Open-Closed Principle (OCP)

Software entities (classes, modules, function, etc.) should be open for extension, but closed for modification. 软件实体(模块,类,方法等)应该对扩展开放,对修改关闭。 开闭原则(OCP:Open-Closed Principle)是指在进行面向对象设计(OOD...

rbq10829的专栏 210

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

The Open-Closed Principle (OCP) - OO设计的开闭原则---类设计原则

Software entities (classes, modules, function, etc.) should be open for extension, but closed for modification. 软件实体(模块,类,方法等)应该对扩展开放,对修改关闭。 开闭原则(OCP:Open-Closed Principle)是指在进行面向对象设计(OOD:Obj...

SuperWangq的专栏 194

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

我理解的开闭原则 Open-Closed Principle

在开发新的功能时我们常常会提到开闭原则,即一个类对于拓展是开放的,对于修改是关闭的,"open for extension but closed for modification"。有人可能会问拓展一个类的功能不就是要修改这个类吗?那开闭原则怎么会成立呢? 我的理解是当我们需要给一个类添加新的功能的时候,最好的办法不是直接修改这个类的代码,应该考虑用一个新类去实现新的功能。最终的效果是一...

qq_20694641的博客 503

The Open-Closed Principle (OCP) - OO设计的开闭原则

 Software entities (classes, modules, function, etc.) should be open for extension, but closed for modification.软件实体(模块,类,方法等)应该对扩展开放,对修改关闭。 开闭原则(OCP:Open-Closed Principle)是指在进行面向对象设计(OOD:Object Ori

siva945的专栏 412

The Open-Closed Principle (OCP) - OO设计的开闭原则  <br>本文来自德仔网 http://www.dezai.cn/Cha...

开闭原则(OCP:Open-Closed Principle)是指在进行面向对象设计(OOD:Object Oriented Design)中,设计类或其他程序单位时,应该遵循:- 对扩展开放(open)- 对修改关闭(closed)的设计原则。 开闭原则是判断面向对象设计是否正确的最基本的原理之一。 根据开闭原则,在设计一个软件系统模块(类,方法)的时候,应该可以在不修改原有的模块(修改关闭...

xizhiguang的博客 197

C++ 开闭原则代码例子 Open/Closed Principle

// Open-closed Principle // entities should be open for extension, but closed for modification #include <iostream> #include <string> #include <vector> enum class Color { Red, Green...

a553455的博客 622

【SOLID原则前端中的应用】开闭原则(Open/Closed Principle)- vue3示例

基本通知组件:这个组件是对扩展开放的,对修改关闭的。它提供了一个基础的通知样式,并通过type属性来控制不同类型的通知样式。特定类型的通知组件和:这些组件通过扩展来实现特定类型的通知,而不需要修改的代码。我们使用了插槽(slots)来传递内容,从而实现灵活的内容插入。通过这种方式,我们可以在不修改已有代码的情况下,通过创建新的组件来扩展功能,完全遵循了开闭原则。这不仅使代码更加稳定和可维护,还提升了代码的可扩展性。

无言非影的博客 612

"围观"设计模式(6)--开闭原则(Open/Closed Principle)

在面向对象编程领域中,开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。该特性在产品化的环境中是特别有价值的,在这种环境中,改变源代码需要代码审查,单元测试以及诸如此类的用以确保产品使用质量的过程。遵循这种原则的代码在扩展时并不发生改变,因此无需上述的过程。 开闭原则的命名被应用在两种方式上

王洋的专栏 5416

Bob Tarr:一些面向对象的设计法则(4):Open-Closed Principle

法则3:开放-封闭法则(OCP) 软件组成实体应该是可扩展的,但是不可修改的。 [ Software Entities Should Be Open For Extension, Yet Closed For Modification ] 开放-封闭法则 1.开放-封闭法则认为我们应该试图去设计出永远也不需要改变的模块。

bookjohn的专栏 865

【zz】Easy way to understand open/closed principle :O of S.O.L.I.D

Introduction This is just an attempt to make the audience understand the open/closed principle going through step by step refactoring to ultimately coming up with best design adhering OCP.Open/Closed principle (OCP) states "Software entities should be open

RR的专栏 823

OOD-Principles-In-Swift开闭原则实战:扩展Swift应用而不修改源码

OOD-Principles-In-Swift是一个基于Uncle Bob文章的面向对象设计原则(SOLID)实践项目,其中开闭原则(Open Closed Principle)是构建灵活可扩展Swift应用的核心指南。开闭原则强调软件实体(类、模块、函数)应该对扩展开放,但对修改关闭,这意味着我们可以通过添加新代码来扩展功能,而不是修改现有工作代码。 ## 🌟 理解开闭原则:为何它对Swif

gitblog_00187的博客 476

类设计原则

 引用地址:http://www.lifevv.com/sysdesign/list/20071211204258370.html 一、Liskov Substitution Principle (LSP) - OO设计的里氏替换原则Functions that use pointers or references to base classes must be

山炮之家 637

《HEAD FIRST深入浅出面向对象分析与设计》读书笔记

曾经在园子里给大家推荐了一本《HEAD FIRST深入浅出设计模式》,现在回想,里面的很多东西都忘个精光。知识的学习就是不断重复,加深理解,实践中掌握和更新的循环。由于很久不做项目了,也没怎么用。为了应付笔试,看了C++primer一个多月,终于有种不心虚的感觉。在踏实的心情中,又看了尘封在书桌很久的《HEAD FIRST深入浅出面向对象分析与设计》。因为同为HEAD FIRST系列的书籍,就在读...

weixin_30670925的博客 240

软考高级架构设计师知识点背诵

即在逆向工程所获信息的基础上修改或重构已有系统,产生系统的一个。功能及程序段之间关系的信息。领域级则反映程序分量或程序诸实体与。之间相互依赖关系的信息,如调用图、结构图等。,指从已有程序中抽象出关于。

Stay hungry,stay young 494
上一篇: OO设计原则 — Single Responsibility Principle:单一职责原则(SRP)
下一篇: OO设计原则 -- Liskov Substitution Principle: 里氏替换原则(LSP)
行云间
博客等级 码龄12年 438粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值