`
ldzyz007
  • 浏览: 720366 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

OO的五大原则

    博客分类:
  • java
阅读更多
OO的五大原则是指SRP、OCP、LSP、DIP、ISP
SRP(Single Responsibility Principle 单一职责原则)
对象的功能应该单一

OCP(Open Close Principle 开闭原则)
以增加对象的方式来完成对需求的扩展,而非修改原有对象。

LSP(Liskov Substitution Principle 里氏替换原则)
“老鼠的儿子会打洞”,子类应该具备父类的特征。

DIP(Dependence Inversion Principle  反向依赖原则)
不应该依赖“客户”的东西,后端提供方法不应该依赖前端对象。

ISP(Interface Segregation Principle 接口分隔原则)
尽量提供有针对性符合功能特点的简单接口,而不是包含很多方法的大而总接口。


OOP: Object Oriented Programming,面向对象的程序设计

头五项原则是关于类设计的,它们是:

1、SRP,单一职责原则,一个类应该有且只有一个改变的理由。

定义:类的单一职责是说一个类应该只做一件事情,如果类中某个方法或属性与它所要完成的职责无关或是为了完成另外的职责那么这样的设计就不符合类的单一职责。

优点:有助于我们分析和编码的思路的清晰;使我们的编码、测试和维护变得简单;将一个个复杂的问题简单化以后,易于代码的重用;易于系统的扩展。

缺点:降低了类的内聚性增强了类的耦合性,另外一个很客观的问题是当我们使用这个类时把我们原本不需要的功能也带到了我们的代码中,从而使文件变大,增加内存开销。

2、OCP(Open Closed Principle),开放封闭原则,你应该能够不用修改原有类就能扩展一个类的行为。

开放封闭原则(OCP,Open Closed Principle)是所有面向对象原则的核心。软件设计本身所追求的目标就是封装变化、降低耦合,而开放封闭原则正是对这一目标的最直接体现。

核心的思想:软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。


3、LSP(The Liskov Substitution Principle),Liskov替换原则,派生类要与其基类自相容。

其主要机制是抽象和多态。支持抽象和多态的关键机制是继承。


4、DIP(Dependence Inversion Principle),依赖倒置原则,依赖于抽象而不是实现。

核心:高层模块不应该直接依赖于低层模块,所有的模块都要依赖于抽象。也就是说:容易变化的东西一定要依赖于不容 易变化的东西,因为抽象的东西最不容易变化,具体的东西容易变化,所以具体应该依赖于抽象。


5、ISP(Interface Segregation Principle ),接口隔离原则,客户只要关注它们所需的接口。

定义:从一个客户类的角度来讲:一个类对另外一个类的依赖性应当是建立在最小的接口上的。 使用多个专门的接口比使用单一的总接口要好。

        另外的六项是关于包的设计原则。头三项包原则是关于包内聚性的,它们会告诉我们该把什么划分到包中:

6、REP(Release Reuse Equivalency Principle ),重用发布等价原则,重用的粒度就是发布的粒度。


7、CCP(The Common Closure Principle ),共同封闭原则,包中的所有类对于同一类性质的变化应该是共同封闭的。


8、CRP,共同重用原则,一个包中的所有类应该是共同重用的。

  最后的三项原则是关于包之间的耦合性原则的,并且论述了评价系统中包结构优良与否的评判标准。

9、ADP(The Acyclic Dependencies Principle ),无环依赖原则,在包的依赖关系图中不允许存在环。


10、SDP(The Stable Dependencies Principle ),稳定依赖原则,朝着稳定的方向进行依赖。


11、SAP(The Stable Abstractions Principle ),稳定抽象原则,包的抽象程度应该和其稳定程度一致。





头五项原则是关于类设计的,它们是:

  ◆ SRP,单一职责原则,一个类应该有且只有一个改变的理由。
  ◆ OCP,开放封闭原则,你应该能够不用修改原有类就能扩展一个类的行为。
  ◆ LSP,Liskov替换原则,派生类要与其基类自相容。
  ◆ DIP,依赖倒置原则,依赖于抽象而不是实现。
  ◆ ISP,接口隔离原则,客户只要关注它们所需的接口。

  另外的六项是关于包的设计原则。在本文中,包是指一个二进制的可发布文件,比如.jar文件、或dll文件,而不是Java包或是C++的命名空间(译注3)。

  头三项包原则是关于包内聚性的,它们会告诉我们该把什么划分到包中:

  ◆ REP,重用发布等价原则,重用的粒度就是发布的粒度。
  ◆ CCP,共同封闭原则,包中的所有类对于同一类性质的变化应该是共同封闭的。 
  ◆ CRP,共同重用原则,一个包中的所有类应该是共同重用的。

  最后的三项原则是关于包之间的耦合性原则的,并且论述了评价系统中包结构优良与否的评判标准。

  ◆ ADP,无环依赖原则,在包的依赖关系图中不允许存在环。
  ◆ SDP,稳定依赖原则,朝着稳定的方向进行依赖。
  ◆ SAP,稳定抽象原则,包的抽象程度应该和其稳定程度一致。


   这些原则着重于OOD中的依赖管理方面,而淡化抽象与建模方面。这并不是说OO在抽象方面不够强大,或是OO不适合构建模型。当然有很多人都在使用OO的这些部分,只是这些原则集中关注于依赖管理。

  依赖管理是我们每个人都要面对的问题,每当我们在屏幕面前打开那些彼此纠结又令人作呕的代码,我们就会遭受不良的依赖管理所带来的恶果。不良的依赖管理导致代码难以改变,易被破坏,而且不可重用。从另一方面来说,如果依赖经过了良性的管理,代码就可以保持灵活性、健壮性和重用性。所以依赖管理和这些相关原则是程序员们渴求的让软件保持优良架构的基石。

(1)SRP 单一职责原则
就一个类而言,应该仅有一个引起它变化的原因。
职责即为"变化的原因".
 
(2)OCP 开放封闭原则
软件实体(类、模块、函数等)应该是可以扩展的,但是不可修改。
对于扩展是开放的,对于更改是封闭的.
关键是抽象.将一个功能的通用部分和实现细节部分清晰的分离开来.
开发人员应该仅仅对程序中呈现出频繁变化的那些部分作出抽象.拒绝不成熟的抽象和抽象本身一样重要.
 
(3)LSP Liskov替换原则
子类型必须能替换掉他们的基本类型
 
(4)DIP 依赖倒置原则
抽象不应该依赖于细节。细节应该依赖于抽象。
Hollywood原则: "Don't call us, we'll call you".程序中所有的依赖关系都应该终止于抽象类和接口。针对接口而非实现编程。
任何变量都不应该持有一个指向具体类的指针或引用。
任何类都不应该从具体类派生。
任何方法都不应该覆写他的任何基类中的已经实现了的方法。
 
(5)ISP 接口隔离原则
不应该强迫客户依赖于他们不用的方法。接口属于客户,不属于他所在的类层次结构。
多个面向特定用户的接口胜于一个通用接口。
 
(6)REP 重用发布等价原则
重用的粒度就是发布的粒度.
 
(7)CCP 共同重用原则
一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。
相互之间没有紧密联系的类不应该在同一个包中。
 
(8)CRP 共同封闭原则
包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包影响,则将对包中的所有类产生影响,而对其他的包不造成任何影响.
 
(9)ADP 无依赖原则
在包的依赖关系中不允许存在环.
细节不应该被依赖.
 
(10)SDP 稳定依赖原则
朝着稳定的方向进行依赖.
应该把封装系统高层设计的软件(比如抽象类)放进稳定的包中,不稳定的包中应该只包含那些很可能会改变的软件(比如具体类)。
 
(11)SAP 稳定抽象原则
包的抽象程度应该和其他稳定程度一致.
一个稳定的包应该也是抽象的,一个不稳定的包应该是抽象的.
 
(12)DAP(Default Abstraction Principle)缺省抽象原则
在接口和实现接口的类之间引入一个抽象类,这个类实现了接口的大部分操作.
 
(13)IDP(Interface Design Principle)接口设计原则
规划一个接口而不是实现一个接口。
 
(14)BBP(Black Box Principle)黑盒原则
多用类的聚合,少用类的继承。
 
(15)DCSP(Don't Concrete Supperclass Principle)不要构造具体的超类原则
避免维护具体的超类。
分享到:
评论

相关推荐

    面向对象编程,OO设计的五大原则

    在本文中,我们将详细探讨OOP设计中的五大原则:单一职责原则(Single Responsibility Principle,简称 SRP)、开放封闭原则(Open-Closed Principle,简称 OCP)、里氏替换原则(Liskov Substitution Principle,...

    OO设计五个原则.pdf

    本文将详细解析这五大原则之一——开闭原则(Open-Closed Principle,简称OCP),并探讨其在软件开发过程中的应用与实践。 ### 开闭原则:面向对象设计的核心 开闭原则是由Bertrand Meyer于1988年提出的,它强调...

    oo design principles

    以下是五个主要的OO设计原则及其详细解释: 1. 单一职责原则(Single Responsibility Principle, SRP) SRP由Robert Martin提出,指出一个类应该只有一个改变的原因。这意味着类的职责应该高度凝聚,只负责单一的...

    浅谈java中OO的概念和设计原则(必看)

    下面我们将从OO的设计基础、面向对象设计模式、设计目标、设计原则五大方面来浅谈Java中OO的概念和设计原则。 一、OO的设计基础 OO是基于对象概念,以对象为中心,以类和继承为构造机制,充分利用接口和多态提供...

    OO方法、RUP与UML建模(讲义)

    OO方法,全称为面向对象的方法,是一种以对象为中心的软件开发方法论,它结合了数据和操作这些数据的函数,通过抽象、封装、模块化和分层等原则,以提高软件的可维护性和复用性。面向对象分析(OOA)和面向对象设计...

    c++ 面向对象设计五大原则

    面向对象设计的主要任务就是类的设计,不少面向对象(OO)的先驱和前辈已经提出了很多关于类的设计原则,用于指导OOP,其中就包括类设计的五项基本原则。 1.单一职责原则(Single Resposibility Principle,SRP) ...

    面向对象的设计原则 doc

    本文将详细探讨面向对象设计中的六大基本原则,并结合部分文本内容进行深入分析。 #### 一、开闭原则(Open-Closed Principle, OCP) **定义**:开闭原则指出,软件实体(如类、模块等)应该对扩展开放,对修改...

    C++OOAD的设计原则

    本文将详细介绍 LSP、OCP、SRP、ISP 和 DIP 这五大设计原则,并结合 UML 图表进行说明。 #### 1. LSP:Liskov 替换原则 (The Liskov Substitution Principle) Liskov 替换原则由 Barbara Liskov 在 1987 年提出,...

    Reverse Engineering of OO Code Monographs in CS

    对于面向对象(Object-Oriented,简称OO)的代码来说,逆向工程可以帮助开发者更好地理解和重构现有系统,这对于维护大型软件项目、保护知识产权以及提高软件质量等方面都有着不可替代的作用。 #### 二、面向对象...

    head_first_design_patterns.pdf Head First 设计模式(英文原版 非扫描)

    千万不要轻视这些OO原则,因为每个设计模式背后都包含了几个OO原则的概念。很多时候,在设计时有两难的情况,这时候我们必须回归到OO原则,以方便判断取舍。可以这么说:OO原则是我们的目标,而设计模式是我们的做法...

    vc编码规范.pdf

    - **基本原则**:公共控件或类应考虑OO思想,减少外界联系,考虑独立性或封装性。 - **目的**:提高代码的可扩展性和可维护性。 **3. 使用模板** - **基本原则**:公共控件或类应建立使用模板。 - **目的**:...

    Head.First设计模式_PDF.part1

    千万不要轻视这些OO原则,因为每个设计模式背后都包含了几个OO原则的概念。很多时候,在设计时有两难的情况,这时候我们必须回归到OO原则,以方便判断取舍。可以这么说:OO原则是我们的目标,而设计模式是我们的做法...

    面向对象_在线培训学习资料

    SOLID 是五个基本原则的首字母缩写,包括单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)和依赖倒置原则(DIP)。遵循这些原则,可以使代码更易于理解和维护。 本在线培训学习...

    万山垃圾渗滤液处理工程初步设计方案.docx

    《万山垃圾渗滤液处理工程初步设计方案》是关于生活垃圾处理厂污水处理站工程的重要文档,由常州河海水环境工程有限公司于二OO五年五月编制。该设计方案涵盖了多项关键技术和设计原则,旨在有效地处理垃圾渗滤液,...

    UML2.0培训资料

    - **了解OO的设计原则及一些典型的设计模式**:掌握常用的设计原则,例如单一职责原则、开放封闭原则等,并熟悉常见的设计模式,如单例模式、工厂模式等。 #### 三、课程结构 课程结构分为以下几个部分: - **...

    工作述职报告范文集合五篇.docx

    例如,在某份报告中提及的“二OO二年的工作成绩”,需要明确地指出在业务增长和团队协作方面的成就和进步。此外,回顾还需涵盖工作中的主要职责,以及如何达成或超越既定目标的过程和结果。通过这样的回顾,不仅可以...

    1-1面向对象技术基础-作业要求[收集].pdf

    学生需要阅读至少3篇关于面向对象(OO)的文章或书籍,然后撰写一篇小论文,可以是对OO技术的综述、对特定问题的研究,或者对OO特点的探讨。论文应包含标题、中英文摘要、概述、正文(1-2章)和结论,且必须注明...

    深入浅出面向对象的分析与设计1

    #### 五、面向对象设计的原则 1. **单一职责原则(SRP)**:一个类应该只有一个引起它变化的原因。 2. **开放封闭原则(OCP)**:软件实体应该是可扩展的,但不可修改的。 3. **里氏替换原则(LSP)**:子类型必须能够...

    设计模式入门指导

    在设计模式的学习中,SOLID原则是重要的指导思想,它包含了五个面向对象设计的基本原则: - 单一职责原则(Single Responsibility Principle, SRP):一个类应该只有一个引起它变化的原因。 - 开闭原则(Open/Closed...

Global site tag (gtag.js) - Google Analytics