`
Acea
  • 浏览: 15191 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

面向对象的几个原则

阅读更多
http://joard.iteye.com/blog/168069

开-闭原则 Open-Closed Principle OCP
里氏代换原则 Liskov Substitution Principle LSP
依赖倒转原则 Dependency Inversion Principle DIP
接口隔离原则 Interface Segregation Principle ISP
组合/聚合复用原则 Composition/Aggregation Principle CARP
迪米特法则 Law of Demeter LoD
可扩展性:OCP, LSP, DIP,CARP
灵活性:OCP, ISP,LoD

1.开闭原则 OCP
一个软件的实体应当对扩展开放,对修改关闭。
Software entities should be open for extension,but closed for modification.

对可变性的封装原则 Principle of Encapsulation of Variation EVP
EVP实际上是设计模式的主题,换言之,所有的设计模式都是对不同的可变性的封装,从而使系统在不同的角度上达到OCP要求。

2.里氏代换原则 LSP
如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有对象o1都代换成o2时,程序P的行为没有变化,那么类型T2是T1的子类型。
LSP要求凡是基类使用的地方,子类型一定适用。
LSP是一条非常严格的原则,要求基类变为子类的时候,其程序行为不发生改变。在oop时并没有严格按照LSP来做。

3.依赖倒转原则 DIP
表述1:抽象不应当依赖于细节,细节应当依赖于抽象。
Abstractions should not depend upon details, details should depend upon abstractions.
表述2:要针对接口编程,不要针对实现编程。
Program to an interface, not an implementation.

4.接口隔离原则 ISP
使用多个专门的接口比使用单一的总接口要好。
一个类对另一个类的依赖性应当是建立在最小接口上的(LoD)。

5.合成/聚合复用原则 CARP
= 合成复用原则 Composite Reuse Principle CRP
要尽量使用合成/聚合,尽量不要使用继承。
继承的优点:①新类易实现. ②易修改或扩展
缺点:①继承复用破环包装,白箱复用.
②超类发生变化,子类不得不改变.
③继承的实现是静态的,不能在运行时改变.
优缺点的②是相互对应的。

6.迪米特法则 LoD
= 最少知识原则 Least Konwledge Principle
一个对象应当对其他对象有尽可能少的了解。
表述:
①只与你直接的朋友们通信 Only talk to your immediate friends
②不要跟陌生人说话 Don's talk to strangers
③每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。
LoD的实质是控制对象之间的信息流量,流向及信息的影响。
①优先考虑将一个类设置成不变类.
②尽量降低类/成员的访问权限.

要想恰到好处地在一个系统里面使用设计模式,必须做到以下几点:
①完全了解面临的问题,这就是说要完全了解具体情况。如果不完全了解所面临的难题,怎么能谈得上解决问题呢?
②完全了解模式,这就是说要十分懂得理论。如果不完全懂得所使用的理论,怎么能够正确地应用这一理论呢?
③非常了解怎样使用设计模式解决实际的问题,这就是说要将模式理论与具体系统需求情况相结合。如果设计师不知道一个设计模式怎样对系统设计有帮组的话,最好不要使用这个模式。不要只是因为想在简历上写上设计模式方面的经验就盲目地使用模式。
分享到:
评论

相关推荐

    UML简介与面向对象的设计原则

    UML简介与面向对象的设计原则 建模的重要性?  如果你想搭一个狗窝,你备好木料、钉子和一些基本工具(如锤子、锯和卷尺) ,就可以开始工作。从制定一点初步的计划到完成一个满足适当功能的狗窝,你 可能不用别人...

    面向对象基本原则PPT

    这个PPT讲述了面向对象的几个基本原则,很详细,还有代码示例

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

    面向对象设计模式设计原则 自己下了看吧,,面向对象程序设计时候的 几个基本原则了

    Java面向对象程序设计面向对象的几个基本原则PPT教案学习.pptx

    Java面向对象程序设计面向对象的几个基本原则PPT教案学习.pptx

    软件体系结构与设计模式第五章面向对象的几个基本原则.ppt

    软件体系结构与设计模式第五章面向对象的几个基本原则.ppt

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

    然后介绍了设计模式,阐述了模式的概念,展示了如何在php中实现几个关键的模式,用专门的章节介绍了企业模式和数据库模式。本书最后一部分围绕php应用程序开发,详细介绍了一批极为实用的辅助开发工具,讨论了具有...

    面向对象与UML资料

    几个注意点 71 自然语言分析: Abbott的试探法 72 第二节 标识实体对象 72 标识实体对象的试探法 72 例子:报告紧急情况用例 73 例子:报告紧急情况用例的实体对象 73 第三节 标识边界对象 73 标识边界对象的试探法 ...

    【05-面向对象(下)】

    •不可变的类要满足以下几个条件:  –1.使用private和final修饰符来修饰该类的属性  –2.提供带参数的构造器,用于根据传入参数来初始化类里的属性  –3.仅为该类的属性提供getter方法,不要为该类的属性提供...

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

    然后介绍了设计模式,阐述了模式的概念,展示了如何在php中实现几个关键的模式,用专门的章节介绍了企业模式和数据库模式。本书最后一部分围绕php应用程序开发,详细介绍了一批极为实用的辅助开发工具,讨论了具有...

    PHP 面向对象技术(全面讲解).txt

    在面向对象的编程语言中,类是一个独立的程 序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。 LAMP 大讲堂PHP 面向对象技术(全面讲解) 网站:http://www.phpchina.com 投稿:phper@phpchina.com ...

    面向对象三大特性的意义讲解

    这是任何一本面向对象设计的书里都会介绍的,但鲜有讲清楚的,新手看了之后除了记住几个概念外,并没真正了解他们的意义。前几天在youtube上看了Bob大叔讲解的SOLID原则,其中有一段提到面向对象的三大特性,收获很...

    Javascript之面向对象–接口

    程序中的接口:规定好有几个方法,方法名是什么。(因程序中要完成任务,都是通过函数或者说方法去实现的。) javascript中的接口:把实例出来的某”类型对象”、和实例出来的”接口对象”,进行一个比较,符合规则,...

    测量程序编制 - python A4面向对象-property.pptx

    面向对象——property();在不破坏类封装原则的基础上,为了能够有效操作类中的属性,类中应包含读(或写)类属性的多个 getter(或 setter)方法,这样就可以通过“类对象.方法(参数)”的方式操作属性;这种操作类...

    UML和模式应用学习笔记

     面向对象分析与设计中最重要的能力是能够熟练地为软件构建分配职责  9个职责分配的基本原则:  专家模式。通常情况下,谁来履行职责?将职责指派给信息专家—那些掌握了为履行职责所必需的信息的类。  创建...

    大话设计模式的源码 pdf文件在我空间免费下载

    其中,第1、3、4、5章着重讲解了面向对象的意义、好处以及几个重要的设计原则;第2章,以及第6到第28章详细讲解了23个设计模式;第29章是对设计模式的全面总结。附录部分是通过一个例子的演变为初学者介绍了面向对象...

    敏捷软件开发原则,模式与实践

     ●面向对象设计原则:本书包含了11个面向对象设计原则,涵盖了包的设计和类的设计。这是我所见过的对这方面内容讲解的最清晰、最彻底、最深刻的唯一的一本书。  ●设计模式:本书中讲述了23个设计模式,并都有...

    軟件建模技術與與UML說明

    1.4 面向对象方法基础 2.1 关于UML 2.2 UML的构成 3.1 用例 3.2 参与者 3.3 用例之间的关系 3.4 用例图 3.5 发现用例 4.1 类的定义 4.2 类的关系 4.3 类图 4.4 对象图 4.5 几个特殊问题 5.1 概述 5.2 顺序图 5.3 ...

    201705130112_张烜1

    1. 熟悉设计方法与设计原则 2. 对设计原则的讲解进行评价 3. 熟悉面向对象的设计 2.结合项目的进程和开发历程,从设计原则的几个方面,对

    软件工程-理论与实践(许家珆)习题答案

    软件发展有几个阶段?各有何特征? 答: ① 程序设计阶段。  硬件特征:价格贵、存储容量小、运行可靠性差。  软件特征:只有程序、程序设计概念,不重视程序设计方法。  ② 程序系统阶段。  硬件特征:速度、...

    JavaEE认证-面试题.doc

    1.项目开发经历了哪几个阶段? 2.白盒测试和黑盒测试 3.面向对象设计原则有哪些 4.写出简单工厂模式的示例代码

Global site tag (gtag.js) - Google Analytics