软件设计原则

面向对象设计原则

主宰稳场 提交于 2019-12-14 16:03:23
参考书籍:设计模式(第二版) 七大原则:单一职责原则、开闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、合成复用原则和迪米特法则。 可维护性较低的软件有4个原因: 1.过于僵硬。2.过于脆弱、3.复用率低、4.黏度过高 好的系统应具备如下三个性质: 1.可扩展性2.灵活性3.可插入性 单一职责原则:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。 开闭原则:一个软件实体应当对扩展开放,对修改关闭。也就是说在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,即实现在不修改源代码的情况下改变这个模块的行为。抽象化是开闭原则的关键 里氏代换原则:所有引用基类(父类)的地方必须能透明地使用其子类的对象。 依赖倒转原则:高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。代码要依赖于抽象的类,而不要依赖于具体的类;要针对接口或抽象类编程,而不是针对具体类编程。 接口隔离原则:客户端不应该依赖那些它不需要的接口。 合成复用原则:尽量使用对象组合,而不是继承来达到复用的目的。 迪米特法则:每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。迪米特法则的主要用途在于控制信息的过载 来源: https://www.cnblogs.com/liujinxin123/p/12039712.html

软件设计原则

余生颓废 提交于 2019-12-14 13:59:17
1、开闭原则 开闭原则(Open-Closed Principle, OCP)是指一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。强调的是用抽象构建框架,用实现扩展细节。可以提高软件系统的可复用性及可维护性。开 闭原则,是面向对象设计中最基础的设计原则。它指导我们如何建立稳定灵活的系统,例如:我们版本更新,我尽可能不修改源代码,但是可以增加新功能。 说白了就是,如果我们要增加新功能,不要影响到原有的功能。原来的类保持不变,然后弄一个新的类去extends原来的类,新的类再去写新的逻辑。对旧功能关闭,对新的功能进行扩展。 2.依赖倒置原则 依赖倒置原则(Dependence Inversion Principle,DIP)是指设计代码结构时,高层模块不应该依赖底层模块,二者都应该依赖其抽象。抽象不应该依赖细节;细节应该依赖抽象。通过依赖倒置,可以减少类与类之间的耦合性,提高系统的稳定性,提高代码的可读性和可维护性,并能够降低修改程序所造成的风险。 依赖一个类的时候,最好依赖其接口,而不是依赖其具体的实现类,依赖接口有一个好处,如果对应的实现类增加了功能,则我们只需要在调用处调用新的方法即可。而接口和实现类增加对应的方法。 接下来看一个案例,还是以课程为例,先来创建一个类 Tom: 来调用一下: Tom 热爱学习,目前正在学习

java 设计原则

浪尽此生 提交于 2019-12-03 15:43:09
1.单一职责原则 如果一个类职责过多,会导致耦合度过高 2.开放封闭原则 类,模块,函数应该是可以扩展的,但是对于修改是封闭的 尽量通过扩展的方式来实现变化,而不是通过修改原有的代码来实现。 3.里式替换原则 所有引用父类的地方必须能透明的使用其子类\ 4.依赖倒置原则 高层模块不应该依赖底层模块,两者都应该依赖于抽象,抽象不能依赖细节,细节要依赖抽象 5.迪米特原则 一个软件实体应当少的与其他实体发生相互作用 如果一个系统符合迪米特原则,那么当其中某一个模块发生修改时,就会尽量少的影响其他模块。 降低耦合度 6.接口隔离原则 简历单一接口,不要建立庞大臃肿的接口,细化接口 来源: https://www.cnblogs.com/MrYangjlPython/p/11802640.html

面向对象的7个设计原则->开车理解->贴近生活

点点圈 提交于 2019-12-03 14:02:22
  设计模式在我们的开发中是不可或缺的一部分,很多人会说,我没用那些设计模式啊,我也开发的挺好的,其实不然,我们在开发中都用到了这些设计模式,只不过我们并没有在意这些,今天我就用开车的方法来解释一下我们的7个设计原则。 简述   面向对象的设计原则有七个,包括:开闭原则、单一职责原则、里氏替换原则、迪米特原则(最少知道原则)、接口分离原则、依赖倒置原则、组合/聚合复用原则。 1>开闭原则:    在面向对象编程领域中,开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。该特性在产品化的环境中是特别有价值的,在这种环境中,改变源代码需要代码审查,单元测试以及诸如此类的用以确保产品使用质量的过程。遵循这种原则的代码在扩展时并不发生改变,因此无需上述的过程。 摘自某度百科。   上述那段话我是没看懂什么意思(我也没仔细的去看),开闭原则一句话来解释就是对扩展开放,对修改关闭。   我们来举几个生活的栗子,小张开了一个饭店,湘菜做的很棒,顾客也越来越多了,也出现了在吃饭时间排队等候的现象,小张这时意识到我们应该扩张一下我们的饭店的规模了,于是把相邻的门店也一并租了下来,有人建议小张,你既然扩张了饭店的规模建议你去做一些别的事(严重不符合开闭原则),但是小张坚持还是做湘菜(符合开闭原则)

面向对象设计原则、设计模式与动态类型语言

有些话、适合烂在心里 提交于 2019-12-03 01:36:41
在阅读 clean architecture 的过程中,会发现作者经常提到 recompile redeploy ,这些术语看起来都跟静态类型语言有关,比如Java、C++、C#。而在我经常使用的python语言中,是不存在这些概念的。于是,在阅读的时候就会有一个疑惑,《clean architecture》中提到的各种原则,比如SOLID,是否对动态类型语言 -- 如python -- 同样适用? SOLID是OOP的指导原则,更具指导性的应该是各种设计模式,GOF经典的 Design Patterns: Elements of Reusable Object-Oriented Software 也是用C++来举例的,那么这些经典设计模式有多少是适用于动态语言如python的呢?本文记录对这些问题浅薄的思考,如果有认知错误的地方,还请大家不吝指教。 本文地址: https://www.cnblogs.com/xybaby/p/11767100.html SOLID SOLID是模块(module)设计的指导原则,有以下五个原则组成 SRP(Single responsibility principle):单一职责原则,一个module只有一个原因修改 OCP(Open/closed principle):开放-关闭原则,开放扩展,关闭修改 LSP(Liskov

UML及七大设计原则相关记录

匿名 (未验证) 提交于 2019-12-03 00:11:01
设计模式笔记 文章目录 设计模式笔记 UML入门 7大设计原则 设计模式-创建型模式 设计模式-结构型模式 设计模式-行为型模式 UML类图内容 7大设计原则 开闭原则 依赖倒置原则 单一职责原则 接口隔离原则 迪米特原则 迪米特原则 UML入门 UML基础 UML类图 UML时序图 UML类关系 UML记忆技巧 7大设计原则 开闭原则 依赖倒置原则 单一责任原则 接口隔离原则 迪米特原则(最少知道原则) 里式替换原则 合成复用原则(组合/复用原则) 设计模式-创建型模式 工厂方法模式 抽象工厂模式 建造者模式 单例模式 原型模式 设计模式-结构型模式 适配器模式 装饰者模式 代理模式 外观模式 桥接模式 组合模式 享元模式 设计模式-行为型模式 策略者模式 观察者模式 责任链模式 备忘录模式 模板方法模式 迭代器模式 中介者模式 命令模式 访问者模式 解释器模式 UML类图内容 定义 统一建模语言(Unified Modeling Language),缩写为UML 非专利的第三代建模和规约语言 特点 UML是一种开放的方法 用于说明、可视化、构建和编写一个正在开发的面向对象的、软件密集系统的制品的开放方法 UML展现了一系列最佳工程实践 这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效 UML2.2分类(14种) 结构式图形:

设计模式--软件设计原则

懵懂的女人 提交于 2019-12-01 15:29:16
软件设计六大原则: 一、 单一职责原则(SRP)   意思是就一个类而言只有一个改变类的起因和动机; 遵循单一职责:   1. 可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多;   2. 提高类可维护性,系统的可扩展性;   3. 变更引起的风险降低,当修改一个功能时,可以显著降低对其他功能的影响。 二、依赖倒置原则   高层模块不应该依赖底层模块,两个模块都应该依赖抽象;抽象不依赖细节,细节应该依赖抽象,意味着实现一个功能的实现通过调用抽象类来实现;   遵循依赖倒置原则:     1. 引入了抽象类     2. 减少了类的耦合度,易于扩展; 三、里氏替换原则   意思是子类必须做到能够替换父类,即实现单一功能的时候可以替换掉父类或者抽象类;   遵循里氏替换原则:     1.上层察觉不出父类和子类对象的区别     2.把父类替换成子类,程序的行为没有变化;     3.程序中所有的依赖关系都终止于抽象类; 四、接口隔离原则 五、迪米特法则 六、开闭原则   对于扩展是开放的,更改是封闭的,意思是可以通过增加类,模块,函数对软件进行扩展,但是避免更改现有的代码和函数来实现功能;   遵循开闭原则:     1. 实现软件的可维护,可扩展,可复用,灵活性好;     2. 面向对象抽象类的引入,尽量少而必要的引入抽象类。 来源: https:/

设计模式 - 七大设计原则(一)

你。 提交于 2019-11-30 12:14:20
设计模式 - 七大设计原则(一) 概述 简单介绍一下七大设计原则: 开闭原则:是所有面向对象设计的核心,对扩展开放,对修改关闭 依赖倒置原则:针对接口编程,依赖于抽象而不依赖于具体 单一职责原则:一个接口只负责一件事情,只能有一个原因导致类变化 接口隔离原则:使用多个专门的接口,而不是使用一个总接口 迪米特法则(最少知道原则):只和朋友交流(成员变量、方法输入输出参数),不和陌生人说话,控制好访问修饰符 里氏替换原则:子类可以扩展父类的功能,但不能改变父类原有的功能 合成复用原则:尽量使用对象组合(has-a)/聚合(contanis-a),而不是继承关系达到软件复用的目的 开闭原则 定义 指一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。 所谓的开闭,也正是对扩展和修改两个行为的一个原则。强调的是用抽象构建框架,用实现扩展细节。可以提高软件系统的可复用性及可维护性。开闭原则,是面向对象设计中最基础的设计原则。它指导我们如何建立稳定灵活的系统,例如:我们版本更新,我尽可能不修改源代码,但是可以增加新功能。 在现实生活中对于开闭原则也有体现。比如,很多互联网公司都实行弹性制作息时间,规定每天工作 8 小时。意思就是说,对于每天工作 8 小时这个规定是关闭的,但是你什么时候来,什么时候走是开放的。早来早走,晚来晚走。 实例 实现开闭原则的核心思想就是面向抽象编程

面向对象设计原则

人走茶凉 提交于 2019-11-29 14:59:42
目录 一、开放封闭原则 二、里式替换原则 三、依赖倒置原则 四、接口隔离原则 五、单一职责原则 一、开放封闭原则 概念理解 开放封闭原则是指在进行面向对象设计中,设计类或者程序应该遵循两点:对扩展开放和对修改关闭。这样,一个模块在实现的过程中,就可以在不修改原来的模块(修改关闭)基础上,扩展器功能(扩展开放)。 扩展开放。指的是某个模块的功能是可扩展的,则该模块是扩展开放的。软件系统的功能上的可扩展性要求模块是扩展开放的。 修改关闭。指的是某模块被其他模块调用,如果该模块的源代码不允许修改,则该模块修改关闭的。软件系统的功能上的稳定性,持续性要求模块是修改关闭的。 开闭原则的实现方法 为了满足开闭原则的对修改关闭,对扩展开放原则,应该 对软件系统中的不变的部分加以抽象 。 实现原则: 把不变的部分抽象成不变的接口,这些不变的接口可以应对未来的扩展。在python中可以使用abc模块来建立抽象类,以及对应的接口。 接口的最小功能设计原则。根据这个原则,原有的接口要么可以应对未来的扩展,不足的部分可以通过定义新的接口来实现。 模块之间的调用通过该抽象接口进行,这样即使实现层发生变化,也无需修改调用方的代码。 优点: 提高系统的可复用性。 提高系统的可维护性。 开闭原则的相对性 软件系统的构建是一个需要不断重构的过程,在这个过程中,模块的功能抽象,模块与模块之间的关系

面向对象设计原则

[亡魂溺海] 提交于 2019-11-28 05:28:57
在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员经理根据7条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。 1. 开闭原则(Open Closed Principle, OCP) 软件实体应该对扩展开放,对修改关闭。 这里的软件实体包括以下几个部分: 1) 项目中划分出的模块 2) 类与接口 3) 方法 开闭原则的含义是:当应用的需求改变时,在不修改软件实体的源代码的前提下,可以扩展模块的功能,使其满足新的需求。 1.1 作用 开闭原则是面向对象程序设计的终极目标,它使软件实体拥有一定的适应性和了灵活性的同事具备稳定性和延续性。具体来说,其作用如下: (1) 对软件测试的影响 软件遵守开闭原则的话,软件测试时只需要对扩展的代码进行测试就可以了,因为原有的测试代码仍然能够正常原型。 (2) 可以提高代码的可复用性 粒度越小,被复用的可能性就约到;在面对对象的程序设计中,更具原子核抽象编程可以提高代码的可服用性。 (3) 可以提高软件的可维护性 遵守开闭原则的软件,其稳定性高和延续性强,从而抑郁扩展和维护。 1.2 实现方法 可以通过“抽象约束、封装变化”来实现开闭原则,即通过接口或者抽象类为软件实体定义一个相对稳定的抽象层,而将相同的可变因素封装在相同的具体实现类中。 因为抽象灵活性好,实用性广,只要抽象的合理