软件设计之 开放-封闭原则(OCP)

什么是软件产品设计? 软件产品设计指的是将客户或用户的需求转化为软件产品的详细设计方案,为软件产品的制作提供了具体的、可行的解决方案。它是在软件开发过程中非常重要的一个阶段,其主要目标是为开发人员提供清晰、准确、详细的软件开发目标,并最大程度地减少后期重构的成本。 阅读详情

开放封闭原则:软件实体是可以扩展但是不可以修改。

该原则有两个特性:

1.对于扩展是开放的

2.对于更改是封闭的


往往我们在设计程序的时候都是根据现有的需求所设计的,以后需求的改变必然会令到软件的结构有所改变。怎样设计才能面对需求的改变却可以保持相对稳定,从而使得系统可以在第一个版本以后不断推出新版本呢? 开放封闭原则可以给我们答案。


在实际开发中,绝对的对修改关闭是不可能的无论模块多么“封闭”,都会有一些无法对之关闭的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该对那种变化封闭做出选择。他必需先猜测出最有可能发生的变化种类,然后构造抽象来隔离哪些变化。


比方说,我们完成了一个功能,但是随着需求不断改动发现需要经常修改这个类,那么就要想办法隔离这些变化。在最初编写代码时,假设变化不会发生。当变化发生的时候我们就创建抽象来隔离以后发生的同类变化。


开放封闭原则的精髓所在就在于:面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。


一般来说,我们希望的是在开发工作展开不久就知道可能发生的变化,查明可能发生的变化所等待的时间越长,要创建正确的抽象就越困难。

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

设计开放性问题促进深度学习的三重境界.pdf 立即下载

相关推荐

别再到处找资源了!WinCC 7.5 SP2官方下载与Windows 10保姆级安装避坑指南

本文提供了WinCC 7.5 SP2在Windows 10上的官方下载与安装全流程指南,重点解决了资源获取难、系统兼容性问题及分卷压缩处理等常见痛点。通过详细的步骤和实用技巧,帮助用户顺利完成安装并优化配置,适用于工控领域的学习者和从业者。

weixin_32924297的博客 477

软件设计原则 — 开放封闭原则

一、开闭原则的定义 Software entities like classes,modules and functions should be open for extension but closed for modifications 一个软件实体、如类、模块、函数等应该对扩展开放,对修改封闭。 这也是开放封闭原则的核心思想:对扩展开放,对修改封闭. 二、 如何实现开放封闭原则 “需求总是变化”,“世界上没有一个软件是不变的”。这里投射出的意思是:需求总是变化的,可是对于软件设计者来说,如何才能

菜鸟厚非 1557

PyTorch ModelNet点云数据集加载实战:从下载到Dataset类完整实现

在三维视觉与点云处理领域,数据集是算法研发的基石。ModelNet作为三维物体分类的基准数据集,其地位类似于图像领域的MNIST,是入门和评估模型性能的通用标准。理解其数据格式与加载原理,是进行点云分类、分割等任务的关键前置步骤。通过PyTorch的Dataset类,开发者可以构建高效的数据管道,将原始点云文件转换为神经网络可直接处理的张量格式,这一过程涉及数据采样、归一化、特征组装等核心操作,直接影响模型的训练效率和最终性能。本文聚焦于ModelNet10/40数据集,详细解析其目录结构,并提供一套稳健的

weixin_29032337的博客 280

软件设计原则--开放封闭原则

面向对象软件设计遵循的原则 1.开放闭合原则 全称:“Open-Closed Principle” 开放-封闭原则 说明:对扩展开放,对修改关闭。 优点:按照OCP原则设计出来的系统,降低了程序各部分之间的耦合性,其适应性、灵活性、稳定性都比较好。当已有软件系统需要增加新的功能时,不需要对作为系统基础的抽象层进行修改,只需要在原有基础上附加新的模块就能实现所需要添加的功

lzq19931007的专栏 935

Windows 11 RDP Wrapper 配置教程与常见问题解决方法

解锁家庭版RDP主机功能(Windows 11家庭版原生不支持作为RDP服务器)突破单用户连接限制,实现多用户同时远程登录(类似服务器版功能)它不修改系统核心文件,通过注入方式工作,相对安全可靠。RDP Wrapper是Windows 11家庭版用户启用远程桌面、突破单用户限制的高效工具。遵循本文步骤可快速完成配置,遇到问题时按常见问题排查方案逐一解决,多数问题可通过更新配置文件或重启服务解决。若长期使用,建议关注官方GitHub仓库的更新,确保兼容性和安全性。

weixin_41521681的博客 1361

合并数组与非合并数组——SystemVerilog

合并型数组(packed): — 合并型数组可以实现连续的存储,赋值时不需要用 '{ }。 //合并型数组 bit [3] [7:0] b_pack // 表示3行 x 8列的数组,[3]是高维度(高维度),[7:0]是低维度(第一维) 数组中,数据排列为{b_pack[3],b_pack[2],b_pack[1],b_pack[0]},其中每个b_pack为8个bit; bit是二值逻辑,每位bit只占据1位。故24位bit只占据一个word(一般一个word为32bit)的存储空间

SummerXRT的博客 7638

深入理解设计原则之开闭原则(OCP)【软件架构设计】

开闭原则(Open Closed Principle, OCP),又称为对扩展开放、对修改关闭原则。开闭原则即是SOLID原则中最难理解、最难掌握的,又是最有用的。之所以说开闭原则最难理解,是因为“怎样的代码改动才被定义为扩展?怎样代码的改动才被定义为修改?怎样才算满足或违反开闭原则?修改代码就一定意味着违反开闭原则吗?等问题都比较难理解。之所以说开闭原则最难掌握,是因为如何做到对扩展开放,对修改关闭?如何在项目中灵活应用开闭原则避免在追求高扩展的同时影响代码的可读性等问题都很难掌握。

weixin_30197685的博客 2342

FPGA从入门到精通(2) - LUT

LUT:(look up table) 查找表 今天我要讲的与FPGA CLB相关的第一节LUT。根据上一节课的课程大纲,讲CLB应该是讲SLICEL(SLICEM)。不过当我打开用户手册,看了一下SLICE的结构(图一),一眼望去,这是分分钟会劝退入门者。为了让读者更好的接受以及理解,所以我打算先讲清楚它里面的每一个基本单元(LUT, 进位链,MUX,寄存器,几乎所有的FPGA器件的SLICE都是这四大件组成,只是组合不太一样而已),然后再将他们联系在一起,和读者一步步推倒出SLICE的结构。 图1​

Jasper灬兰的博客 1万+

软件设计六大基本原则

开放封闭原则是架构设计中的重要原则,通过对已有代码的扩展而不是修改来实现新功能。它可以通过接口和抽象类来实现代码的模块化和解耦,使代码具有良好的可扩展性和可维护性。在实践中,我们可以借鉴优秀的开源框架的设计,通过提供扩展点和插件机制来实现开放封闭原则。单一职责原则是架构设计中的重要原则,要求一个类只负责一个单一的职责或功能。这样的设计使得代码更加清晰、可维护和可扩展。通过拆分类,在每个类中实现单一的职责,可以提高代码的内聚性和松耦合性,从而提高代码的质量和可测试性。

静幽水 3833

怎样自己亲手搭建一个四比特加法器

如何用三极管搭建一个四比特加法器 一、前言 作为大一上学期第一个大作业,最终还是拖到了冬学期的第八周,从第七周的周六开始,一直到第八周周五上午课上展示,中间连续熬了好几天的夜,另外,白天凡是有时间都用在研究它了,最终大约是用了30个小时,完成了这个四比特加法器的“从零到一”。 最终,小组得分92,个人分数100(贡献比35%),也不枉自己投入的心血 二、器材 电阻 1 包(10kΩ×100,1kΩ×50) 三极管 1 包(9013×100,LED×6) 跳线 3 短 1.5 长 电源 1 个 USB 线

qq_34771124的博客 1万+

STM32F103C8T6 驱动2位共阳数码管(基于 74HC595 和 PNP 三极管)

整体设计思路是通过 STM32F103C8T6 控制 74HC595 和 PNP 三极管,实现共阳数码管的显示功能。最初的电路设计中,三极管发射极接 5V 电源,这导致了数码管两位显示相同数字的问题。数码管能够稳定显示 0-99的数字。

qq_40289410的博客 2212

开放封闭原则

开发封闭原则(Open-Closed Principle OCP) Software entities(classes,modules,functions etc) should open for extension ,but close for modification.    什么意思呢?    所谓开放封闭原则就是软件实体应该对扩展开发,而对修改封闭。开放封闭原则是所有

Guido_GT的专栏 915

uniapp:实现APP获取陀螺仪数据、加速传感器、线性加速传感器,uniApp实时监听陀螺仪【XYZ】数据及停止监听与资源释放等功能示例源码,根据需求做功能(完美兼容Android安卓、苹果ios)

uniapp陀螺仪,uniapp加速传感器,uniapp线性加速传感器,APP陀螺仪数据,uniapp app 端获取陀螺仪数据示例代码,手机中获取陀螺仪的数据,uniApp实时获取陀螺仪xyz数据,android陀螺仪方向,获得陀螺仪传感器,处理传感器数据,停止监听与资源释放,Android使用陀螺仪,uniapp苹果ios陀螺仪,uni-app设备之(加速计,罗盘,陀螺仪)插件安卓/IOS APP提供了获取陀螺仪数据的能力,手机陀螺仪传感器获得手机自身旋转的角度,陀螺仪获取旋转角度,陀螺仪、加速度传感器

✅ 精选推荐文章 4266

[9]OCP:开放--封闭原则

《敏捷软件开发 原则、模式与实践(c#版)》 第9章 OCP:开放--封闭原则 定义: "软件实体(类、模块、函数等)应该是可以扩展的,但是不可以修改。"(P93) OCP概述 遵循开放--封闭原则设计出的模块具有两个主要的特征。它们是 (1)对于扩展是开放的(open for extension)。这意味着模块的行为是可以扩展的。当应用的需求...

aitinuo1702的博客 231

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【开放-封闭原则】使用开放封闭原则开发实例【原创】

摘要:主要是参考列旭松、陈文著的《PHP核心技术与最佳实践》的2.1.3节。1.1 简介面向对象设计的五大原则分别是单一指责原则(SRP)、接口隔离原则(ISP)、开放-封闭原则(OCP)、替换原则(LSP)、依赖倒置原则(DIP),这五大原则也是23种设计模式的基础。而开放-封闭(Open-Close Principle,OCP)原则的基本思想是:Open(Open for extension)

一直加班的程序猿 1899

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

(转)重述——开放封闭原则

[b][size=medium]开发封闭原则(Open-Closed Principle OCP)[/size][/b] Software entities(classes,modules,functions etc) should open for extension ,but close for modification. 什么意思呢? 所谓开放封闭原则就是[b]软...

雕刻时间的专栏 194

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

开放封闭原则--OCP

一、OCP简介(OCP--Open-Closed Principle):Software entities(classes,modules,functions,etc.) should be open for extension, but closed for modification。软件实体应当对扩展开放,对修改关闭,即软件实体应当在不修改(在.Net当中可能通过代理模式来达到这个

NETZHOU的专栏 1063

软件设计原则----开-闭原则(OCP)

设计一个模块时,应当使该模块在不被修改的前提下被扩展,即可在不必修改源代码的情况下改变该模块的行为。  陈述:  软件实体(类、模块、函数等)应该是可以扩展的,同时还可以是不必修改的,更确切的说,函数实体应该: (1)对扩展是开放的 当应用的需求变化时,我们可以对模块进行

极简Qt 1万+

设计模式 开放封闭原则 OCP

设计模式,开放封闭原则 OCP

xiaopei的博客 1133

敏捷软件开发第二部分(OCP:开放-封闭原则)

巴拉巴拉傻逼渣,这周看了OCP跟LSP两个原则,但后者依旧看的不太明白,重新继续看,还有撸撸码。这周就记录一下OCP原则啦。OCP:开放-封闭原则(The Open-Closed Principle)遵循该原则设计出来的模块具有两个主要的特征 (1)对于拓展是开放的。这表示着一个模块的行为是可拓展的,当有需求时,可对该模块进行拓展,使其具有满足那些新改变的行为。 (2)对于修改是封闭的。对模块行

qq_16399023的博客 427

2.3 开放封闭原则

2.3.1 引言 无论如何,开放封闭原则(OCP,Open Closed Principle)都是所有面向对象原则的核心。软件设计本身所追求的目标就是封装变化、降低耦合,而开放封闭原则正是对这一目标的最直接体现。其他的设计原则,很多时候是为实现这一目标服务的,例如以Liskov替换原则实现最佳的、正确的继承层次,就能保证不会违反开放封闭原则。 2.3.2 引经据典 ...

dcryefx44317的博客 168

OCP开放-封闭原则

 软件实体(类,模块,函数等)应该是可扩展的,但是不可修改优点:通过扩展已有软件系统,可以提供新的行为,以满足对软件的新的需求,使变化中的软件有一定的适应性和灵活性。已有软件模块,特别是最重要的抽象层模块不能再修改,这使变化中的软件系统有一定的稳定性和延续性。下边举一个从不符合ocp到符合ocp的例子,shap示例在很多书中提到,我们这里用它来阐明ocp。不符合ocp的代码如下: clas

方明的专栏 1168

面向对象设计原则--开放封闭原则

开放封闭原则(Open-Closed Principle OCP) Software entities(classes,modules,functions etc) should open for extension ,but close for modification.    什么意思呢?    所谓开放封闭原则就是软件实体应该对扩展开发,而对修改封闭。开放封闭原则是所有面向

Laughing_2012的专栏 606

面向对象设计原则--开放封闭原则(OCP)

顾名思义,既开放又封闭,对扩展是开放的,对更改是封闭的!扩展即扩展现行的模块,当我们软件的实际应用发生改变时,出现新的需求,就需要我们对模块进行扩展,使其能够满足新的需求!更改封闭即是在我们对模块进行扩展时,勿需对源有程序代码和DLL进行修改或重新编译文件!这个原则对我们在设计类的时候很有帮助,坚持这个原则就必须尽量考虑接口封装,抽象机制和多态技术!举个典型的例子,现在我们要写一个机动车类,机动车

Ben·Yu 笨鱼 BLOG 688
上一篇: 软件设计之 单一职责原则(SRP)
下一篇: Android:四大组件之-----广播(Broadcast)
javy_codercoder
博客等级 码龄11年 52粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值