精华内容
下载资源
问答
  • 2016-07-19 22:00:43

    1、单一职责原则

    应该有且仅有一个原因引起类的改变

    2、里氏替换原则

    所有引用基类的地方必须能够透明的使用其子类的对象

    3、依赖倒置原则

    高层模块不应该依赖底层模块,两者都应该依赖抽象;抽象不应该依赖细节;细节应该依赖抽象

    4、接口隔离原则

    类间依赖应该建立在接口上;建立单一接口,不要建立庞大臃肿的接口;接口应该尽量细化

    5、开闭原则

    软件应该对扩展开放,对修改关闭;应该通过扩展来实现改变,不应该通过修改已有代码来实现改变

    更多相关内容
  • oo 五大原则

    2008-11-24 15:17:54
    OO五大原则中的 LSP(里氏替换原则) 现将近期整理的文档提供给大家,这里对LSP做重点的介绍,望对大家有帮助,在学习和使用OO设计的时候,我们应该明白:OO的出现使得软件工程师们能够用更接近真实世界的方法...
    OO的五大原则中的 LSP(里氏替换原则)
    现将近期整理的文档提供给大家,这里对LSP做重点的介绍,望对大家有帮助,在学习和使用OO设计的时候,我们应该明白:OO的出现使得软件工程师们能够用更接近真实世界的方法描述软件系统。然而,软件毕竟是建立在抽象层次上的东西,再怎么接近真实,也不能替代真实或被真实替代。
    OO设计的五大原则之间并不是相互孤立的。彼此间存在着一定关联,一个可以是另一个原则的加强或是基础。违反其中的某一个,可能同时违反了其余的原则。因此应该把这些原则融会贯通,牢记在心!
    OO的五大原则是指SRP、OCP、LSP、DIP、ISP。
    1. SRP(Single Responsibility Principle 单一职责原则)
    单一职责很容易理解,也很容易实现。所谓单一职责,就是一个设计元素只做一件事。什么是“只做一件事”?简单说就是少管闲事。现实中就是如此,如果要你专心做一件事情,任何人都有信心可以做得很出色。
    OCP作为OO的高层原则,主张使用“抽象(Abstraction)”和“多态(Polymorphism)”将设计中的静态结构改为动态结构,维持设计的封闭性。
    2. OCP :开闭原则,很简单,一句话:“Closed for Modification; Open for Extension”——“对变更关闭;对扩展开放”。开闭原则其实没什么好讲的,我将其归结为一个高层次的设计总则。OCP的动机很简单:软件是变化的。不论是优质的设计还是低劣的设计都无法回避这一问题。OCP说明了软件设计应该尽可能地使架构稳定而又容易满足不同的需求。 为什么要OCP?答案也很简单——重用。
    3.LSP——里氏替换原则
    OCP作为OO的高层原则,主张使用“抽象(Abstraction)”和“多态(Polymorphism)”将设计中的静态结构改为动态结构,维持设计的封闭性“抽象”是语言提供的功能。“多态”由继承语义实现。 如此,问题产生了:“我们如何去度量继承关系的质量?”
    Liskov于1987年提出了一个关于继承的原则“Inheritance should ensure that any property proved about supertype objects also holds for subtype objects.”——“继承必须确保超类所拥有的性质在子类中仍然成立。”也就是说,当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有is-A关系。
    该原则称为Liskov Substitution Principle——里氏替换原则。
    我们来研究一下LSP的实质。学习OO的时候,我们知道,一个对象是一组状态和一系列行为的组合体。状态是对象的内在特性,行为是对象的外在特性。LSP所表述的就是在同一个继承体系中的对象应该有共同的行为特征。
    这一点上,表明了OO的继承与日常生活中的继承的本质区别。举一个例子:生物学的分类体系中把企鹅归属为鸟类。我们模仿这个体系,设计出这样的类和关系。


    类“鸟”中有个方法fly,企鹅自然也继承了这个方法,可是企鹅不能飞阿,于是,我们在企鹅的类中覆盖了fly方法,告诉方法的调用者:企鹅是不会飞的。这完全符合常理。但是,这违反了LSP,企鹅是鸟的子类,可是企鹅却不能飞!需要注意的是,此处的“鸟”已经不再是生物学中的鸟了,它是软件中的一个类、一个抽象。
    有人会说,企鹅不能飞很正常啊,而且这样编写代码也能正常编译,只要在使用这个类的客户代码中加一句判断就行了。但是,这就是问题所在!首先,客户代码和“企鹅”的代码很有可能不是同时设计的,在当今软件外包一层又一层的开发模式下,你甚至根本不知道两个模块的原产地是哪里,也就谈不上去修改客户代码了。客户程序很可能是遗留系统的一部分,很可能已经不再维护,如果因为设计出这么一个“企鹅”而导致必须修改客户代码,谁应该承担这部分责任呢?(大概是上帝吧,谁叫他让“企鹅”不能飞的。^_^)“修改客户代码”直接违反了OCP,这就是OCP的重要性。违反LSP将使既有的设计不能封闭!

    修正后的设计如下:

    LSP并没有提供解决这个问题的方案,而只是提出了这么一个问题。 于是,工程师们开始关注如何确保对象的行为。1988年,B. Meyer提出了Design by Contract(契约式设计)理论。DbC从形式化方法中借鉴了一套确保对象行为和自身状态的方法,其基本概念很简单:

    每个方法调用之前,该方法应该校验传入参数的正确性,只有正确才能执行该方法,否则认为调用方违反契约,不予执行。这称为前置条件(Pre-condition)。
    一旦通过前置条件的校验,方法必须执行,并且必须确保执行结果符合契约,这称之为后置条件(Post-condition)。
    对象本身有一套对自身状态进行校验的检查条件,以确保该对象的本质不发生改变,这称之为不变式(Invariant)。
    以上是单个对象的约束条件。为了满足LSP,当存在继承关系时,子类中方法的前置条件必须与超类中被覆盖的方法的前置条件相同或者更宽松;而子类中方法的后置条件必须与超类中被覆盖的方法的后置条件相同或者更为严格。

    4.DIP 依赖倒置原则
    依赖倒置(Dependence Inversion Principle)原则讲的是:要依赖于抽象,不要依赖于具体。
    简单的说,依赖倒置原则要求客户端依赖于抽象耦合。原则表述:
    抽象不应当依赖于细节;细节应当依赖于抽象;
    要针对接口编程,不针对实现编程。

    5.ISP 接口隔离原则
    使用多个专门的接口比使用单一的总接口要好。广义的接口:一个接口相当于剧本中的一种角色,而此角色在一个舞台上由哪一个演员来演则相当于接口的实现。因此一个接口应当简单的代表一个角色,而不是一个角色。,如果系统设计多哥角色的话,则应当每一个角色都由一个特定的接口代表。狭义的接口(Interface):接口隔离原则讲的就是同一个角色提供宽、窄不同的接口,以对付不同的客户端。
    展开全文
  • OO原则的五大原则

    千次阅读 2016-08-29 23:24:27
    现将近期整理的文档提供给大家,这里对LSP做重点的介绍,望对大家有帮助,在...OO设计的五大原则之间并不是相互孤立的。彼此间存在着一定关联,一个可以是另一个原则的加强或是基础。违反其中的某一个,可能同时违反了

    现将近期整理的文档提供给大家,这里对LSP做重点的介绍,望对大家有帮助,在学习和使用OO设计的时候,我们应该明白:OO的出现使得软件工程师们能够用更接近真实世界的方法描述软件系统。然而,软件毕竟是建立在抽象层次上的东西,再怎么接近真实,也不能替代真实或被真实替代。 
    OO设计的五大原则之间并不是相互孤立的。彼此间存在着一定关联,一个可以是另一个原则的加强或是基础。违反其中的某一个,可能同时违反了其余的原则。因此应该把这些原则融会贯通,牢记在心!

    OO的五大原则是指SRP、OCP、LSP、DIP、ISP。 


    1. SRP(Single Responsibility Principle 单一职责原则) 
    单一职责很容易理解,也很容易实现。所谓单一职责,就是一个设计元素只做一件事。什么是“只做一件事”?简单说就是少管闲事。现实中就是如此,如果要你专心做一件事情,任何人都有信心可以做得很出色。 

    2. OCP :开闭原则

    很简单,一句话:“Closed for Modification; Open for Extension”——“对变更关闭;对扩展开放”。开闭原则其实没什么好讲的,我将其归结为一个高层次的设计总则。OCP的动机很简单:软件是变化的。不论是优质的设计还是低劣的设计都无法回避这一问题。OCP说明了软件设计应该尽可能地使架构稳定而又容易满足不同的需求。 为什么要OCP?答案也很简单——重用。

    3.LSP——里氏替换原则 

    OCP作为OO的高层原则,主张使用“抽象(Abstraction)”和“多态(Polymorphism)”将设计中的静态结构改为动态结构,维持设计的封闭性“抽象”是语言提供的功能。“多态”由继承语义实现。 如此,问题产生了:“我们如何去度量继承关系的质量?” 
    Liskov于1987年提出了一个关于继承的原则“Inheritance should ensure that any property proved about supertype objects also holds for subtype objects.”——“继承必须确保超类所拥有的性质在子类中仍然成立。”也就是说,当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有is-A关系。 
    该原则称为Liskov Substitution Principle——里氏替换原则。 
    我们来研究一下LSP的实质。学习OO的时候,我们知道,一个对象是一组状态和一系列行为的组合体。状态是对象的内在特性,行为是对象的外在特性。LSP所表述的就是在同一个继承体系中的对象应该有共同的行为特征。 
    这一点上,表明了OO的继承与日常生活中的继承的本质区别。举一个例子:生物学的分类体系中把企鹅归属为鸟类。我们模仿这个体系,设计出这样的类和关系。


    类“鸟”中有个方法fly,企鹅自然也继承了这个方法,可是企鹅不能飞阿,于是,我们在企鹅的类中覆盖了fly方法,告诉方法的调用者:企鹅是不会飞的。这完全符合常理。但是,这违反了LSP,企鹅是鸟的子类,可是企鹅却不能飞!需要注意的是,此处的“鸟”已经不再是生物学中的鸟了,它是软件中的一个类、一个抽象。 
    有人会说,企鹅不能飞很正常啊,而且这样编写代码也能正常编译,只要在使用这个类的客户代码中加一句判断就行了。但是,这就是问题所在!首先,客户代码和“企鹅”的代码很有可能不是同时设计的,在当今软件外包一层又一层的开发模式下,你甚至根本不知道两个模块的原产地是哪里,也就谈不上去修改客户代码了。客户程序很可能是遗留系统的一部分,很可能已经不再维护,如果因为设计出这么一个“企鹅”而导致必须修改客户代码,谁应该承担这部分责任呢?(大概是上帝吧,谁叫他让“企鹅”不能飞的。^_^)“修改客户代码”直接违反了OCP,这就是OCP的重要性。违反LSP将使既有的设计不能封闭!

    修正后的设计如下:

    LSP并没有提供解决这个问题的方案,而只是提出了这么一个问题。 于是,工程师们开始关注如何确保对象的行为。1988年,B. Meyer提出了Design by Contract(契约式设计)理论。DbC从形式化方法中借鉴了一套确保对象行为和自身状态的方法,其基本概念很简单:

    每个方法调用之前,该方法应该校验传入参数的正确性,只有正确才能执行该方法,否则认为调用方违反契约,不予执行。这称为前置条件(Pre-condition)。 
    一旦通过前置条件的校验,方法必须执行,并且必须确保执行结果符合契约,这称之为后置条件(Post-condition)。 
    对象本身有一套对自身状态进行校验的检查条件,以确保该对象的本质不发生改变,这称之为不变式(Invariant)。 
    以上是单个对象的约束条件。为了满足LSP,当存在继承关系时,子类中方法的前置条件必须与超类中被覆盖的方法的前置条件相同或者更宽松;而子类中方法的后置条件必须与超类中被覆盖的方法的后置条件相同或者更为严格。

    4.DIP 依赖倒置原则 

    依赖倒置(Dependence Inversion Principle)原则讲的是:要依赖于抽象,不要依赖于具体。 
    简单的说,依赖倒置原则要求客户端依赖于抽象耦合。原则表述: 
    抽象不应当依赖于细节;细节应当依赖于抽象; 
    要针对接口编程,不针对实现编程。

    5.ISP 接口隔离原则 
    使用多个专门的接口比使用单一的总接口要好。广义的接口:一个接口相当于剧本中的一种角色,而此角色在一个舞台上由哪一个演员来演则相当于接口的实现。因此一个接口应当简单的代表一个角色,而不是一个角色。,如果系统设计多哥角色的话,则应当每一个角色都由一个特定的接口代表。狭义的接口(Interface):接口隔离原则讲的就是同一个角色提供宽、窄不同的接口,以对付不同的客户端。

    展开全文
  • OO五大原则:Solid

    2013-05-08 12:35:00
    有趣地发现,OO五大原则其实可以简写为一个单词:SOLID(稳固、稳定的意思)其实一个组织要稳定,如果内部不团结(内聚)又如何做到稳定呢!如果内聚性不高,一有新变化的时候内部就会发生大革命了! 如何解释Solid...

    有趣地发现,OO五大原则其实可以简写为一个单词:SOLID(稳固、稳定的意思)其实一个组织要稳定,如果内部不团结(内聚)又如何做到稳定呢!如果内聚性不高,一有新变化的时候内部就会发生大革命了!

    如何解释Solid呢? 其实是五个单词的首字母:

     

    1. SSingle Responsibility Principle(SRP) 单一职责原则,即表示:类的职责要单一,不要多管闲事也不要丢三落四。

    2. OOpen & Close Principle(OCP) 开闭原则,即表示:在设计一个系统时,你是否把类设计得十分合理。而检测的标准就是,当有新的需求增加或变化时,你是否是编写新代码来满足而不是改动原有代码。当然事情可能没有那么绝对,但至少是要向着这个方向努力:对修改关闭(尽量不要让变化影响到已经设计好的类),对扩展开放(新的逻辑采用添加新代码即可实现)。

    3. LLiskov Substitution Principle(LSP) 里氏替换原则,即表示:在任何父类可以出现的地方,都可以用子类的实例来赋值给父类型的引用,如:

    1 class ParentClass{}
    2 class SubClass : ParentClass{}
    3 ParentClass pc = new SubClass();

    这样来理解有些片面,但实际编程过程中基本上是这样来处理代码;其实也体现了一个原则:采用抽象来封装变化,在这里ParentClass就可以理解为“抽象”(abstract class ParentClass)来封装子类的变化,不依赖于子类的具体实现,也不需要关系到底有多少个子类。

    4. IInterface Segregation Principle(ISP) 接口分隔原则,即表示:采用多个与特定逻辑有关的接口总是比采用一个涵盖所有业务方法的接口要好。这也可以从职责单一这个角度去理解,当业务的组合关系比较复杂多变的时候,通过多个单一职责的接口的组合来实现往往会让代码结构更加清晰易于维护和扩展。

    5. DDependence Inversion Principle(DIP) 依赖倒置原则,即表示:依赖于抽象,不要依赖于具体,同时在抽象级别不应该有对于细节的依赖。这样做的好处就在于可以最大限度地应对可能的变化。

     

    各个原则之间都是有些联系的,在代码设计时就需要灵活地运用而且不断地重构来弱化系统对变化带来的冲击! 

     

     

    转载于:https://www.cnblogs.com/wbqsln/archive/2013/05/08/3066523.html

    展开全文
  • oo五大原则

    2016-04-02 11:59:30
    OO(Object Oriented,面向对象)的五大原则是指SRP、OCP、LSP、DIP、ISP 1. SRP(Single Responsibility Principle 单一职责原则)  单一职责很容易理解,所谓单一职责,就是一个设计元素只做一件事。 2. OCP ...
  • 面向对象设计的主要任务就是类的设计,不少面向对象(OO)的先驱和前辈已经提出了很多关于类的设计原则,用于指导OOP,其中就包括类设计的项基本原则。 1.单一职责原则(Single Resposibility Principle,SRP) ...
  • OO设计五大原则

    千次阅读 2015-07-08 23:13:34
    OO五大原则是指SRP、OCP、LSP、DIP、ISP 1. SRP(Single Responsibility Principle 单一职责原则)  单一职责很容易理解,所谓单一职责,就是一个设计元素只做一件事。 SRP 原则的核心含义是只能让一...
  • oo设计五大原则:

    2018-01-28 14:46:29
    SRP(Single Responsibility Principle 单一职责原则)   单一职责很容易理解,所谓单一职责,就是一个设计元素只做一件事 2. OCP (Open Close Principle 开闭原则)  一句话:“Closed for Modification; ...
  • 面向对象,编程,OO设计的五大原则 OO五大原则是指SRP、OCP、LSP、DIP、ISP。
  • S.O.L.I.D   ... The Open/Closed Principle(开闭原则OCP) The Liskov Substitution Principle(里氏替换原则LSP) The Interface Segregation Principle(接口分离原则ISP) The Depend...
  • OO五大原则

    2017-06-27 17:55:33
    http://blog.chinaunix.net/uid-174325-id-3026114.html
  • 1. SRP(Single Responsibility Principle 单一职责原则) 单一职责很容易理解,也很容易实现。所谓单一职责,就是一个设计元素只做一件事。什么是“只做一件事”?简单说就是少管闲事。现实中就是如此,如果要你...
  • OO设计的5大原则

    2019-12-11 20:57:59
    一.OO(面向对象)的设计基础 面向对象(OO):就是基于对象概念,以对象为中心,以类和继承为构造机制,充分利用接口和多态提供灵活性,             ...
  • 原文链接: [u]http://hi.baidu.com/gengxiaoguo/blog/item/abd6c09b46ddf8b2c8eaf4b5.html[/u] ... OO五大原则(2.OCP——开闭原则)之详解 开闭原则很简单,一句话:...
  • OO面相对象设计的五大原则

    千次阅读 2014-06-19 11:08:46
    The Single Responsibility Principle(单一职责SRP)The Open/Closed Principle(开闭原则OCP)The Liskov Substitution Principle(里氏替换原则LSP)The Interface Segregation Principle(接口分离原则ISP)The ...
  • OO大原则

    千次阅读 2016-11-11 12:27:34
    OO大原则为:单一职责原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、合成/聚合复用原则、迪米特法则 1、单一职责原则SRP(Simple Responsibility Principle): 单一职责原则,就是一个设计元素只...
  • 一点说明:OO五大原则是指SRP、OCP、LSP、DIP、ISP。这五个原则是书中所提到的。除此之外,书中还提到一些高层次的原则用于组织高层的设计元素,这些放到下次再写。当然,OO设计的原则可能不止这五个,希望大家多...
  • 开闭原则很简单,一句话:“Closed for Modification; Open for Extension”——“对变更关闭;对扩展开放”。开闭原则其实没什么好讲的,我将其归结为一个高层次的设计总则。就这一点来讲,OCP的地位应该比SRP优先...
  • OO五大原则(1.SRP 单一职责原则)

    千次阅读 2008-03-20 10:41:00
    一点说明:OO五大原则是指SRP、OCP、LSP、DIP、ISP。这五个原则是书中所提到的。除此之外,书中还提到一些高层次的原则用于组织高层的设计元素,这些放到下次再写。当然,OO设计的原则可能不止这五个,希望大家多...
  • 为此不少OO先驱提出了很多有关面向对象的设计原则用于指导OO的设计和开发。下面是几条与类设计相关的设计原则。  单一职责原则SRP:Single Responsibility Principle  开放封闭原则OCP:Open-Close ...
  • OO五大原则(2.OCP——开闭原则)

    千次阅读 2008-03-20 10:42:00
    开闭原则很简单,一句话:“Closed for Modification; Open for Extension”——“对变更关闭;对扩展开放”。开闭原则其实没什么好讲的,我将其归结为一个高层次的设计总则。就这一点来讲,OCP的地位应该比SRP优先...
  • OO设计原则

    2019-09-23 09:03:24
    一、单一职责原则(Single Responsibility Principle,SRP) 含义: 1、避免相同的职责分散到不同的类中 2、避免一个类承担太多职责 作用: 1、可以减少类之间的耦合 2、提高类的复用性 一个类,只有一个引起它变化的...
  • OO设计原则

    2020-06-22 17:19:17
    目录 一、单一职责原则(Single Responsibility Principle, 简称SRP) 二、开放封闭原则(Open-Close Principle, ...、接口隔离原则(Interface Segregation Principle, ISP) 六、迪米特法则(Law of Demeter L
  • OCP作为OO的高层原则,主张使用“抽象(Abstraction)”和“多态(Polymorphism)”将设计中的静态结构改为动态结构,维持设计的封闭性。 “抽象”是语言提供的功能。“多态”由继承语义实现。 如此,问题产生了:“我们...
  • OO设计原则最全分析总结篇

    千次阅读 2018-04-20 09:06:14
    面向对象(OO)的基本特征: 抽象,先不考虑细节 封装,隐藏内部实现 ... OO设计原则: 单一职责 开闭原则 里氏替换 依赖倒置 接口隔离 迪米特法则 1. 单一职责原则(SRP) 定义...
  • 合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP)经常又叫做合成复用原则。合成/聚合复用原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派...
  • OO大原则

    2011-11-25 19:11:00
    OO设计领域,我们知道前人总结了不少的经验,许多的经验在现代软件工程过程中已经被认为是原则来遵守。下面笔者摘抄几项下文涉及到的OO原则的定义。 OCP(开闭原则,Open-Closed Principle):一个软件的实体...
  • OO设计原则

    2018-10-30 13:37:39
    前面发表了5篇OO设计原则的文章,在这里我将这个5个原则如何在我们设计过程进行应用进行一下总结, 单一职责原则(SRP) 开放/封闭原则(OCP) 里氏替换原则(LSP) 接口分隔原则(ISP) 依赖倒置原则(DIP) 这是我通过...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,972
精华内容 3,188
关键字:

oo五大原则