`

面向对象编程的几个原则

    博客分类:
  • java
阅读更多
1. 开闭原则(the Open Closed Principle OCP)

    一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。因此在进行面向对象设计时要尽量考虑接口封装机制、抽象机制和多态技术。该原则同样适合于非面向对象设计的方法,是软件工程设计方法的重要原则之一。我们以收音机的例子为例,讲述面向对象的开闭原则。我们收听节目时需要打开收音机电源,对准电台频率和进行音量调节。但是对于不同的收音机,实现这三个步骤的细节往往有所不同。比如自动收缩电台的收音机和按钮式收缩在操作细节上并不相同。因此,我们不太可能针对每种不同类型的收音机通过一个收音机类来实现(通过重载)这些不同的操作方式。但是我们可以定义一个收音机接口,提供开机、关机、增加频率、降低频率、增加音量、降低音量六个抽象方法。不同的收音机继承并实现这六个抽象方法。这样新增收音机类型不会影响其它原有的收音机类型,收音机类型扩展极为方便。此外,已存在的收音机类型在修改其操作方法时也不会影响到其它类型的收音机。

    2. 替换原则 (the Liskov Substitution Principle LSP)

    子类应当可以替换父类并出现在父类能够出现的任何地方。这个原则是Liskov于1987年提出的设计原则。它同样可以从Bertrand Meyer 的DBC (Design by Contract) 的概念推出。

    我们以学生为例,夜校生为学生的子类,因此在任何学生可以出现的地方,夜校生均可出现。这个例子有些牵强,一个能够反映这个原则的例子时圆和椭圆,圆是椭圆的一个特殊子类。因此任何出现椭圆的地方,圆均可以出现。但反过来就可能行不通。

    运用替换原则时,我们尽量把类B设计为抽象类或者接口,让C类继承类B(接口B)并实现操作A和操作B,运行时,类C实例替换B,这样我们即可进行新类的扩展(继承类B或接口B),同时无须对类A进行修改。

    3. 依赖原则 (the Dependency Inversion Principle DIP)

    在进行业务设计时,与特定业务有关的依赖关系应该尽量依赖接口和抽象类,而不是依赖于具体类。具体类只负责相关业务的实现,修改具体类不影响与特定业务有关的依赖关系。

    在结构化设计中,我们可以看到底层的模块是对高层抽象模块的实现(高层抽象模块通过调用底层模块),这说明,抽象的模块要依赖具体实现相关的模块,底层模块的具体实现发生变动时将会严重影响高层抽象的模块,显然这是结构化方法的一个"硬伤".

    面向对象方法的依赖关系刚好相反,具体实现类依赖于抽象类和接口。

    为此,我们在进行业务设计时,应尽量在接口或抽象类中定义业务方法的原型,并通过具体的实现类(子类)来实现该业务方法,业务方法内容的修改将不会影响到运行时业务方法的调用。

    4. 接口分离原则(the Interface Segregation Principle ISP)

    采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。

    ISP原则是另外一个支持诸如COM等组件化的使能技术。缺少ISP,组件、类的可用性和移植性将大打折扣。

    这个原则的本质相当简单。如果你拥有一个针对多个客户的类,为每一个客户创建特定业务接口,然后使该客户类继承多个特定业务接口将比直接加载客户所需所有方法有效。

    以上四个原则是面向对象中常常用到的原则。此外,除上述四原则外,还有一些常用的经验诸如类结构层次以三到四层为宜、类的职责明确化(一个类对应一个具体职责)等可供我们在进行面向对象设计参考。但就上面的几个原则看来,我们看到这些类在几何分布上呈现树型拓扑的关系,这是一种良好、开放式的线性关系、具有较低的设计复杂度。一般说来,在软件设计中我们应当尽量避免出现带有闭包、循环的设计关系,它们反映的是较大的耦合度和设计复杂化。
分享到:
评论

相关推荐

    面向对象程序设计北工大PPT PDF版

    在面向对象编程中,有几个核心概念需要理解: 1. **对象**:对象是现实世界中的实体在程序中的抽象,包含数据(属性或状态)和行为(方法)。例如,汽车这个对象可能有颜色、速度等属性,以及启动、加速等方法。 2...

    面向对象程序设计与c++语言 朱战立

    本书《面向对象程序设计与C++语言》由朱战立编写,旨在帮助读者深入理解面向对象编程思想以及如何在C++中实现这些思想。书中可能涵盖了以下几个方面的内容: 1. **面向对象基础**:讲解对象、类、封装、继承、多态...

    面向对象程序设计第一次离线作业作业.doc

    面向对象程序设计第一次离线作业 面向对象程序设计(Object-Oriented ...这个离线作业涵盖了面向对象程序设计的基本概念和原则,以及一些基本的编程技术。理解这些概念和原则对于后续的学习和实践非常重要。

    桂林电子科技大学《面向对象程序设计》实验教学大纲

    学生需要了解面向对象程序设计的基本概念和原则,如类和对象、继承、多态性等。 2. C++ 语言的基础知识 C++ 语言是面向对象程序设计的主要实现语言,学生需要了解 C++ 语言的基础知识,如变量、数据类型、运算符、...

    面向对象程序设计 经典

    本文将根据给定的信息,深入探讨面向对象程序设计中的几个关键知识点。 ### 类的概述 类是面向对象编程中的基本构建块,它是一种用户自定义的类型,用于描述具有相似属性和行为的一组对象。类定义了一种数据类型,...

    20140207PHP01_PHP面向对象程序设计.pdf

    面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它通过将程序分解成一系列相互关联的对象来组织代码。这种设计方式使得代码更加模块化、可复用,同时也提高了程序的可维护性。在PHP中,面向对象...

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

    Java 面向对象程序设计面向对象的几个基本原则 以下是从给定的文件中生成的相关知识点: §7.1 UML 类图简介 * UML(Unified Modeling Language)类图是一种静态结构图,用于描述系统的静态结构。 * 类的 UML 图...

    C++面向对象程序设计教材(谭浩强编著)习题程序+教材例题程序

    总的来说,《C++面向对象程序设计》是一本值得学习者深入研究的教材,结合书中习题和例题,不仅可以掌握C++的基本语法,还能领略到面向对象编程的魅力。通过不断练习和思考,学习者可以成长为熟练的C++开发者,具备...

    c++面向对象程序设计(第6版)Walter Savitch 书中的 c++题库

    《C++面向对象程序设计(第6版)》是由Walter Savitch著,佟俐鹃改编的教材,这本书深入浅出地介绍了C++语言的面向对象编程思想。书中的"test bank"是配套的自测题库,包含了丰富的练习题和答案,旨在帮助读者巩固...

    面向对象的程序设计心得.pdf

    这些概念是理解和运用面向对象设计方法论的基石,对于任何想要深入学习和应用面向对象编程语言(如Java)的开发者而言,都应当掌握。 在实际编程工作中,良好的面向对象设计能够帮助开发者创建结构清晰、易于维护和...

    Java面向对象程序设计课程设计

    在本Java面向对象程序设计课程设计中,我们将深入探讨如何利用Java语言的面向对象特性来构建实际的应用程序,特别是与数据库交互的系统。这个例子是一个简单的数据库查询应用,旨在帮助学习者理解如何在实践中运用...

    面向对象程序设计与vc实践

    在"面向对象程序设计与VC实践"的学习中,首先你需要理解以下几个核心概念: 1. **类(Class)**:类是面向对象编程的基础,它是描述对象的蓝图。类定义了对象的数据成员(属性)和成员函数(方法),描述了对象的...

    《C_面向对象程序设计》课程设计

    《C#面向对象程序设计》课程设计是一门旨在深化学生对面向对象编程理解,并通过实践提升C#编程技能的课程。课程设计的目标是使学生在理解面向对象的基本概念和原则后,能用C#语言有效地编写程序。在这个过程中,学生...

    基于Python语言的面向对象程序设计课程教学.pdf

    例如,通过实时动态的代码操作演示,可以让学生实时观察到编程操作的效果,从而更好地理解面向对象程序设计的概念和原则。 此外,文档中还提到了在教学实践过程中遇到的一些问题,这些问题可能是由于初学者对面向...

    面向对象程序设计全面复习资料

    面向对象程序设计是一种重要的...总之,这份“面向对象程序设计全面复习资料”提供了全面学习和实践C++面向对象编程的资源。通过深入学习、解题和分析实例,你可以提升你的编程技巧,为未来的项目开发打下坚实的基础。

    面向对象的程序设计特点

    在面向对象编程中,抽象主要体现在类和接口的定义上。通过抽象,可以将复杂的系统分解为多个简单的部分,并且只关注这些部分的关键特征。这种方式有助于简化问题的处理,并使得软件更加模块化、易于理解和维护。 ##...

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

    - **继承与多态性**:第七章探讨了继承机制以及多态性的概念,这些都是面向对象编程的重要特征。 - **接口与程序包**:第八章讲解了接口的作用以及如何使用程序包来组织代码。 3. **程序设计语言的高级内容**: ...

    面向对象设计原则.ppt

    面向对象设计原则主要包括以下几点: 1. **单一职责原则(SRP)**:一个类应该只有一个引起它变化的原因。这意味着每个类应专注于一项任务,避免将多个职责混杂在一起。在员工工资计算的例子中,`Employee`类只负责...

    电子书籍-Visual C++面向对象与可视化程序设计习题解析与编程实例

    《电子书籍-Visual C++面向对象与可视化程序设计习题解析与编程实例》是一本深入探讨C++编程语言,特别是其在面向对象编程和可视化应用中的实践指南。这本书旨在帮助读者掌握C++的核心概念,理解面向对象编程的思想...

    面向对象与可视化程序设计

    在本篇内容中,我们将深入探讨面向对象编程的概念以及如何使用Visual Studio进行可视化程序设计。 面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它的核心思想是将数据和操作数据的方法封装在...

Global site tag (gtag.js) - Google Analytics