现在的位置: 首页 > 综合 > 正文

面向对象设计基本原则

2012年09月03日 ⁄ 综合 ⁄ 共 1534字 ⁄ 字号 评论关闭
1、单一职责原则(Single Responce Principle)
   SRP定义:对一个类或接口而言,应仅有一个引起它变化的原因。
   在SRP中,我们把职责定义为“变化的原因”(a reason for change)。如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多个职责。本原则基本途径就是提高内聚性,如果一个类承担的职责过多,那么这些职责就相互依赖,一个职责的变化可能会影响另一个职责的履行。其实OOD的实质,就是合理的进行类的职责分配
   对于何时遵循SRP有以下考虑:
   1、如果应用程序的变化会影响到类中某一种职责,那么就应该将它与另一种职责分离,这样做可以避免客户应用程序和类中的职责耦合在一起。
   2、如果应用程序的变化总是会导致两个职责的同时变化,那么就不必分离它们。实际上,分离它们会带来不必要的复杂性。
   从上可得知:变化的轴线仅当变化实际发生时才具有真正的意义。如果没有征兆,那么去应用SRP或其他任何原则都是不明智的。

2、开放-封闭原则(The Open-Closed Principle)
   OCP:一个软件实体(类、模块、函数等),应该是可扩展的,但是不可修改的。[Software Entities Should Be Open For Extension,Yet Close For Modification]
   该原则认为我们应该试图设计出永远也不需要改变的模块。这是理想状态,但我们应该努力最小化不满足OCP原则的模块数量。
   开放--封闭原则是OOD的真正核心。对扩展开放,模板行为可以被扩展,以满足新的需求;对更改封闭,模块的源代码是不允许改动的。如何做到这两点呢?关键在于抽象把可能的变化用抽象隔离之。
   符合此原则意味着最高等级的复用性(Reusability)和可维护性(Maintainability)。

3、里氏替换原则(Liskov Substitution Principle)
   LSP描述:使用指向基类(超类)的引用的函数(方法),必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。[ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects Of Derived(Sub) Classes Without Knowing It ]

   LSP严格的表达是:如果对每个类型为T1的对象O1,都有类型为T2的对象O2,使得T1定义的所有程序P在所有的对象O1替换O2的时候,程序的行为没有发生变化,那么类型T2是类型T1子类型
   LSP是继承复用的基石;它清楚的表示了ISA关系全部都是与行为有关的;所有子类必须符合使用基类的Client所期望的行为;子类型也不得具有比基类更多的限制。
   LSP原则要求父类应尽可能使用接口抽象类来实现,即面向接口编程


4、依赖倒置原则(Dependency Inversion Principle)
   DIP描述:高层模块不依赖于低层模块,两者都依赖抽象;抽象不应依赖于细节,细节应依赖于抽象。
   此原则并非普适于任何上下文,它要求我们把接口(或抽象类)放在使用方(高层),而对被使用方(实现方、低层)透明。
   依赖真的要倒置么取决于上下文接口归属权看谁是系统的核心。


5、接口隔离原则(Interface Segregation Principle)
   ISP描述:从一个客户类的角度来讲,一个类对另外一个类的依赖性应当是建立在最小的接口上的。使用多个专门的接口比使用单一的总接口要好。
   一个没有经验的设计师往往想节省接口的数目,将一些功能相关或相近的接口合并,造成接口污染


 

 

抱歉!评论已关闭.