`

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

阅读更多

 

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

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

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

    在面向对象编程中,设计模式基于一些基本原则,这些原则构成了良好设计的基础。本篇将深入探讨23种设计模式以及面向对象的基本原则。 面向对象的基本原则主要包括: 1. 单一职责原则(Single Responsibility ...

    面向对象基本原则PPT

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

    面向对象设计三要素五原则六视点

    ### 面向对象设计六视点 除了上述三个要素和五个原则之外,面向对象设计还需要考虑六个视点,以确保设计的质量。 #### 复用(Reusibility) 软件设计中最重要的目标之一就是减少重复。通过细粒度的封装,可以提高...

    面向对象设计原则

    本文将深入探讨面向对象设计的六大原则,包括开放封闭原则、单一职责原则、依赖倒置原则、Liskov替换原则、迪米特法则以及接口隔离原则。 ### 1. 单一职责原则 (Single Responsibility Principle, SRP) 单一职责...

    戏说面向对象程序设计(C#版).pdf

    #### 三、面向对象设计的关键原则 **面向对象设计的原则**: - **封装**:将数据和操作数据的方法绑定在一起,隐藏内部实现细节,只暴露对外接口。 - **继承**:允许创建一个类(子类)继承另一个类(父类)的属性...

    面向对象程序设计与C++语言

    封装(Encapsulation)是面向对象编程的基本原则,它隐藏了对象内部的实现细节,只对外公开必要的接口。在C++中,访问修饰符(如public, private, protected)用于控制类成员的可见性,确保数据安全,防止不恰当的...

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

    面向对象设计的六大基本原则是软件开发领域中非常重要的概念,这些原则旨在提高代码的质量、可维护性和可扩展性。在本篇文章中,我们将详细介绍这六个原则,并通过具体案例加深理解。 ### 一、单一职责原则 (SRP, ...

    面向对象的设计原则 doc

    本文将详细探讨面向对象设计中的六大基本原则,并结合部分文本内容进行深入分析。 #### 一、开闭原则(Open-Closed Principle, OCP) **定义**:开闭原则指出,软件实体(如类、模块等)应该对扩展开放,对修改...

    61条面向对象设计的经验原则

    #### 面向对象设计基本原则 **原则一:** 面向对象设计应该关注于清晰地定义类及其责任。这意味着每个类都应该有明确的目的,并且只负责执行那些与之直接相关的任务。 **原则二:** 在面向对象设计中,尽量减少类...

    电子书《面向对象程序设计与Java语言》(第0.1版)

    6. **面向对象设计原则与设计模式**:第十六章提供了面向对象设计的原则和常用的设计模式,帮助开发者更好地组织代码和解决实际问题。 #### 特色亮点 与其他同类教材相比,《面向对象程序设计与Java语言》具有以下...

    61条Java面向对象设计的经验原则.

    ### Java面向对象设计的核心经验原则 #### 原则一:数据封装 - **原则**:所有数据都应该隐藏在所在的类的内部。 - **解释**:这是面向对象编程的一个基本原则,目的是保护数据不被外部直接访问,从而提高数据的...

    面向对象的框架设计 new

    **框架**和**组件**都是面向对象设计中常用的复用手段,但它们之间存在一定的差异: - **组件**:组件是软件开发中的最小可复用单元,通常是解决某一特定问题的小型模块。组件通常具有高度的独立性,可以单独进行...

    面向对象程序设计B课程考核

    本课程考核的目标是设计并实现一个简单的图形绘制系统,主要涉及面向对象的设计原则和技术,具体要求如下: 1. **设计几何抽象类**:创建一个名为`Geometry`的抽象基类,该类定义了绘制、读取和写入等纯虚函数。...

    61条面向对象分析设计的经验原则.txt

    本文旨在对《61条面向对象分析设计的经验原则》中的关键点进行详细的解读与分析,帮助读者更好地理解面向对象设计的核心思想及其应用实践。 #### 核心原则解析 1. **原则的重要性:** - **概述:** 文档开头提到...

    C++面向对象程序设计-电子教案

    《C++面向对象程序设计-电子教案》是一个深入学习C++编程的重要资源,它涵盖了C++语言的核心概念、面向对象编程的基本原则以及实际应用。在本文中,我们将详细探讨C++面向对象编程的关键知识点,包括类与对象、封装...

    61条Java面向对象设计的经验原则.doc

    ### Java面向对象设计的核心原则与实践 #### 一、封装原则 **原则1:所有数据都应该隐藏在所在的类的内部。** - **解释**: 封装是面向对象编程的一个核心特性,它指的是将数据和对数据的操作绑定在一起,并对外部...

Global site tag (gtag.js) - Google Analytics