一些面向对象的设计法则(3)

国产DSP替代TI C2000实战:选型、移植与调试全攻略 从嵌入式控制的核心需求出发,DSP(数字信号处理器)凭借实时运算能力在电机控制、数字电源等工业场景中扮演关键角色。随着供应链波动加剧,如何实现从TI C2000系列到国产DSP的无缝迁移,成为工程师关注焦点。本文梳理了DSP替代选型中的关键维度,包括内核架构、外设兼容性、开发工具链适配,并结合实际项目分享了CAN、SPI等外设调试经验。同时介绍了进芯电子、中科昊芯等国内厂商的产品特点,给出了从28335到28379D的移植排障思路,帮助读者降低替换风险,提升产品供应链安全。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

法则3:开放-封闭法则(OCP)
软件组成实体应该是可扩展的,但是不可修改的。
[ Software Entities Should Be Open For Extension, Yet Closed For Modification ]

  • 开放-封闭法则


    1.开放-封闭法则认为我们应该试图去设计出永远也不需要改变的模块。
    2我们可以添加新代码来扩展系统的行为。我们不能对已有的代码进行修改。
    3.符合OCP的模块需满足两个标准:
    4.可扩展,即"对扩展是开放的"(Open For Extension)-模块的行为可以被扩展,以需要满足新的需求。
    5.不可更改,即"对更改是封闭的"(Closed for Modification)-模块的源代码是不允许进行改动的。
    6.我们能如何去做呢?
    a.抽象(Abstraction)
    b.多态(Polymorphism)
    c.继承(Inheritance)
    d.接口(Interface)

    7. 一个软件系统的所有模块不可能都满足OCP,但是我们应该努力最小化这些不满足OCP的模块数量。
    8.开放-封闭法则是OO设计的真正核心。
    9.符合该法则便意味着最高等级的复用性(reusability)和可维护性(maintainability)。

  • OCP示例

    1. 考虑下面某类的方法:


    2.以上函数的工作是在制订的部件数组中计算各个部件价格的总和。
    3.若Part是一个基类或接口且使用了多态,则该类可很容易地来适应新类型的部件,而不必对其进行修改。
    4.其将符合OCP

    5. 但是在计算总价格时,若财务部颁布主板和内存应使用额外费用,则将如何去做。
    6.下列的代码是如何来做的呢?


    7.这符合OCP吗?
    8.当每次财务部提出新的计价策略,我们都不得不要修改totalPrice()方法!这并非"对更改是封闭的"。显然,策略的变更便意味着我们不得不要在一些地方修改代码的,因此我们该如何去做呢?
    9.为了使用我们第一个版本的totalPrice(),我们可以将计价策略合并到Part的getPrice()方法中。

    10.这里是Part和ConcretePart类的示例:

    11. 但是现在每当计价策略发生改变,我们就必须修改Part的每个子类!
    12.一个更好的思路是采用一个PricePolicy类,通过对其进行继承以提供不同的计价策略:

    13.看起来我们所做的就是将问题推迟到另一个类中。但是使用该解决方案,我们可通过改变Part对象,在运行期间动态地来设定计价的策略。
    14.另一个解决方案是使每个ConcretePart从数据库或属性文件中获取其当前的价格。

  • 单选法则

    单选法则(the Single Choice Principle)是OCP的一个推论。
    无论在什么时候,一个软件系统必须支持一组备选项,理想情况下,在系统中只能有一个类能够知道整个的备选项集合。

一些面向对象的设计法则:(Bob Tarr 著,outmyth 译)

法则1:优先使用(对象)组合,而非(类)继承
法则2:针对接口编程,而非(接口的)实现
法则3:开放-封闭法则(OCP)
法则4:Liskov替换法则(LSP)

嵌入式回调机制与C语言面向对象驱动设计 回调机制是嵌入式系统实现事件驱动与软硬件解耦的核心范式,其本质是通过函数指针将硬件事件(如UART接收完成、GPIO边沿触发)异步通知至应用层,避免轮询阻塞并提升实时性。在STM32等MCU平台中,它依托HAL库中断框架、NVIC优先级配置及EXTI链路协同工作,构成从外设寄存器到业务逻辑的标准化契约。该机制不仅支撑高可靠通信与人机交互,更是C语言面向对象(OOC)封装的基础——通过结构体描述硬件资源、函数指针实现多态、宏定义达成实例化,可构建可复用、可测试、易移植的分层驱动框架。本文聚焦回调原理落地与OO 阅读详情

相关推荐

手把手教你调试RTL8201F:从芯片手册解读到LWIP驱动移植

本文详细解析了RTL8201F PHY芯片的开发流程,从寄存器配置到LWIP驱动移植,重点介绍了RMII模式下的特殊配置要点和调试技巧。通过实战案例和高级调试方法,帮助工程师解决网络性能问题,实现与FreeRTOS+LWIP协议栈的稳定集成。

ik678901234的博客 972

复习笔记(五)——C++多态和虚函数

静态绑定与动态绑定 静态绑定: 编译时就能确定一条函数调用语句要调用的函数;在程序编译时多态性体现在函数和运算符的重载上。 动态绑定: 运行时才能确定函数调用语句调用的函数;程序运行时的多态性通过继承和虚函数来体现。 多态 什么是多态? 顾名思义就是同一个事物在不同场景下的多种形态。 多态性的概念 多态性是面向对象程序设计的重要特征之一。 多态性概念:具有继承关系的类,其对象对同一个函数调用可以作出不同的响应 -同一个函数调用——同一条函数调用语句 -不同的响应——执行不同的函数 多态性的优点 ①多态性有

别呀的博客 414

水文模型大合集---SWAT模型、VIC模型、HEC-HMS模型、HSPF模型、FVCOM模型、Delft3D模型、HYPE模型.......

1.1 面源污染概要1.2 SWAT模型及应用1.3 SWAT模型原理1.4 SWAT模型输入文件1.5 ArcGIS与SWAT关系。

jwwkyjspt的博客 4362

一些面向对象的设计法则 学习笔记

一些面向对象的设计法则 Bob Tarr 著 Favor Composition Over Inheritance 组合的优点          容器类仅能通过被包含对象的接口来对其进行访问。          对装性好。          实现上的相互依赖性比较小。(译者注:被包含对象与容器对象之间的依赖关系比较少) 组合的缺点          从而导致系统中的对象过多。

dananhai381的专栏 492

Jenkins插件下载慢?3分钟搞定国内镜像加速(含华为/腾讯/清华源对比)

本文详细介绍了如何通过国内镜像源加速Jenkins插件下载,包括华为云、腾讯云和清华源等主流镜像站的性能对比及一键配置方案。通过实测数据展示华为云镜像站表现最佳,下载速度达19.4MB/s,并提供sed命令、管理界面配置和Docker定制三种高效加速方案,帮助开发者快速解决插件下载慢的问题。

sql99的博客 320

PTA 学生信息的那些操作:添加记录(结构体)

这是河南工业大学自主命题的一道基础题,题目如下: 有一学生成绩表,包括学号、姓名、3门课程成绩。已知该成绩表按学号升序排序。请编程实现,添加一个新的学生信息,且使成绩表仍按学号有序;若待添加的学号与已有学号重复,则输出错误信息,拒绝添加。 输入格式: 首先输入一个整数n(1<=n<=100),表示学生人数; 然后输入n行,每行包含一个学生的信息:学号(12位)、姓名(不含空格且不超过20位),以及3个整数,表示3门课成绩,数据之间用空格隔开。 最后一行输入一个待添加的学生信息,包括学号

weixin_63617665的博客 3156

面向对象的7大设计原则

法则1:优先使用(对象)组合,而非(类)继承 [ Favor Composition Over Inheritance ] 组合 n (对象)组合是一种通过创建一个组合了其它对象的对象,从而获得新功能的复用方法。 n 将功能委托给所组合的一个对象,从而获得新功能。 n 有些时候也称之为“聚合”(aggregation)或“包容”(containment),尽管有些作者对这些术语赋予了专门

TimeTDIT的博客 507

使用SpringBoot+Vue3开发项目(1)---- 设计用户注册和登录的接口及页面

本文基于黑马大事件项目介绍如何使用SpringBoot+Vue3来实现前后端联调的登录与注册操作。

记得开心一点嘛的博客 3644

面向对象的设计法则3[Software Entities Should Be Open For Extension, Yet Closed For Modification ]

法则3:开放-封闭法则(OCP)软件组成实体应该是可扩展的,但是不可修改的。[ Software Entities Should Be Open For Extension, Yet Closed For Modification ]开放-封闭法则1.开放-封闭法则认为我们应该试

woxiaozhi的专栏 1376

云桌面如何部署?云桌面系统方案部署详细教程

云桌面作为一种比较新的技术工具,核心解决的场景是方便设计师的灵活办公,本身技术就是非常的灵活性,所以在安装部署方面青椒云也做到了十足的灵活。

2301_79113726的博客 1637

【异常】Claude Code CLI工具 模型加载异常 /init报错排查与完整解决方案 There‘s an issue with the selected model (glm-5). It

此类跨厂商模型配置报错,核心诱因是API生态的兼容性不匹配。优先使用工具原生支持的模型体系,可快速解决90%以上的同类报错;若需跨厂商使用目标模型,需完成API端点、鉴权密钥、模型ID的全链路适配,确保全流程配置合规,即可完成异常修复。

奶爸的编程之路,也就一周冷个三天 3705

一些面向对象的设计法则

一些面向对象的设计法则 Bob Tarr 著            outmyth 译     法则1:优先使用(对象)组合,而非(类)继承组合n         (对象)组合是一种通过创建一个组合了其它对象的对象,从而获得新功能的复用方法。n         将功能委托给所组合的一个对象,从而获得新功能。n         有些时候也称之为“聚合”(aggre

ewolf的工作专栏 1059

基于深度学习的火焰检测系统:YOLOv8 + UI界面 + 数据集详解

YOLO(You Only Look Once)是一种端到端的目标检测算法,其最大优势在于将目标检测任务转化为一个回归问题,可以在一次前向传播中同时完成目标定位和分类。YOLOv8是YOLO系列中的最新版本,相比之前的版本,YOLOv8在精度和推理速度上都做了显著提升,特别是在小物体检测方面表现更加优秀。实时性:YOLOv8具有较高的推理速度,适用于实时火焰检测。高精度:相较于YOLOv7,YOLOv8在精度和小物体检测上有所改进。简单易用:YOLOv8的API简单直观,易于集成和使用。

YOLO 660

面向对象设计/编程的四大法则

一些面向对象的设计法则 Bob Tarr 著outmyth 译         法则1:优先使用(对象)组合,而非(类)继承[ Favor Composition Over Inheritance ]组合n         (对象)组合是一种通过创建一个组合了其它对象的对象,从而获得新功能的复用方法。n         将功能委托给所组合的一个对象,从而获得新功能。n         有些时候也称

T.johnny的专栏 922

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Bob Tarr:一些面向对象的设计法则(3):Program To An Interface, Not An Implementation

法则2:针对接口编程,而非(接口的)实现 [ Program To An Interface, Not An Implementation ] 接口 1.接口是一个对象在对其它的对象进行调用时所知道的方法集合。 2.一个对象可以有多个接口(实际上,接口是对象所有方法的一个子集) 3.类型是对象的一个特

bookjohn的专栏 1347

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ESP32芯片还是模组?从SoC选型到可下单料号的全流程指南

在物联网硬件开发中,SoC与模组的选择直接关系到产品成本、研发周期和上市速度。ESP32作为应用广泛的无线SoC,裸芯片仅集成处理器与射频前端,仍需晶振、Flash、天线及匹配网络等外围电路构成最小系统,而模组则是已验证的完整系统级封装。从性价比角度看,芯片方案能降低BOM成本,却对射频调试、认证测试和批量一致性提出更高要求;模组方案则将复杂度前置,以适度溢价换取更快的开发迭代与更稳妥的无线性能。无论是做智能家居网关、传感器节点还是边缘AI设备,工程师都需综合考量年出货量、团队射频能力以及量产认证路径。本文

weixin_33850015的博客 465

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

《软件设计精要与模式》再版前言

我希望告别冗长的前言,仅述说第二版的变更。写作第二版的我,疯狂地吸收了诸多大师的设计思想,这一点可以从参考文献的前后差别看到端倪。这两年以来,我又参与了几个项目的设计与开发工作,所谓“实践出真知”,在佐证大师观点的同时,自己对设计的认识更进了一步。或许,第二版不会比第一版优秀太多,但至少会减少诸多不足。囿于版本,我无法做出新的突破。我期待能创作一本全新的书,全面论述我对软件设计的认识。现在的我...

weixin_33890526的博客 86

迪米特法则

也称为最少知道原则(Least Knowledge Principle 简写LKP) 迪米特法则是用来干什么的? 他的初衷是:降低类之间的耦合。 以我目前的视野,我认为迪米特法则就是一个在类创建方法和属性时需要遵守的法则。     什么是迪米特法则? 迪米特法则由三个守则组成: 守则1:是自己的就是自己的 如果一个方法放在本类中,即不增加类间关系,也对本类不产生负面影响就放在本类...

weixin_33850015的博客 330

【设计原则】面向对象的设计原则(六原则一法则)

(一)单一职责原则:一个类只做它该做的事情。 单一职责想表达的就是“高内聚”,所谓高内聚就是一个代码模块只完成一项功能,在面向对象中,如果只让一个类完成它该做的事,而不涉及与它无关的领域就是践行了高内聚原则,这个类就只有单一职责。这个就好比一辆车由成千山万的元件组成,而每一种元件都有它自己特殊的用途,比如火花塞就是用来引燃的,气缸驱动杆就是用来压缩的....各个组件都是可以拆卸和重新组装的,通过...

小猿备忘录 1742

面向对象的“六原则一法则“

面向对象的"六原则一法则" 1.单一职责原则 一个类只做它该做的事情。(单一职责原则想表达的就是"高内聚",写代码最终极的原则只有六个字"高内聚、低耦合",就如同葵花宝典或辟邪剑谱的中心思想就八个字"欲练此功必先自宫",所谓的高内聚就是一个代码模块只完成一项功能,在面向对象中,如果只让一个类完成它该做的事,而不涉及与它无关的领域就是践行了高内聚的原则,这个类就只有单一职责。我们都知道一句话叫"因为专注,所以专业",一个对象如果承担太多的职责,那么注定它什么都做不好。这个世界上任何好的东西都有两个特征,一个是

weixin_43507224的博客 2853

一些面向对象的设计法则(2)

法则2:针对接口编程,而非(接口的)实现[ Program To An Interface, Not An Implementation ] 接口 1.接口是一个对象在对其它的对象进行调用时所知道的方法集合。2.一个对象可以有多个接口(实际上,接口是对象所有方法的一个子集)3.类型是对象的一个特定的接口。4.不同的对象可以具有相同的类型,而且一个

BeautySpring的专栏 698
上一篇: 一些面向对象的设计法则(2)
下一篇: Java程序员(SCJP)和开发员(SCJD)认证
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值