接口、实现-面向对象的5条基本设计原则 -by小雨

本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~

    这几天从新看了一遍《谎话计划式模》,发明果然有不同的感悟,而且自己也上彀找了《迅速软件开发—准则、式模与践实》一书来看,那本书的言序中有一段话我得觉很有情理:“美的西东比丑的西东创立起来更便宜,也更快捷。”计划一个软件不关要求追代码的优雅问题,更关乎生产成本等。术技巨匠们在对软件架构的究研中阅历了很长时光的索摸,从面向程过到面向对象,从计划准则到计划式模,总结了多许计划上的经典则法,而我们就只是站在人巨的肩膀上望眺远方而已。

从《谎话计划式模》中,大家定一会发明其中的经典的23个式模当面,其实都循遵着一些基本的准则的。而计划准则又由计划式模来实现,这就是者二成相辅相的关系,所以懂得准则对于懂得式模有具绝对的指导意思。以下是我在浏览中程过的一些学习记笔,自以为有定一情理。

最基本的计划准则有5条,分别是:单一责职准则、开放闭封准则、依附置倒准则、接口断绝准则和Liskov替换准则

单一责职准则

对于单一责职准则,其核心想思为:一个类,最好只做一件事,只有一个引发它的化变。单一责职准则可以做看是低合耦、高内聚在面向对象准则上的申引,将责职定义为引发化变的原因,以进步内聚性来加增引发化变的原因。责职过量,可能引发它化变的原因就越多,这将致导责职依附,相互之间就产生影响,从而大大损伤其内聚性和合耦度。常通意思下的单一责职,就是指只有一种单一功能,不要为类实现过量的功能点,以保障实体只有一个引发它化变的原因。

注专,是一个人优秀的质品;一样的,单一也是一个类的优秀计划。交杂不清的责职将使得代码看起来特殊别扭牵一发而动全身,有失美感和必定致导丑恶的统系错误风险。

开放闭封准则

    对于开放闭封准则,它是面向对象全部准则的核心,软件计划说到底求追的目标就是封装化变、低降合耦,而开放闭封准则就是这一目标的最直接现体。

开放闭封准则,其核心想思是:软件实体该应是可扩展的,而可不修改的。也就是,对扩展开放,对修改闭封的

因此,开放闭封准则要主现体在两个方面:1、对扩展开放,意味着有新的求需或化变时,可以对现有代码停止扩展,以应适新的情况。2、对修改闭封,意味着类一旦计划成完,就能够立独成完其作工,而不要对其停止任何试尝的修改。

实现开开放闭封准则的核心想思就是对象抽程编,而不对体具程编,因为象抽对相定稳。让类依附于牢固的象抽,所以修改就是闭封的;而通过面向对象的继承和多态机制,又可以实现对象抽类的继承,通过覆写其方法来转变固有行为,实现新的拓展方法,所以就是开放的。

“求需老是化变”没有变不的软件,所以就须要用闭封开放准则来闭封化变足满求需,同时还能坚持软件部内的封装体制定稳,不被求需的化变影响。

依附置倒准则

    对于依附置倒准则,其核心想思是:依附于象抽。体具而言就是高层块模不依附于底层块模,者二都同依附于象抽;象抽不依附于体具,体具依附于象抽。

我们道知,依附定一会存在于类与类、块模与块模之间。当两个块模之间存在密紧的合耦关系时,最好的方法就是分离接口和实现:在依附之间定义一个象抽的接口使得高层块模用调接口,而底层块模实现接口的定义,以此来有效制控合耦关系,到达依附于象抽的计划目标。

象抽的定稳性决议了统系的定稳性,因为象抽是变不的,依附于象抽是面向对象计划的髓精,也是依附置倒准则的核心。

依附于象抽是一个通用的准则,而某些时候依附于细节则是免难所在的,必须权衡在象抽和体具之间的弃取,方法不是一层变不的。依附于象抽,就是对接口程编,不要对实现程编。

接口断绝准则

对于接口断绝准则,其核心想思是:用使多个小的专门的接口,而不要用使一个大的总接口。

体具而言,接口断绝准则现体在:接口该应是内聚的,该应防止“胖”接口。一个类对另外一个类的依附该应建立在最小的接口上,不要迫强依附用不的方法,这是一种接口染污。

接口有效地将细节和象抽断绝,现体了对象抽程编的一切处好,接口断绝调强接口的单一性。而胖接口存在显著的弊病,会致导实现的类型必须完整实现接口的全部方法、属性等;而某些时候,实现类型并非须要全部的接口定义,在计划上这是“糟蹋”,而且在实行上这会带来在潜的问题,对胖接口的修改将致导一连串的户客端程序须要修改,有时候这是一种灾害。在种这情况下,将胖接口分解为多个特色的制定化方法,使得户客端仅仅依附于它们的际实用调的方法,从而解除了户客端不会依附于它们用不的方法。

分离的手腕要主有以下两种:1、委托分离,通过加增一个新的类型来委托户客的请求,断绝户客和接口的直接依附,但是会加增统系的销开。2、多重继承分离,通过接口多继承来实现户客的求需,种这方法是较好的。

Liskov替换准则

    对于Liskov替换准则,其核心想思是:子类必须可以替换其基类。这一想思现体为对继承机制的束约范规,只有子类可以替换基类时,才能保障统系在运行期内识别子类,这是保障继承复用的础基。在类父和子类的体具行为中,必须严厉握把继承次层中的关系和特征,将基类替换为子类,程序的行为不会产生任何化变。同时,这一束约反过来则是不成立的,子类可以替换基类,但是基类不定一能替换子类。

Liskov替换准则,要主着眼于对象抽和多态建立在继承的础基上,因此只有循遵了Liskov替换准则,才能保障继承复用是可靠地。实现的方法是面向接口程编:将大众分部象抽为基类接口或象抽类,通过Extract Abstract Class,在子类中通过覆写类父的方法实现新的方法支撑一样的责职。

Liskov替换准则是关于继承机制的计划准则,背背了Liskov替换准则就必定致导背背开放闭封准则。

Liskov替换准则可以保障统系有具精良的拓展性,同时实现基于多态的象抽机制,可以加增代码冗余,防止运行期的类型辨别。

    以上就是5个基本的计划准则,它们就像面向对象程序计划中的清规戒律,遵照它们可以使我们的代码更加鲜活,易于复用,易于拓展,灵巧优雅。不同的计划式模对应不同的求需,而计划准则则代表永久的魂魄,须要在践实中每时每刻地遵照。就如ARTHUR J.RIEL在那边《OOD启示录》中所说的:“你并不必严厉遵照这些准则,背背它们也不会被处以宗教罚刑。但你应该把这些准则做看警铃,若背背了其中的一条,那么警铃就会响起。”

请住记这些术技巨匠的名字和作品,并入深研习其中的招式和验经,是正他们让面向对象程序计划变得如此目夺彩光,沿着这些伶俐的途径直一走下去,我得觉,我们会不仅仅进步了术技,还会发明计划之外的西东,因为OOP还蕴含着人生的很多伶俐。

 

    注:起源http://ce.sysu.edu.cn/hope2008/Education/ShowArticle.asp?ArticleID=8858

文章结束给大家分享下程序员的一些笑话语录: 一条狗在街上闲逛,看见橱窗里一张告示:「招聘程序员。会编程,有团队精神,至少精通两种语言。均等机会。」
  那条狗就进去申请,但是被拒绝了。
  「我不能雇一条狗在公司里做事。」经理说。
  狗不服气,指着告示上「均等机会」几字抗议。
  经理没法,叹了口气,不屑地问道:「你会编程吗?」
  那条狗默默地走到电脑前,编了个程序,运作准确。
  「你有团队精神吗?」经理问。
  那条狗掉头看了看门外,一大群野狗在外面虎视耽耽。
  「我真的不能雇狗做这份工作。」经理气急败坏地说。
  「就算会编程、有团队精神,但是我需要的雇员至少要能精通两种语言。」
  那条狗抬头看着经理说:「喵-噢。」


CSDN海神之光上传的代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b或2023b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪(CEEMDAN)、数字信号调制、误码率、信号估计、DTMF、信号检测识别融合、LEACH协议、信号检测、水声通信 1. EMD(经验模态分解,Empirical Mode Decomposition) 2. TVF-EMD(时变滤波的经验模态分解,Time-Varying Filtered Empirical Mode Decomposition) 3. EEMD(集成经验模态分解,Ensemble Empirical Mode Decomposition) 4. VMD(变分模态分解,Variational Mode Decomposition) 5. CEEMDAN(完全自适应噪声集合经验模态分解,Complementary Ensemble Empirical Mode Decomposition with Adaptive Noise) 6. LMD(局部均值分解,Local Mean Decomposition) 7. RLMD(鲁棒局部均值分解, Robust Local Mean Decomposition) 8. ITD(固有时间尺度分解,Intrinsic Time Decomposition) 9. SVMD(逐次变分模态分解,Sequential Variational Mode Decomposition) 10. ICEEMDAN(改进的完全自适应噪声集合经验模态分解,Improved Complementary Ensemble Empirical Mode Decomposition with Adaptive Noise) 11. FMD(特征模式分解,Feature Mode Decomposition) 12. REMD(鲁棒经验模态分解,Robust Empirical Mode Decomposition) 13. SGMD(辛几何模态分解,Spectral-Grouping-based Mode Decomposition) 14. RLMD(鲁棒局部均值分解,Robust Intrinsic Time Decomposition) 15. ESMD(极点对称模态分解, extreme-point symmetric mode decomposition) 16. CEEMD(互补集合经验模态分解,Complementary Ensemble Empirical Mode Decomposition) 17. SSA(奇异谱分析,Singular Spectrum Analysis) 18. SWD(群分解,Swarm Decomposition) 19. RPSEMD(再生相移正弦辅助经验模态分解,Regenerated Phase-shifted Sinusoids assisted Empirical Mode Decomposition) 20. EWT(经验小波变换,Empirical Wavelet Transform) 21. DWT(离散小波变换,Discraete wavelet transform) 22. TDD(时域分解,Time Domain Decomposition) 23. MODWT(最大重叠离散小波变换,Maximal Overlap Discrete Wavelet Transform) 24. MEMD(多元经验模态分解,Multivariate Empirical Mode Decomposition) 25. MVMD(多元变分模态分解,Multivariate Variational Mode Decomposition)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值