`

面向对象设计的六大基本原则

阅读更多

 

面向对象设计的六大基本原则:

1)开闭原则

2)里氏代换原则

3)依赖倒转原则

4)接口隔离原则

5)迪米特法则

6)合成/聚合复用原则

 

依次解释六大基本原则:

1) 开闭原则: 

    即面向扩展开放,面向修改封闭,也就是说系统支持扩展,但是不支持修改。

    为什么这么做?

在开发阶段,我们都知道,如果对一个功能进行扩展,如果只是一味地对方法进行修改,可能会造成一些问题,诸如 可 能会引入新的bug,或者增加代码的复杂度,对代码结构造成破坏、冗余,还需要重新进行全面的测试。那么该怎么解决这些问题?很简单,这就需要系统能够支持扩展,只有扩展性良好的系统,才能在不进行修改已有实现代码的基础上,引进新的功能。

 

    我们应该怎么做?

要做到开闭原则,就需要多使用抽象类或者接口,将相似的类进行抽象,将公有的功能引入到抽象类中,这样在进行扩展时,只需要依据抽象类,生成新的子类即可。

 

2) 里氏代换原则:

    即任何使用基类的地方,都能够使用子类替换,而且在替换子类后,系统能够正常工作。

    为什么这么做?

采用里氏替代原则可以增强程序的健壮性,版本升级的时候可以保持非常好的兼容性,即使增加子类,原有的子类也可以继续运行。

    我们应该怎么做?

在引用基类的地方就能引用子类实现

 

 

3) 依赖倒转原则:

    即我们的client类要依赖于抽象,而不是依赖于具体,也就是我们经常听到的“要面向接口编程”。

    为什么这么做?

减少类间的耦合性,提高代码的可读性和可维护性。

    我们应该怎么做?

a、每个类尽量都有接口和抽象类,或者抽象类和接口都有。

b、变量的表面类型尽量是接口或者是抽象类。

c、任何类都不应该从具体类派生。(但是在做二次开发的时候,我们无法获得高层代码的时候例外),规则不是绝对的。

d、尽量不要覆写基类已经实现好的方法。

 

4) 接口隔离原则:

     即应该将接口粒度最小化,将功能划分到每一个不能再分的子角色,为每一个子角色创建接口,通过这样,才不会让接口的实现类实现一些不必要的功能。

    为什么这么做?

避免让接口的实现类实现一些不必要的功能

    我们应该怎么做?

建立单一的接口,不要建立臃肿的庞大的接口,也就是说接口的方法尽量少。

 

5) 迪米特法则:

    即尽量减少类之间的依赖关系.

    为什么这么做?

       降低类之间的耦合。

    我们应该怎么做?

       在应用中最直接的实现就是在两个类中间建一个中介类。但是这样可能会造成中介类的澎爆。

 

6) 合成/聚合复用原则:

    即少用继承,多用组合。

    为什么这么做?

优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。

    我们应该怎么做?

使用组合也就是将两个类之间建立关联关系,将一个类做为另一个类的属性。

继承与组合主要是区分两个角色之间是"is a"还是"has a"的关系,如果是"is a"就需要使用继承,而如果是"has a"就需要使用组合。

例如笔可以分为钢笔和油笔,这就是is a的关系,但是油笔与笔芯就是has a的关系。

 

2
9
分享到:
评论
1 楼 liuqing_2010_07 2012-04-29  
不错,不适合初学者看。适合中级java工程师学习学习。能配一个例子,英文资料 就更好。这个可以作为一个专题讨论。想学好设计模式的人,可以结合这个去思考。想写出高质量程序的人,应该带着这样的思维去写程序。
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    面向对象的六大基本原则.md

    介绍面向对象(OOP)的六大基本设计原则,使用markdown格式编写,使用浏览器即可查看! 让我们一起new一个对象吧~O(∩_∩)O

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

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

    面向对象基本原则PPT

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

    23种 设计模式---面向对象的基本原则

    NULL 博文链接:https://hudeyong926.iteye.com/blog/779070

    面向对象的一般原则 六大原则

    了解面向对象设计的六大基本原则 利用六大原则简单的分析和设计面向对象程序

    软件工程——面向对象六大设计要素

    软件工程 面向对象技术 设计要素总结 六大设计原则

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

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

    Java23种基本的设计模式整料整理学习源码示例zip

    里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的...

    设计模式Demo

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

    java基础学习

    面向对象程序设计与...对象容器类(第十一章),图形用户界面(第十二章),数据库编程(第十三章) ,多线程编程(第十四章) ,网络通信编程(第十五章) ,第十六章对面向对象设计原则与设计模式、分布式对象技术

    软件设计师重点考点

    1.7.3面向对象设计方法 136 1.8软件质量(重点) 137 1.8.1八项质量管理原则 138 1.8.2十三个步骤: 140 1.9软件配置管理 140 1.10软件过程改进 142 专题八:知识产权和标准化知识 146 1 标准化的基本知识 146 1.1...

    短信平台设计方案.pdf

    面向对象设计和实现的重点是多个对象的网状组织结构和协同 计算,而不是过程调用的层次结构,这样就在本质上适应了并发、分布 系统及互联网的计算特征。 2.2、系统总体框架 在整个系统的设计上,在保证系统效率的...

    java课程设计指导书.doc

    二、课程设计目的和意义 目前,很多新的技术领域都涉及到了Java语言,Java语言是面向对象编程,并涉及到 网络、多线程等重要的基础知识,因此Java 语言也是学习面向对象编程和网络编程的首选语言。按照教学培养计划...

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

    面向对象的开发方法包括面向对象的分析、面向对象的设计和面向对象的程序设计。( √) 7. 软件危机的主要表现是软件的需求量迅速增加,软件价格上升。(×) 8. 软件工具的作用是为了延长软件产品的寿命。(×) 9. ...

    design_pattern:关于设计模式的理解

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

    软件工程知识点

    结构化设计中的函数、过程,面向对象设计中的类、对象,它们都是模块。概要设计时并不需要说明模块的内部细节,但是需要进行全部的有关它们构造的定义,包括功能特征、数据特征和接口等。 在进行概要设计时,模块的...

    JAVA记事本的设计与实现.doc

    《面向对象程序设计》课程设计报告 题 目:《日记本的设计与实现》课程设计 学 院: 信息工程 姓 名: 学 号: 1134120131 专 业: 软件工程 班 级: 软工1101班 指导教师: 二0一二年十二月十四日 目 录 1....

    asp.net知识库

    与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable 与DotNet数据对象结合的自定义数据对象设计 (一) 数据对象与DataRow ASP.NET中大结果集的分页[翻译] .net 2.0 访问Oracle --与Sql Server的...

    [详细完整版]机器人卡雷尔.doc

    19 3.3 解决普适问题 21 第四章、逐步求精 25 4.1 逐步求精练习 25 4.2 自顶向下设计的基本原则 26 4.3 精练第一个子问题 26 4.4 下级级别子问题的编码 27 4.5 事前条件和事后条件 28 4.6 收尾工作 29 第五章、算法 ...

Global site tag (gtag.js) - Google Analytics