面向对象的3个要素,5个原则 和 6视点

面向对象三要素
  封装(Encapsulation)
  继承(Inheritance)
  多态(Polymorphism)

面向对象五原则
  单一职责原则(SRP)
  开放-封闭原则(OCP)
  Liskov替换原则(LSP)
  依赖倒置原则(DIP)
  接口隔离原则(ISP)

面向对象六视点
  复用(Reusibility)
  扩展(Extensibility)
  分离(Separability)
  变化(Change)
  简约(Simplicity)
  一致(Coherance)

============================================================================

面向对象五大基本原则(注:从别处摘过来的)

============================================================================

以前一直认为程序中的类有使用到封装、继承、多态就是面向对象设计,其实不然

封装,继承,多态只是面向对象的三大特性,但是在设计程序的时候并不是说类的结构使用到了(或是体现出了)这三个特性就是面向对象,

其实真正的面向对象设计是要符合下面的五大原则:

  单一职责原则(SRP)
  开放封闭原则(OCP) 
  里氏替换原则(LSP) 
  依赖倒置原则(DIP) 
  接口隔离原则(ISP)

单一职责原则(SRP)

一个类应该仅有一个引起它变化的原因(最简单,最容易理解却最不容易做到的一个设计原则)

职员类例子:
  比如在职员类里,将工程师、销售人员、销售经理这些情况都放在职员类里考虑,其结果将会非常混乱,在这个假设下,职员类里的每个方法都要if else判断是哪种情况,从类结构上来说将会十分臃肿,并且上述三种的职员类型,不论哪一种发生需求变化,都会改变职员类!这个是大家所不愿意看到的!

详解摘记:http://www.cnblogs.com/seacryfly/archive/2011/12/29/blog1.html

开放封闭原则(OCP)

既开放又封闭,对扩展是开放的,对更改是封闭的!

扩展即扩展现行的模块,当我们软件的实际应用发生改变时,出现新的需求,就需要我们对模块进行扩展,使其能够满足新的需求!更改封闭即是在我们对模块进行扩展时,勿需对源有程序代码和DLL进行修改或重新编译文件!这个原则对我们在设计类的时候很有帮助,坚持这个原则就必须尽量考虑接口封装,抽象机制和多态技术!

详解摘记:http://www.cnblogs.com/seacryfly/archive/2011/12/29/blog2.html

里氏替换原则(LSP)

子类可以替换父类并且出现在父类能够出现的任何地方

这个原则也是在贯彻GOF倡导的面向接口编程!在这个原则中父类应尽可能使用接口或者抽象类来实现!

子类通过实现了父类接口,能够替换父类的使用地方!通过这个原则,我们客户端在使用父类接口的时候,通过子类实现!意思就是说我们依赖父类接口,在客户端声明一个父类接口,通过其子类来实现这个时候就要求子类必须能够替换父类所出现的任何地方,这样做的好处就是,在根据新要求扩展父类接口的新子类的时候而不影响当前客户端的使用!

依赖倒置原则(DIP)

传统的结构化编程中,最上层的模块通常都要依赖下面的子模块来实现,也称为高层依赖低层!

所以DIP原则就是要逆转这种依赖关系,让高层模块不要依赖低层模块,所以称之为依赖倒置原则!

接口隔离原则(ISP)

这个原则的意思是:使用多个专门的接口比使用单个接口要好的多!

这个我有体会,在我实际编程中,为了减少接口的定义,将许多类似的方法都放在一个接口中,最后发现,维护和实现接口的时候花了太多精力,而接口所定义的操作相当于对客户端的一种承诺,这种承诺当然是越少越好,越精练越好,过多的承诺带来的就是你的大量精力和时间去维护!

时间: 2024-08-06 20:57:42

面向对象的3个要素,5个原则 和 6视点的相关文章

面向对象编程的三特性、七原则和六视点

一.面向对象的特性 三个基本的特性:封装.继承与多态. 1.封装面向对象编程核心思想这一就是就是将数据和对数据的操作封装在一起.通过抽象,即从具体的实例中抽取共同的性质形成一般的概念,比如类的概念. 2.继承继承体现了一种先进的编程模式.子类可以继承父类的属性和功能,即子类继承了父类所具有的数据和数据上的操作,同时又可以增添子类独有的数据和数据上的操作.例如,"人类"继承了"哺乳类"的属性和功能,同时又增添了人类独有的属性和功能. 3.多态 多态是面向对象编程的又一

[学习笔记]面向对象开发中的一些思想和原则

摘自<Java与模式>作者阎宏 面向对象的可复用设计的第一块基石:开闭原则(一个软件实体应当对扩展开放,对修改关闭) "开-闭"原则的手段和工具: 1)里氏代换原则:任何基类出现的地方,子类一定可以出现: 2)依赖倒转原则:要依赖于抽象,不要依赖于实现: 3)合成\聚合复用原则:要尽量使用合成\聚合,而不是继承关系达到复用的目的: 4)迪米特法则:一个软件实体应该与尽可能少的其它实体发生相互作用: 5)接口隔离原则:应当为客户端提供尽可能小的单独的接口,而不要提供大的总接口

面向对象的三大特征、六个原则

三大特征 封装:  一个类封装了数据以及操作数据的代码逻辑体.定义了数据的可访问属性(私有.公有) 继承 : 可以让一个类型获取另外一个类型的属性的方式.分为实现继承和接口继承 多态 : 类实例的一个方法在不同情形下有不同的表现形式,即不同的外在行为.使具有不同的内部结构的对象可以共享相同的外部接口. 六大原则 单一功能原则 : 每个类型(包括接口和抽象)功能要求单一,只负责一件事情.降低代码复杂度,增加可读性可维护性,只有在逻辑足够简单.类中的方法足够少时才可以在代码级别上违反单一职责原则.职

面向对象软件设计原则

提起面向对象,大家也许觉得自己已经非常“精通”了,起码也到了“灵活运用”的境界.面向对象设计不就是OOD吗?不就是用C++.Java.Smalltalk等面向对象语言写程序吗?不就是封装+继承+多态吗? 很好!大家已经掌握了不少对面向对象设计的基本要素:开发语言.基本概念.机制.Java是一种纯面向对象语言,是不是用Java写程序就等于面向对象了呢?我先列举一下面向对象设计的11个原则,测试一下大家对面向对象设计的理解程度-^_^- 单一职责原则(The Single Responsibilit

Java 面向对象的设计原则

一. 1.面向对象思想的核心: 封装.继承.多态.   2.面向对象编程的追求: 高内聚低耦合的解决方案: 代码的模块化设计: 3.什么是设计模式: 针对反复出现的问题的经典解决方案,是对特定条件下(上下文)问题的设计方案的经验总结,是前人设计实践经验的精华. 4.面向对象设计原则 是面向对象设计思想(法理精神)的提炼(基本宪法),比面向对象思想的核心要素更具有实操性,比设计模式(各种具体法律条文)更抽象. 5.如何最大限度降低耦合度? 少用类的继承,多用接口隐藏实现细节. 避免使用全局变量.

设计模式2 面向对象设计原则

面向对象设计原则  原则的目的 面向对象设计原创表  单一职责原则案例 开闭原则 案例 依赖倒转原则 案例 面向对象设计原则  对于面向对象软件系统的设计而言,在支持可维护性的同时,提高系统的可复用性是一个至关重要的问题,如何同时提高一个软件系统的可维护性和可复用性是面向对象设计需要解决的核心问题之一.在面向对象设计中,可维护性的复用是以设计原则为基础的.每一个原则都蕴含一些面向对象设计的思想,可以从不同的角度提升一个软件结构的设计水平.  面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含

面向对象设计原则

七大原则:开闭原则.里氏代换原则.依赖倒转原则.合成/聚合复用原则.迪米特法则.接口隔离原则,单一职责原则. 开闭原则是面向对象的可复用的基石.其他六种原则是手段和工具. 各规则详细(本部分为转载) http://kb.cnblogs.com/page/214010/ 正如牛顿三大定律在经典力学中的位置一样,“开-闭”原则(Open-Closed Principle)是面向对象的可复用设计(Object Oriented Design或OOD)的基石.其他设计原则(里氏代换原则.依赖倒转原则.合

面向对象几大原则

进行面向对象编程,有下面几个原则:一. 面向抽象原则二. 开闭原则三. 多用组合少用继承原则四. 高内聚-低耦合原则 一. 面向抽象原则 下面首先先介绍抽象类和接口,然后介绍面向抽象编程. 1. 抽象类和接口 1.1 抽象类抽象类(abstract)具有如下特点:1. 抽象类中可以有abstract方法,也可以有非abstract方法.2. 抽象类不能使用new运算符创建对象.3. 如果一个非抽象类是某个抽象类的子类,那么它必须重写父类的abstract方法,即在子类中将abstract方法重新

OOP面向对象编程的六大原则(上)

名词解释: OOA:面向对象分析 A:Analyze OOD:面向对象设计D:Design OOP:面向对象编程P:Program OOP六大原则(上):对象单一职责.里式替换原则.迪米特法则.开闭原则 对象单一职责:我们设计的对象必须职责明确,不能让他成为万能类,这里的对象可以是模块.类库,程序集,不单单指类. 1.特点:最常见的.比如分层:Model.业务层.UI层.把具有相同行为的类.放到一个模块,这个就是模块职责明确. 2.好处:每个类所包含的行为,属性都属于本身,后续的维护更具有针对性