软件设计软件设计模式之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是一款由达索系统(Dassault Systèmes)公司开发的计算机辅助设计(CAD)和计算机辅助工程(CAE)软件,广泛应用于机械设计、产品设计、工程制图和模拟分析等领域。以下是对SolidWorks软件的详细介绍: 免费使用教程:https://www.bilibili.com/read/cv36530450/ https://www.bilibili.com/opus/960128458589995031
2.solidcam最新版本下载安装步骤solidcam功能详解第一部分:solidcam软件介绍 SolidCAM集成了仿真功能,可以在加工前模拟加工过程,预测加工结果,避免出现错误和损失。总之,SolidCAM是一款功能强大、易于学习和使用的CAM软件,可以帮助工程师快速高效地进行零件加工和制造。第二部分:如何把solidcam插件安装到solidworks solidcam插件安装到solidworks 在安装目录下找到——https://baijiahao.baidu.com/s?id=1772772183949836553&wfr=spider&for=pc
3.SOLID软件设计原则SOLID 软件设计原则 什么是软件设计原则? 软件设计原则是一组帮助我们避开不良设计的指导方针。这些设计原则是由 Robert Martin 在《敏捷软件开发:原则、模式与实践》一书中整理收集而来。 根据 Robert Martin 的理论,应该避免不良设计的以下三个重要特点: 僵化: 很难做改动,因为每一个细微的改动都会影响到系统大量https://www.jianshu.com/p/5f1dc9f7b57d
4.关于SolidDocuments(软件公司)Solid Documents 关于开发人员固体文件始建于2001年,是专业从事文件生产力软件类别。固体转换器是公司,用于PDF转换成Word文档的最受欢迎的产品。开发操作系统: Mac访问网站 点击查看完整截图 相关软件名称Solid Converter | 商业 | 2.1 与此开发人员相关的文件类型https://www.solvusoft.com/zh-cn/file-extensions/software/solid-documents/
5.solidcam下载软件介绍 solidcam是受欢迎的免费软件,可直接下载使用。并且软件语言为中文,然后细节也完善得很好。solidcam在2024年11月27日更新到了最新版本,这个版本新增了许多功能。为了减少占用内存和空间,新版本对软件大小进行了优化,这个版本优化后体积为77.09MB,在保持较小体积的情况下,功能更加强大。 solidcam的设计简洁,https://www.180disk.com/soft/1818322.html
6.三维CAD建模软件Solid3000产品概述Solid3000 三维CAD建模设计软件Solid3000是面向机械设计及工业制造领域的高效计算机辅助设计(CAD)软件。Solid3000是从中国本土成长起来的、新一代国产三维设计软件,它拥有良好的功能与性能,完全国标化设计、完全适应国内用户的应用需求,并成为国家“制造业信息化工程”中推荐的三维CAD产品,也是中国机械工程学会机械设http://www.rainfe.com/Solid3000
7.SolidCAM软件下载地址,SolidCAM软件安装教程SolidCAM 2023 SP2 HF2 64位多国语言版下载地址整理完成 2024-04-03No Comments SolidCAM 2023 SP1 HF1 64位多国语言版是SolidCAM公司于2023年10月推出的一款CAD/CAM机械加工软件,为所有铣削、车削、高级车铣复合和瑞士型CNC提供强大的解决方案,具有无缝集成于SolidWorks 2018-2024和完整的刀轨关联性,支持所有CNChttp://www.driver114.com/SolidCAM/
8.SolidSolid软件,Solid下载https://m.crsky.com/mip/tag/solid.html
9.SolidCAM下载SolidCAM(数控加工软件)下载除了2.5D铣削功能,SolidCAM还为制造业用户提供了从2.5轴铣削、3轴铣削、多面体4/5轴定位铣削、高速铣削(HSM)、5轴联动铣削、车削和高达5轴的车铣复合加工、线切割等编程模块,可以满足各种加工方式和工艺的需求。总之,SolidCAM是一款功能强大、易于使用和集成的CAM软件,可以提供完整的加工解决方案,支持各种加工方式和https://www.32r.com/soft/49658.html
10.SolidEdge和理正软件哪个好有什么区别优缺点Solid Edge是一款用于机械设计和制造的软件。它是一款功能强大,可靠性高,易于使用的软件,因此在机械设计行业中被广泛使用。它还支持多种文件格式,如AutoCAD,SolidWorks,Pro/ENGINEER等,可以方便地将设计转换成3D文件,从而更快地实现设计目标。综上所述,Solid Edge的使用者在全球各地都很多。SolidEdge是Siemens PLM Softwhttps://www.36dianping.com/vs/ibju.html
11.SolidConverter下载SolidConverter 2022-02-25 17:00:311款软件 下载SolidConverter就到华军软件园,这里不仅为您提供最新版的SolidConverter,还为您提供SolidConverter的同类软件下载,免费高速下载,一键绿色安装,更多更好更安全的免费软件供您下载。想了解更多国内外最新的绿色免费软件,下载更多内容,尽在华军软件下载!http://www.onlinedown.net/tag/18457.htm
12.Solid文件管理器手机下载《Solid文件管理器》是一款手机辅助管理类的手机软件,《Solid文件管理器》可以为用户带来多样的管理方式,使用户可以体验到更加方便、快捷、轻松的手机文件管理,非常的优秀,赶紧下载吧! 软件详情 这是Android平台上直观、引人注目的文件管理器,它为您带来了全新的文件管理体验。双面板文件管理和文件/文件夹拖放操作是https://shouyou.3dmgame.com/android/10182.html
13.SolidCAM2022下载SolidCAM2022免费版下载2023SolidCAM2022独立版版作为一款功能非常强大的数控加工工具,能够为用户们的工作带来了极大的便利。用户们可以在软件中获得十分完成的无缝集成CAM解决方案,同时支持多面体加工、五轴联动加工、车削、高级车铣复合等等功能模块。使用这款软件还可以直接在零件图、装配体和草图几何体中定义加工,满足用户们不同的数控工作需求。https://www.golue.com/game/v783559.html
14.使用solidworks软件打开stp方法.pdf使用Solid Works 软件打开STP 文档的方法 一、 双击打开 Solid Works 软件,在左上角打开“工具” “选项”,如图 1 ; 图1 二、 在左侧选择“默认模板”;如图2 ; 图2 三、 在右侧选择“”,包括“零件”与“装配”;如图3; 图3 四、 在模板中选择“零件”;(根据版本不同,此选择也可能是“零件—GBhttps://mip.book118.com/html/2023/0721/8051054114005112.shtm
15.3D设计软件SolidEdgeSolid Edge是一款完整的二维/三维一体化设计软件,采用的同步技术不但缩短了设计周期、加快了设计更改的速度,而且提高了导入数据的重复用,能为企业带来更好的设计效益。 Solid Edge提供了不同的应用程序来满足你的需要。从强大的二维绘图到先进的三维系统–完整的装配设计,自动化出图,仿真和装配应用。Solid Edge是来自http://www.rongyutech.com/category-137.html
16.Solidcenter三维设计软件亚龙Solid Center三维工业设计软件是亚龙自主品牌的一款面向工业和教育的虚实一体化集成的三维设计软件。基于Windows平台,既有传统三维软件的建模等功能,同时也突出在自动化集成领域三维设计功能,软件具有特征建模和协同建模两大建模方式,同时兼容市面上常见的三维软件格式,支持自顶向下和由底往上的设计思想,其零件建模、钣https://cdisi.cn/?id=5
17.SolidEdge学生版SiemensSoftware设计零件、装配和钣金。功能包括自动绘图、爆炸图创建、动画、高阶渲染和仿真。凭借我们独特的同步建模技术,您可以更多地专注于工程和设计概念,而非软件本身。 符合您自身需求的培训 免费访问按主题或项目分类的教程、自学课程和互动学习资源。培训材料可用于自学 Solid Edge 或作为课堂学习的补充。学生可以获得Solid Edgehttps://www.plm.automation.siemens.com/plmapp/education/solid-edge/zh_cn/free-software/student
18.SolidCAM2020破解版下载(附SolidCAM020安装教程)SolidCAM2020软件介绍SolidCAM 2020是一款与CAD软件无缝集成的CAM解决方案,该软件可以无缝集成于SOLIDWORKS,能够很好的搭配SOLIDWORKS CAD和AutoCAD软件使用,使用https://xifengboke.com/post/1467.html
19.软件设计模式SOLID原则SOLIDPrinciplesSOLID 是让软件设计更易于理解、更加灵活和更易于维护的五个原则的简称。《敏捷软件开发:原则、模式与实践》中首次提出的。 有原则是件好事,但是也要时刻从实用的角度来考量,不要当作教条。 mnemonic [nm?n?k]:adj. 记忆的,记忆术的,增进记忆的 n. 帮助记忆的词句,助记符号 https://blog.csdn.net/chengyq116/article/details/122204676
20.SolidEdge2021破解版下载我们现在很多行业都需要用到电脑上的一些软件工具,而小编今天给大家带来的Solid Edge 2021中文破解版更是一款非常热门并且十分好用的三维设计软件,在很多行业当中这款软件都能发挥重大的作用,首先它能为用户提供了一整套完整的开发组合工具,如机械、电气设计、模拟、制造、技术出版物、数据管理等,我们产品在开发中肯定会https://www.91rjz.com/pcsoft/96932.html