软件设计软件设计模式之SOLID原则授客

定义:任何一个软件模块都只对某一类行为者负责

#开闭原则(OCP)

定义:软件实体应当对扩展开放,对修改关闭

说明:这里的“软件实体”包含模块,类,接口,方法等

开闭原意在告诉我们,当应用的需求改变时,在不修改软件实体原有的源代码或者二进制代码的前提下,可以通过新增代码来满足新的需求,也就是说一个设计良好的计算机系统应该在不需要修改的前提下就可以轻易被扩展,这是架构的根本目的,如果对原始需求的小小延伸就需要对原有的软件系统进行大幅修改,那么这个系统的架构设计显然是失败的。

在Java、C++这类语言中,可以通过“抽象约束、封装变化”来实现开闭原则,即通过接口或者抽象类为软件实体定义一个相对稳定的抽象层,而将相同的可变因素封装在相同的具体实现类中。因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。而软件中易变的细节可以从抽象派生来的实现类来进行扩展,当软件需要发生变化时,只需要根据需求重新派生一个实现类来扩展就可以了。

而在python中一切都是对象,可以指向任何类型,所以,不用定义接口变可实现类似接口。

#里氏替换原则(LSP)

第一种定义:如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有发生变化,那么类型S是类型T的子类型。

第二种定义:所有引用基类的地方必须能透明地使用其子类的对象。

第一种定义是最正宗的定义,而第二种定义则是最清晰明确的,通俗点讲,只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类。但是,反过来就不行了,有子类出现的地方,父类未必就能适应

里氏替换原则是继承复用的基石,只有当衍生类可以替换基类,软件单位的功能不受到影响时,即基类随便怎么改动子类都不受此影响,那么基类才能真正被复用

因为继承带来的侵入性,增加了耦合性,也降低了代码灵活性,父类修改代码,子类也会受到影响,要让程序遵守里氏替换原则,实现继承时必须遵守以下几点:

1)子类必须实现父类的抽象方法,但不得重写(覆盖)父类的非抽象(已实现)方法。

2)当子类覆盖或实现父类的方法时,方法的的形参要比父类方法的输入参数更宽松。

3)当子类的方法实现父类的抽象方法时,方法的返回值要比父类更严格。

4)遵守以上几点的情况下,无法满足需求时,可以考虑在子类中增加自己特有的方法。

#接口隔离原则(ISP)

定义:

1、客户端不应该依赖它不需用的接口

2、类间的依赖关系应该建立在最小的接口上。

简单理解就是,不要在一个接口里面放很多的方法,这样会显得这个类很臃肿,java接口类为例,继承接口的非抽象子类,都要实现接口类的拥有的所有方法,所以,当这些子类仅需要要接口类中的部分方法时还是需要去实现对其没有意义的接口方法,所以,接口应该尽量细化,一个接口对应一个功能模块,同时接口里面的方法应该尽可能的少,使接口更加灵活轻便。但是需要注意的是:拆分要适度度。对接口进行细化可以提高程序设计灵活性是不挣的事实,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。

接口隔离原则和单一职责原则虽然很类似,但是两个原则还是存在着明显的区别。单一职责原则是在业务逻辑上的划分,注重的是职责。接口隔离原则是基于接口设计考虑。

#依赖反转原则(DIP)

依赖反转原则被称作依赖倒置原则,

1)高层策略性的代码不应该依赖实现底层细节的代码

2)抽象不应该依赖于细节,细节应该依赖于抽象

说明:

1、什么是“高层”,什么是“细节”?

对一个系统来说,业务逻辑是高层,其他是细节。业务逻辑是仅仅包括用例、业务实体部分,不包括任何框架、存储(数据库)、其他系统等部分,是纯粹的。其他细节,包括框架、数据库、消息队列,都是细节。业务逻辑应该不依赖任何细节。细节的实现可以任意替换而不影响业务逻辑。

依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定得多,其中心思想是面向接口编程

该原则告诉我们,如果想要设计一个灵活的系统,在源代码层次的依赖关系中就应该多引用稳定的抽象类型,而非具体实现,特别注意不要在具体实现类上创建衍生类,不要覆盖包含具体实现的函数。Java中,抽象多指的是接口或抽象类,用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。

在Python中,可以不通过抽象类的方式很轻松的实现依赖反转

例子:音乐玩具播放器模拟程序,要求可以播放各种动物的声音。

最开始,这个玩具的要求比较简单,一开始只要求播放一种动物声音,鸟叫声

Bird.java

publicclassBird{

publicvoidcall(){

System.out.println("birdcall");

}

ToyPlayer.java

publicclassToyPlayer{

publicvoidplay(Birdbird){#这里的入参,引用的是具体的实现类

bird.call();

Entry.java

publicclassEntry{

publicstaticvoidmain(String[]args){

ToyPlayerplayer=newToyPlayer();

Birdbird=newBird();

player.play(bird);

如上,以上代码是不符合依赖反转原则的,播放器类,依赖具体的动物类(实现类),当需求变化时可能无法满足需求。比如,需要给玩具增加其它动物声,比如狗叫,这个时候就需要更改程序了。

改进版

Animal.java

interfaceAnimal{

publicvoidcall();

publicclassBirdimplementsAnimal{

Dog.java

publicclassDogimplementsAnimal{

System.out.println("dogcall");

publicvoidplay(Animalanimal){#注意,这里替换了参数类型--替换具体类类型Bird为抽象类类型Animal

THE END
1.SOLIDWORKS智诚原文链接:SOLIDWORKS保存低版本提示需要订阅解决方法_智诚科技ICT 解决方法: 1、我们在SOLIDWO…阅读全文? ?赞同? ?添加评论 ?分享?收藏 发表了文章2024-11-14 15:38 SOLIDWORKS自定义工程图图层 SOLIDWORKS智诚 SOLIDWORKS代理,智诚30周年啦! 对于习惯使用二维设计软件的工程师,在使用二维软件绘图时,https://www.zhihu.com/people/zhi-cheng-ict
2.SOLID(数据库解决方案提供商)可以说,Solid Edge为您的消费类产品设计提供了所需的一切。Solid Edge是UGS公司推出的、全球居于行业领导地位的、高性价比的三维计算机辅助设计软件系统,服务于设计主流的产品生命周期管理(PLM)市场。“Solid Edge一如既往的根据客户的设计功能需要,不断地进行研发,将最好的创新程序、更先进的设计流程带给设计工程https://baike.baidu.com/item/SOLID/9662803
3.SOLID软件设计原则SOLID 软件设计原则 什么是软件设计原则? 软件设计原则是一组帮助我们避开不良设计的指导方针。这些设计原则是由 Robert Martin 在《敏捷软件开发:原则、模式与实践》一书中整理收集而来。 根据 Robert Martin 的理论,应该避免不良设计的以下三个重要特点: 僵化: 很难做改动,因为每一个细微的改动都会影响到系统大量https://www.jianshu.com/p/5f1dc9f7b57d
4.软件设计模式SOLID原则SOLIDPrinciplesSOLID 是让软件设计更易于理解、更加灵活和更易于维护的五个原则的简称。《敏捷软件开发:原则、模式与实践》中首次提出的。 有原则是件好事,但是也要时刻从实用的角度来考量,不要当作教条。 mnemonic [nm?n?k]:adj. 记忆的,记忆术的,增进记忆的 n. 帮助记忆的词句,助记符号 https://blog.csdn.net/chengyq116/article/details/122204676
5.SolidEdge2022V2022中文完整版最需网Solid Edge 2022 V2022 中文完整版2023-05-19发布者:wx20230305205025大小: 下载:12立即下载 文件大小:软件介绍 Solid Edge 2022是由西门子公司专为电气设计人员研发推出的一款PCB设计软件,为用户提供丰富且齐全的工具,有效帮助用户提高工作效率、提高工作质量、缩短工作时间、节约成本、缩短开发周期。软件还提供制造商所https://www.zuixu.com/down/314778.html
6.关于SolidDocuments(软件公司)Solid Documents 关于开发人员固体文件始建于2001年,是专业从事文件生产力软件类别。固体转换器是公司,用于PDF转换成Word文档的最受欢迎的产品。开发操作系统: Mac访问网站 点击查看完整截图 相关软件名称Solid Converter | 商业 | 2.1 与此开发人员相关的文件类型https://www.solvusoft.com/zh-cn/file-extensions/software/solid-documents/
7.SolidCAM下载SolidCAM(数控加工软件)下载除了2.5D铣削功能,SolidCAM还为制造业用户提供了从2.5轴铣削、3轴铣削、多面体4/5轴定位铣削、高速铣削(HSM)、5轴联动铣削、车削和高达5轴的车铣复合加工、线切割等编程模块,可以满足各种加工方式和工艺的需求。总之,SolidCAM是一款功能强大、易于使用和集成的CAM软件,可以提供完整的加工解决方案,支持各种加工方式和https://www.32r.com/soft/49658.html
8.设计模式:探索SOLID设计原则,提升Go语言软件开发质量在软件工程中,SOLID是五个基本设计原则的首字母缩写,旨在促进软件的可维护性、灵活性以及可扩展性。这些原则对于使用Go语言进行高质量软件开发尤为重要,因为Go的简洁性和高性能特性使得遵循良好的设计原则变得尤为重要。本文将逐一介绍SOLID原则,并讨论它们如何在Go语言项目中得以应用。 https://cloud.tencent.com/developer/article/2399716
9.SolidEdge2020破解版下载2D/3DCAD系统SiemensSSolid Edge制造解决方案可帮助制造商定义和执行各种传统和新制造流程,包括CNC加工,嵌套,切割,弯曲,成型,焊接,装配和增材制造。1 这些软件解决方案直接在Solid Edge零件,钣金和装配模型上工作,确保准确,高效的制造流程,使用这些解决方案创建的制造指令可以轻松更新,以反映底层设计的任何变化。 http://www.sd173.com/soft/8361.html
10.SolidEdge和理正软件哪个好有什么区别优缺点Solid Edge是一款用于机械设计和制造的软件。它是一款功能强大,可靠性高,易于使用的软件,因此在机械设计行业中被广泛使用。它还支持多种文件格式,如AutoCAD,SolidWorks,Pro/ENGINEER等,可以方便地将设计转换成3D文件,从而更快地实现设计目标。综上所述,Solid Edge的使用者在全球各地都很多。SolidEdge是Siemens PLM Softwhttps://www.36dianping.com/vs/ibju.html
11.SolidEdge2024中文版软件下载安装及注册激活教程Solid Edge是Siemens PLM Software公司旗下的三维CAD软件,采用Siemens PLM Software公司自己拥有专利的Parasolid作为软件核心,将普及型CAD系统与世界上最具领先地位的实体造型引擎结合在一起,是基于Windows平台、功能强大且易用的三维CAD软件。 资源下载: 安装步骤: https://m.douban.com/note/857036561/
12.Solid文件管理器手机下载《Solid文件管理器》是一款手机辅助管理类的手机软件,《Solid文件管理器》可以为用户带来多样的管理方式,使用户可以体验到更加方便、快捷、轻松的手机文件管理,非常的优秀,赶紧下载吧! 软件详情 这是Android平台上直观、引人注目的文件管理器,它为您带来了全新的文件管理体验。双面板文件管理和文件/文件夹拖放操作是https://shouyou.3dmgame.com/android/10182.html
13.kingstonsolidigm有没有自家的SSD专用软件?SSD怎么查看状态solidigm除了有配套软件,还有配套驱动。https://www.chiphell.com/thread-2489121-1-1.html
14.我公司在网上下载了免费使用的SolidWks软件,最近有人联系我们说我们我公司在网上下载了免费使用的SolidWks软件,最近有人联系我们说我们侵权要求购买他们的软件,请问我们的下载行为构成侵权了吗在你们下载的时候注明是免费试用的,所以不构成侵权https://www.66law.cn/question/44062670.aspx
15.次作业管理软件功能,taskmanagementsoftwarefun介绍了具有热电偶冷端温度智能补偿的温度检测系统的组成和功能 ,重点阐述了以单片机为核心构成热电偶冷端温度智能补偿的原理和特点 ,说明了软件功能。 更多例句>> 6) functional software 功能软件补充资料:Solid Edge软件功能简介 Solid Edge是美国EDS公司的中端CAD-PDM产品,具有强大的功能模块和广泛的适用范围,是目前http://www.dictall.com/indu52/65/526555469E1.htm