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

面向对象程序设计抽象原则

 
阅读更多

谈到面向对象程序设计,会联想到前人总结的,并认为必须遵守的抽象原则。

1.OCP原则 即 开闭原则

主要的意思就是一个软件实体应当对扩展开放,对修改封闭。对一个已有的软件,如果想要扩展,应当不需要修改已有的代码基础上进行。

 

2.DIP原则 (依赖倒转原则):要针对接口编程,不要针对实现编程。对于不同层次的编程,高层次暴露给低层次的应当是接口,而不是具体的类。

 

3.LOD原则(迪米特法则):只与你直接的朋友通信,而避免和陌生人通信。这样做的目的就是减少不同模块之间的通信,降低耦合度。

 

4.SRP原则(单一职责原则):就一个类而言,应当只专注做一件事和仅有一个引起它变化的原因。

        所谓职责,我们可以理解他为功能,就是设计的这个类功能应该只有一个,而不是两个或更多。也可以理解为引用变化的原因,当你发现有两个变化会要求我们修改这个类,那么你就要考虑拆分这个类了。因为职责是变化的一个轴线,当需求变化时,该变化会反映类的职责的变化

 

5.ISP原则(接口隔离原则):不能强迫用户去依赖他们不使用的接口。换句话说,使用多个专门的接口比使用单一的总接口要好。

它包含了2层意思:

-接口的设计原则:接口的设计应当遵循最小接口原则,不要把用户不使用的方法塞进同一个接口里。

  如果一个接口的方法没有被使用到,则说明该接口过胖,应当将其分割成几个功能专一的接口。

-接口的依赖(继承)原则:如果一个接口a依赖(继承)另一个接口b,则接口a相当于继承了接口b的方法,那么继承了接口b的接口a也应当遵循上述原则:不应该包含用户不适用的方法。

 

6.LSP原则(里氏替换原则):所有引用基类的地方必须透明地使用其子类的对象。

可以理解为所有基类代码的地方用派生类代码替换以后,能够正确执行动作处理。换句话说,如果派生类替换了基类后,不能正确执行动作,那么他们的继承关系就应该废除。从另一个侧面上保证了符合LSP原则的类的扩展不会给系统引入新的错误。

 

7.CARP原则(合成/聚合复用原则):

要尽量使用合成/聚合,而不是继承关系达到复用的目的。

合成和聚合都是联系的特殊种类。

聚合表示整体和部分的关系,表示"拥有".如奔驰360汽车,对奔驰S360引擎,奔驰S360轮胎的关系是聚合关系。离开了奔驰S360汽车,引擎,轮胎就失去了意义。在设计中,聚合不应该频繁出现,这样会增大设计的耦合度。

合成则是一种更强的"拥有",部分和整体的生命周期一样。合成的新的对象完全支配其组成部分,包括她们的创建和毁灭等。一个合成关系的成分对象是不能与另一个合成关系共享的。

   换句话说,合成是值得聚合,而一般说的聚合是引用的聚合。

   在面向对象程序设计中,有两种基本的方法可以实现复用:

   第一种是通过合成/聚合,即合成复用原则,含义是指,尽量使用合成/聚合,而不是继承关系。

   第二种就是通过继承。

   要正确的选择合成/聚合和继承的方法,只有一下的条件全部满足时,才应当使用继承关系:

1),子类是父类的一个特殊种类,而不是父类的一个角色,也就是区分"Has-A"和"Is-A"关系才符合继承关系,"Has-A"关系应当用聚合来描述。

2).永远不会出现需要将子类换成另外一个类的子类的情况,如果不能指定将来是否会变成另外一个子类的话,就不要使用继承。

3),子类具有扩展父类的责任,而不是具有置换掉(override)或注销掉(Nullify)的责任,如果一个子类需要大量的置换掉父类的行为,那么这个类就不应该是该父类的子类。

4),只有在分类学角度上有意义时,才可以使用继承。

    如果语义上存在着明确的is-a关系,并且这种关系是稳定的,不变的,则考虑使用继承:如果没有is-a关系,或者这种关系是可变时,使用合成。

区分"Has-A"与"Is-A"

-Is-A是严格的分类学意义上的定义,意思是一个类是另一种类的一种。

-Has-A表示某一个角色具有某一项责任,也就是说一个类是另一个类的角色,而不是另一个类的特殊种类。

分享到:
评论

相关推荐

    Java面向对象程序设计杨晓燕面向对象基本原则和模式.pptx

    第1页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第1页。 类的UML图 UML类图显示类的三个组成部分,第一是Java中定义的类名,第二个是该类的属性,第三个是该类提供的方法。 第一...

    面向对象程序设计六大原则

    面向对象程序设计六大原则 一、“开-闭”原则(Open-Closed Principle,OCP) 1.1“开-闭”原则的定义及优点 1)定义:一个软件实体应当对扩展开放,对修改关闭( Software entities should be open for extension,but...

    C++面向对象程序设计课件

    面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。通过这些概念面向对象的思想得到了具体的体现。 面向对象编程(Object Oriented Programming,OOP,面向对象...

    《Java程序设计案例教程》教学课件05深入Java面向对象.pptx

    学习目标 01 了解Java面向对象程序设计的思想原则。 02 掌握类的结构、定义及对象的创建和使用。 03 掌握成员变量(实例变量、静态变量)和成员常量(实例常量、静态常量)的定义和使用。 05 理解访问控制、数据...

    程序设计语言概念

    John C.Mitchell 著 前言最好的程序设计语言就是编程思考中的概念上的世界。 --Alan Perlis,NATO软件工程技术会议,罗马,1969 ...第3部分:模块、抽象与面向对象程序设计 第4部分:并发性与逻辑编程

    PHP_面向对象教程(强力推荐)

    面向对象编程 (ObjectOrientedProgramming,OOP, 面向对象程序设计)是一种计算机编程 架构,OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成,OOP 达到了软件工程的三个目标:...

    写给大家看的面向对象编程书(第3版).[美]Matt Weisfeld(带详细书签).pdf

    本书是一部独具特色的面向对象技术著作。书中结合代码示例生动透彻地讲述了面向对象思想的精髓,让读者真正学会以对象方式进行思考。此外,本书还讨论了各种与面向对象概念密切相关的应用主题,包括XML、UML建模语言...

    写给大家看的面向对象编程书(第三版)

    1.1 过程式程序设计与OO程序设计 1.2 从过程式开发转向面向对象开发 1.3 对象到底是什么 1.4 类到底是什么 1.5 使用UML完成类图建模 1.6 封装和数据隐藏 1.7 继承 1.8 多态 1.9 组合 1.10 小结 1.11 本章...

    深入PHP面向对象、模式与实践 (第2版)》 part2

    本书全面深入地剖析了面向对象的php编程与设计。首先介绍了php的oo特性,包括类声明、对象实例化、继承、方法与属性封装以及静态方法与属性、抽象类、接口、异常处理、对象克隆等高级主题。然后介绍了设计模式,阐述...

    程序设计教程 陈家骏等编著

    6.1.3 面向对象程序设计的基本内容 203 6.2 类的定义 204 6.2.1 数据成员 205 6.2.2 成员函数 206 6.2.3 成员的访问控制:信息隐藏 207 6.3 对象 210 6.3.1 对象的创建和标识 210 6.3.2 对象的操作 211 6.3.3 this...

    面向对象与UML资料

    第二章 面向对象的分析与设计 18 第一节 面向对象方法概述 18 对象与面向对象 18 面向对象技术产生的原因 19 面向对象方法的基本思想 19 概念 19 面向对象技术的特点 19 面向对象语言及系统 19 第二节 面向对象的...

    概观C++程序设计语言

    描述在面向对象程序设计中使用到的类层次机制;以及用于支持范型程序设计的模板(template)机制; [§5 大规模程序设计]: 描述namespace(名字空间)以及异常处理(exception handling)机制(在将许多独立的...

    Java程序员应当知道的10个面向对象设计原则

    学习面向对象编程像“抽象”、“封装”、“多态”、“继承” 等基础知识是重要的,但同时为了创建简洁、模块化的设计,了解这些设计原则也同等重要。我经常看到不同经验水平的java程序员,他们有的不知道这些OOPS 和...

    【05-面向对象(下)】

    抽象类里可以包含构造器,抽象类里的构造器并不是用于创建对象,而让其子类调用这些构 造器来完成属于抽象类的初始化操作。 •接口里不能包含初始化块,但抽象类则完全可以包含初始化块。 •一个类最多只能有一个...

    PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程

    面向对象程序设计(OOP)是一种计算机编程架构。OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每...

    《概观C++程序设计语言》

    描述在面向对象程序设计中使用到的类层次机制;以及用于支持范型程序设计的模板(template)机制; [§5 大规模程序设计]: 描述namespace(名字空间)以及异常处理(exception handling)机制(在将许多独立的...

    深入PHP面向对象、模式与实践 (第2版) part1

    本书全面深入地剖析了面向对象的php编程与设计。首先介绍了php的oo特性,包括类声明、对象实例化、继承、方法与属性封装以及静态方法与属性、抽象类、接口、异常处理、对象克隆等高级主题。然后介绍了设计模式,阐述...

    24种设计模式介绍与6大设计原则

    里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能...

    2005-2009软件设计师历年真题

     • 面向对象程序设计语言(如C++、Java、Visual、Bsasic、Visual C++)的基本机制  • 面向对象数据库、分布式对象的概念  4.安全性知识  • 安全性基本概念  • 防治计算机病毒、防范计算机犯罪  • 存取...

Global site tag (gtag.js) - Google Analytics