软件设计原则

概述

1、 自从上个世纪50年代计算机的兴起,软件开发行业逐渐的兴起,到达60年代末,随着面向过程的结构化高级编程语言的出现,可以死说软件开发进入到一个鼎盛的时期,随着大量的技术人员投入到这个行业人,随着软件需求的不断变化,以及需求的复杂度越来越高,不可避免的出现了各种各样的问题,这些问题甚至严重到会威胁到软件开发这个行业。当时的开发者,他们把这些问题称是哪个年代的”软件危机“。
2、 软件危机具体特征的表现
1、 软件开发周期无法确定
2、 软件成本越来越高,甚至无法控制
3、 产品质量不高,产品的功能无法满足客户的要求,经常容易项目失败。
4、 当时的程序员技术,沟通等相关能力参差不齐,导致软件开发质量
5、 软件产品非常难以维护,具体原因:程序员的编码能力,个人习惯
6、 当时软件开发不注重文档,软件缺少文档资源,对后期的维护。

软件开发:

1、 框架
2、
3、组件
瀑布模型:
可行性分析
需求分析
软件设计
编码
测试
交付产品
维护
就需要大家去遵循这个行业里面,由前辈给我们总结出来一些设计原则,以及设计模式!

*第一个原则:单一原则…

一句话描述: “1个类只干1件事”,这是软件设计中高内聚的最重要一点,换句话说: 1个类只有1种职 .责,那么这个职责的确定,需要根据类的对象来确定,看你正在关注对象的哪个方向。比如:学校系统中,学生对象来讲,只需要关注学习,而不应该去关注他或者她怎么当子女。只有1种情况能去改,变我这个类。也就是说在设计类时,类中每一个属性,和每一个方法都必须要根这个类的职责,具有直接关系。如果某一个属性或者某一个行为与本类的职责的无关,那么这个类的设计,就一定违背了单一原则"类的职责单一,也是一种降低耦合度的手段,对象的职责越少,耦合关联度越低,代码越容易复用。当然单一职责,同样适用于方法。当方法违背单一原则时,那么方法的代码将会非常冗长,以及可能,存在代码的重复,甚至代码的浪费!
*

第二个原则:里式替换原则*

定义:子类可以出现在父类出现的任何地方,并且对于父类之前定义的规则,不出发生任何改变!目的:为了维护现有的继承体系,保证龙生龙,凤生凤,老鼠儿子依旧会打洞这个原则是开闭原则的一种体现,或者是一种重要的保证,保证儿子在新增新的功能的时候,不会去改写父类已经定义好的方法,从而去维护现有的继承体系。
第三个原则:依赖倒置原则*
软件设计中,多层次之间,相互之间的依赖关系需要倒置为依赖抽象类或接口,而不是直接依赖具体的实现。具体表现为:1, 上层模块不应该直接依赖下层实现,而应该依赖于下层的抽象, 2,每一单独的层次,抽象不应该依赖干细节,而细节应该依赖于抽象,依赖倒置原则,用白话来描述就是:面向接口编程,.

第四个原则:接口隔离原则

软件设计中,我们所有的实现类在依赖接口的时候,都不应该去依赖那些用不到的方法,只需要依赖那些自己需要的方法。换句话说:就是我们设计软件的时候,不要强迫实现类去实现它不需要的方法。接口隔离原则,具体体现有两种情况:
1、 接口隔离原则,必须要遵循接口最小化原则,但是这里的最小化,不是说1个方法,就是1个接口,而是说1个接口只应该承担1种责任,接口的粒度的划分,什么才叫最小化呢?答案是适度即可。
2、 接口隔离原则中的“最小化原则”,同样适用于接口之间的继承。一个接口只应该承担一种责任,如果发现某一个接口中存在多个职责,那么该接口需要重新设计。

第五个原则:迪米特法则

迪米特法则,又被称之为“最少知道原则”它要求我们在定义类的时候,尽量只做到与类的朋友进行交互,不与朋友之外的任何类有直接交互。因为一旦交互,就存在耦合,甚至类与类之间耦合度非常高,换句话说:非朋友类如果需要修改,可能导致你也跟着修改,也就是妈妈说不要跟陌生人说话。

第六个原则:组合聚合原则

组合聚合原则:主要是一种推荐大家使用面向接口编程的一种原则,它目的在于和继承来区分“代码”复用问题,组合聚合是一种标胶特殊的关联关系,它同样满足“has”这种单词所对应的场景,只不过它更多强调的部分和整体的关系,比如:车和车的的轮胎(聚合),部分和公司(组合),组合的耦合度比聚合的耦合度强。继承和组合聚合,都可以做到关于代码的复用,各有各的优点:

组合聚合复用的好处:
1)新对象存取成分对象的唯一方法是通过成分对象的接口。
2)这种对象的复用是黑箱复用,因为成分对象的内部实现细节对于新的对象是看不见的。3)这种复用所用的依赖更少
4)新对象可以在运行的时候动态的引用于成分对象类型相同的对象。
继承复用的优点:"
1)新的实现较为容易,因为超类的大部分功能可以通过继承关系自动进入子类
2)修改或者扩展继承而来的实现比较容易。
继承复用的缺点:
1)继承复用破坏包装。将超类的实现细节暴露给子类。超类的内部细节常常对子类是透明的,白箱复用。
2)超类的实现发生了改变,子类的实现也不得不改变。
3)超类继承而来的是静态的,不可能在运行时间内发生改变。因此没有足够的灵活性。

第七个原则:开闭原则

开闭原则:开闭原则是多有原则的核心,其他任何原则最终目的都是开闭原则服务。开闭原则是指组成程序的代码(类、方法、模块),他们应该对功能的扩展时开放的,而对功能的修改时关闭的。

具体表现为:
对功能的扩展是开放的:对于一个系统而言,业务功能可以随时在改变,也可能随时在新增,该原则的意思是:系统支持我们去扩展新的功能来满足用户的新需求。
对功能的修改时关闭的:我们在扩展新功能的时候,我们对于原功能的修改时关闭的。比如:我们系统以前只支持新手机,现在客户要求我们还要支持老手机,那么就要求我们:在支持老手机时,不要去修改支持新手机的任何代码。

你可能感兴趣的:(软件设计,软件设计原则)