`
40020072
  • 浏览: 72711 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

软件开发的几条原则

阅读更多

第一条:单一职责原则SRP

           中心:就一个类而言,应该仅有一个引起他变化的原因。

           把职责分离到单独的类中,因为每一个类都是变化的轴线,当需求变化时,该变化会反映为类的职责的变化,如果一个类承担了多余一个的职责,那么引起他变化的原因就会有多个。

           职责定义为“变化的原因”。

           如果一个类承担的职责过多,就等于把这些职责耦合在了一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力,这种耦合会导致脆弱的设计,当变化发生时,设计会受到意想不到的破坏。

          另一方面,如果应用程序的变化方式总是导致这两个职责同时变化,那么就不必分离它们,实际分离它们就会导致不必要的复杂性的臭味。

          SRP是所有原则中最简单的也是最难以正确应用的原则之一。

 

第二条:开放-封闭原则OCP

           中心:软件实体(类,模块,函数等等),应该是可以扩展的,但是不可修改的。

           遵循开放-封闭原则设计出的模块具有两个主要特征:1、对于扩展是开放的。2、对于修改是封闭的。

           OCP的关键是抽象,对于代码的改动是通过增加新代码进行的,而不是更改现有代码,因此他就不会引起像不遵循OCP原则那样的连锁改动。

           通常,我们更愿意一直等到确实需要那些抽象时再把他放进去,“我们愿意被第一颗子弹射中,但是我们不会再被同一支枪射得其他子弹射中”。

           可以按照以下的一些方法完成这项工作:

           我们首先编写测试.测试描绘了系统的一种使用方法,通过首先编写测试,我们迫使系统成为可测试的,在一个具有可测试的.在一个具有可测试性的系统中发生变化时,我们可以坦然对之,因为我们已经构建了使用系统可测试的抽象,并且通常这些抽象中的许多都会隔离以后发生的其他种类的变化.

           在许多方面,OCP都是面向对象设计的核心所在,遵循这个原则可以带来面向对象技术所声称的巨大好处(灵活,可重用,可维护性),然而,并不是说只要使用一种面向对象的语言就是遵循了这个原则,对于程序中的每个部分都肆意进行抽象同样不是一个好主意,正确的做法是,开发人员应该仅仅对程序中呈现出频繁变化的那部分作出抽象.拒绝不成熟的抽象和抽象本身一样重要.

第三条:Liskov替换原则LSP

          中心:子类型必须能够替换掉他的基类型。

          LSP让我们得到一个非常重要的结论:一个模型,如果孤立的看,并不具有真正意义上的有效性,模型的有效性必须通过他的客户程序来表现。

          如果一组类都支持一个公共的职责,那么它们就应该从一个公共的超类继承该职责。如果公共的超类还不存在,那么就创建一个,并把公共的职责放入其中,毕竟这样一个类的有用性是确定无疑的。

         有一些简单的启发规则可以提供一些有关违反LSP的提示,这些规则都和以某种方式从其基类中去除某功能的派生类有关,完成的功能少于其基类的派生类通常是不能替换其基类的,因此就违反了LSP。

         另外一种违反LSP的规则形式是在派生类的方法中添加了其基类不会抛出的异常,如果基类的使用者不期望这些异常,那么把它们添加到派生类的方法中就会导致不可替代性,此时要遵循LSP,要么就必须改变使用者的期望,要么派生类就不应该抛出这些异常。

         OCP是OOD中很多说法的核心。如果这个原则应用的有效,应用程序就会具有更多的可维护性,可重用性以及健壮性,LSP是使用OCP成为可能的主要原则之一。

第四条:依赖倒置原则DIP

         中心:1、高层模块不应该依赖低层模块。二者都应该依赖于抽象。

                  2、抽象不应该依赖于细节。细节应该依赖于抽象

         本应该是高层的策略设置模块去影响低层细节实现的模块的,包含高层业务规则的模块应该优先并独立于包含实现细节的模块,无论如何高层模块都不应该依赖于低层模块。

         我们更希望能够重用的是高层策略模块,如果高层模块独立于底层模块,那么高层模块就能更容易的被重用,该原则是框架的设计核心原则。

          所有结构良好的面向对象的架构都具有清晰的层次定义,每个层次通过一个定义良好的、受控制的接口向外提供一组内聚的服务。

          每个较高的层次都为它所需要服务声明一个抽象接口,较低层次实现了这些抽象接口,每个高层类都通过接口使用下一层,这样高层就不依赖于低层。低层反而依赖于在高层中声明的抽象服务接口。

         这种倒置不仅仅是依赖关系的倒置。它也是接口所有权的倒置。

         依赖倒置可以应用于任何一个类向另一个类发送消息的地方。

         违反DIP,高层策略没有和底层实现分离,抽象没有和具体细节分离,没有这种分离,高层策略就自动的依赖于低层模块,抽象就自动的依赖于具体细节。

第五条:接口隔离原则ISP

         中心:这个原则用来处理“胖”接口所具有的缺点。如果累的接口不是内聚的,就表示该类具有胖的接口。换句话说,类的胖接口可以分解成多组方法,每一组方法服务于一组不同的客户端程序。

         不应该强迫客户依赖于它们不用的方法。

         如果一个客户端程序依赖于一个含有它不使用的方法的类,但其他客户端缺要使用该方法,那当其他客户端对这个类改变时,就会影响到这

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    敏捷软件开发 原则模式与实践

    1. **敏捷原则**:书中详细介绍了敏捷宣言及其背后的12条原则。敏捷宣言主张个体和互动胜过流程和工具,可工作的软件胜过详尽的文档,客户协作胜过合同谈判,以及响应变化胜过遵循计划。这些原则为敏捷开发提供了...

    敏捷软件开发:原则、模式与实践

    敏捷软件开发原则、模式和实践涉及的几个关键方面如下: 1. 敏捷宣言的核心价值: 敏捷宣言是由一群软件开发人员起草的一份文档,其核心价值体现了敏捷开发的核心理念,包括: - 个体和互动高于流程和工具 - 可...

    软件开发各种小图标大全

    在"软件开发"中,图标设计有以下几个关键点: 1. **一致性**:所有图标应当遵循一致的设计风格,包括颜色、线条粗细、阴影效果等,以保持整体视觉的一致性。 2. **可识别性**:即使图标很小,也应确保用户能够迅速...

    敏捷软件开发—原则、模式与实践

    《敏捷软件开发—原则、模式与实践》是一本深入探讨敏捷开发理念、方法和实践的著作,旨在帮助软件开发团队提升效率,优化流程,并确保在快速变化的需求环境中保持灵活性和高质量的交付。这本书的核心内容围绕以下几...

    软件开发需求分析的20条法则

    ### 软件开发需求分析的20条法则 #### 引言 在软件开发过程中,需求分析是最为关键的初始阶段之一。它不仅决定了后续设计、开发、测试等环节的方向,更是确保最终产品能够满足用户及商业目标的重要保障。本文旨在...

    敏捷软件开发_原则_模式与实践.rar

    《敏捷软件开发:原则、模式与实践》是一本深入探讨敏捷开发理念、原则以及实际应用的书籍。在当今快速变化的IT行业中,敏捷方法论已经成为软件项目管理的重要选择,它强调适应性、灵活性和团队协作,以应对需求频繁...

    Java软件开发文档代码规范

    在软件开发领域中,Java作为一种广泛使用的编程语言,其代码规范对于项目的可维护性和团队协作至关重要。本知识点将根据文档内容详细介绍Java软件开发中的代码组织与风格、注解规则、命名规范以及如何编写高质量的...

    Scrum敏捷软件开发.pptx

    三、敏捷开发十二条原则 1.我们最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意。 2.欣然面对需求变化,即使在开发后期也一样。 3.经常地交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的...

    java敏捷软件开发

    在Java敏捷软件开发中,有以下几个关键知识点: 1. **敏捷宣言**:敏捷宣言是敏捷开发的核心指导原则,包括四条价值观:个人和交互、可工作的软件、客户合作、以及对变化的响应。这四条价值观指导着敏捷团队的工作...

    敏捷软件开发.rar

    1. **敏捷宣言**:敏捷宣言是敏捷软件开发的基础,由12条原则和4个价值观组成。这四个价值观分别是:个体和互动高于流程和工具,可工作的软件高于详尽的文档,客户合作高于合同谈判,响应变化高于遵循计划。 2. **...

    敏捷软件开发

    设计原则则更侧重于指导开发人员的行为,分为两部分:解决软件“腐化”问题的5条原则和包的设计(集成技术)的6条原则。这些原则旨在保持软件的灵活性、可维护性和可读性,比如: 1. 设计时考虑可修改性:确保代码...

    2021年三亚地区电子软件开发工程师岗位薪酬水平报告-最新数据.pdf

    综上所述,这些知识点不仅涉及到电子软件开发工程师这一特定岗位的薪酬情况,还涉及整个IT行业的薪酬分析,以及相关数据处理技术和报告制作的基本原则和应用。这些内容对于IT行业从业者以及企业人力资源管理者都是至...

    软件开发过程纵横谈(2):敏捷过程

    敏捷宣言背后还有一套十二条原则: 1. 我们的最高目标是通过持续不断地和尽早地交付有价值的软件来使客户满意。 2. 即使到了开发的后期,也欢迎改变需求。敏捷流程利用变化为客户提供竞争优势。 3. 经常交付可工作...

    医院信息管理系统软件开发文档.docx

    医院信息管理系统软件开发文档将满足医院的以下几个方面的需求: * 医院整体的模块介绍:本系统将对医院的各个部门和模块进行整合,提供一个统一的信息管理平台,以满足医院的日常运营和管理需求。 * 系统整体目标...

    第-章-软件测试原则及工作流程优秀文档.ppt

    软件测试的原则和工作流程是软件开发过程中的关键阶段,旨在确保软件产品的质量和可靠性。软件测试的原则和工作流程是软件测试的核心内容,需要软件测试人员具备专业的意识和技能,以确保软件测试的顺利进行。

    软件开发常用图标.zip

    图标的设计原则主要包括以下几个方面: 1. 清晰度:图标应该易于识别,即使在小尺寸下也能清晰可见。这要求图标具有简洁的线条和形状,避免过于复杂的设计。 2. 一致性:在整个应用中,图标的风格应保持一致,以...

Global site tag (gtag.js) - Google Analytics