文章关键字:|面向对象|编程|原则|继承|扩展|
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,组件、类的可用性和移植性将大打折扣。
这个原则的本质相当简单。如果你拥有一个针对多个客户的类,为每一个客户创建特定业务接口,然后使该客户类继承多个特定业务接口将比直接加载客户所需所有方法有效。
以上四个原则是面向对象中常常用到的原则。此外,除上述四原则外,还有一些常用的经验诸如类结构层次以三到四层为宜、类的职责明确化(一个类对应一个具体职责)等可供我们在进行面向对象设计参考。但就上面的几个原则看来,我们看到这些类在几何分布上呈现树型拓扑的关系,这是一种良好、开放式的线性关系、具有较低的设计复杂度。一般说来,在软件设计中我们应当尽量避免出现带有闭包、循环的设计关系,它们反映的是较大的耦合度和设计复杂化。
原文地址:http://www.evget.com/zh-CN/Info/ReadInfo.aspx?id=9302
分享到:
相关推荐
面向对象程序设计原则与模式 面向对象程序设计原则是软件设计中的一种重要方法,它强调通过封装、继承和多态来实现软件的可维护性、可扩展性和可重用性。设计模式是指在软件设计中常见的、可以重复使用的解决方案,...
C++是一种强大的、通用的编程语言,以其支持面向对象编程(OOP)而闻名。面向对象编程是一种设计和实现软件的方式,它强调将现实世界的问题和解决方案映射到计算机程序中的对象。本资料包“C++面向对象程序设计 经典...
类(Class)是面向对象编程的基本单元,它是一个蓝图,描述了创建对象时共有的属性和方法。对象(Object)是类的实例,具有类定义的属性和方法的副本。类的属性和方法称为成员(Members)。 2. 封装 封装...
《Python 3面向对象编程》通过Python 的数据结构、语法、设计模式,从简单到复杂,从初级到高级,一步步通过例子来展示了Python 中面向对象的概念和原则。, 《Python 3面向对象编程》不是Python 的入门书籍,适合...
本书《面向对象程序设计与C++语言》由朱战立编写,旨在帮助读者深入理解面向对象编程思想以及如何在C++中实现这些思想。书中可能涵盖了以下几个方面的内容: 1. **面向对象基础**:讲解对象、类、封装、继承、多态...
在面向对象编程中,有几个核心概念需要理解: 1. **对象**:对象是现实世界中的实体在程序中的抽象,包含数据(属性或状态)和行为(方法)。例如,汽车这个对象可能有颜色、速度等属性,以及启动、加速等方法。 2...
面向对象程序设计是现代软件开发中的核心概念,它基于实体的抽象、封装、继承和多态等原则。C++是一种支持面向对象编程的强大的编程语言,它的类是实现面向对象特性的重要工具。在这个主题中,我们将深入理解C++中的...
面向对象编程是C++语言的核心特性,它引入了类、对象、封装、继承、多态等概念,使得程序设计更加灵活、模块化和易于维护。本资料“C++面向对象程序设计答案”针对清华大学出版社出版的相关教材,提供了课后习题的...
首先,类是面向对象编程的基础。类定义了一组属性和行为,这些属性描述了类的特征,而行为则表示类可以执行的操作。在Java中,我们使用关键字"class"来声明一个类,例如: ```java public class MyClass { // 属性...
这个实验有助于理解和实践面向对象编程的核心概念,如封装、继承和多态,以及C++中的运算符重载。通过这样的练习,程序员可以更好地掌握面向对象设计的原则,并在实际项目中更有效地编写和维护代码。
面向对象编程的七大原则是指在面向对象设计中所遵循的七个基本原则,它们是:开闭原则、依赖倒转原则、单一职责原则、接口隔离原则、迪米特法则、里氏替换原则和组合优于继承原则。 1. 开闭原则(Open-Closed ...
总的来说,“面向对象程序设计与C++语言”是一门深入学习编程思维和C++特性的课程,适合初学者逐步掌握面向对象编程的精髓。通过仔细研究和实践,可以提高编程技能,为未来更复杂的软件开发打下坚实基础。在学习过程...
面向对象程序设计是一种重要的软件开发方法,它基于“对象”的概念,通过...通过这个面向对象程序设计的小作业,学生不仅可以巩固C++语言的基础,还能深入理解面向对象编程的核心概念,提高问题解决和系统设计的能力。
本教程旨在帮助开发者理解并掌握C++中的面向对象编程理念,通过实例和讲解来阐述如何利用C++实现面向对象的设计原则。 1. **面向对象程序设计概论**: - 面向对象编程(Object-Oriented Programming,OOP)的核心...
【Windows程序设计面向对象编程】 面向对象编程(Object-Oriented Programming,OOP)是现代软件开发中的核心概念,尤其在Windows程序设计中扮演着重要角色。Windows API(Application Programming Interface)虽然...
《面向对象程序设计JAVA语言程序设计》涵盖了 Java 语言的基础知识点、设计原则、编程风格、多线程和并发、网络和 Web 编程、异常处理、安全和可靠性、Applet 和应用程序、设计模式、测试和调试等多方面的内容。
Java面向对象程序设计是计算机科学中的一个重要领域,它基于面向对象编程(OOP)原则,为开发者提供了构建复杂软件系统的方法。本资源包含了该课程所有章节的课后习题答案,帮助学习者深入理解Java语言的面向对象...
此资源旨在帮助学生深入理解和应用面向对象编程原则。 1. **面向对象编程基础**:面向对象编程(OOP)的核心概念包括封装、继承和多态。封装是将数据和操作数据的方法绑定在一起,形成一个独立的对象。继承则允许一...
第二单元:技术架构视图─面向对象程序设计原则与模式 59 用GRASP模式指导设计 62 领域模型 96 面向对象设计的基本原则 132 第三单元:用UML辅助系统分析与设计 177 UML简介及常见疑难问题辨析 178 借鉴RUP的UML建模...