开闭原则
(the Open Closed Principle OCP)
一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。因此在进行面向对象设计时要尽量考虑接口封装机制、抽象机制和多态技术。该原则同样适合于非面向对象设计的方法,是软件工程设计方法的重要原则之一。我们以收音机的例子为例,讲述面向对象的开闭原则。我们收听节目时需要打开收音机电源,对准电台频率和进行音量调节。但是对于不同的收音机,实现这三个步骤的细节往往有所不同。比如自动收缩电台的收音机和按钮式收缩在操作细节上并不相同。因此,我们不太可能针对每种不同类型的收音机通过一个收音机类来实现(通过重载)这些不同的操作方式。但是我们可以定义一个收音机接口,提供开机、关机、增加频率、降低频率、增加音量、降低音量六个抽象方法。不同的收音机继承并实现这六个抽象方法。这样新增收音机类型不会影响其它原有的收音机类型,收音机类型扩展极为方便。此外,已存在的收音机类型在修改其操作方法时也不会影响到其它类型的收音机。
替换原则
(the Liskov Substitution Principle LSP)
子类应当可以替换父类并出现在父类能够出现的任何地方。这个原则是Liskov于1987年提出的设计原则。它同样可以从Bertrand Meyer 的DBC (Design by Contract) 的概念推出。
我们以学生为例,夜校生为学生的子类,因此在任何学生可以出现的地方,夜校生均可出现。这个例子有些牵强,一个能够反映这个原则的例子时圆和椭圆,圆是椭圆的一个特殊子类。因此任何出现椭圆的地方,圆均可以出现。但反过来就可能行不通。
运用替换原则时,我们尽量把类B设计为抽象类或者接口,让C类继承类B(接口B)并实现操作A和操作B,运行时,类C实例替换B,这样我们即可进行新类的扩展(继承类B或接口B),同时无须对类A进行修改。
依赖原则
(the Dependency Inversion Principle DIP)
在进行业务设计时,与特定业务有关的依赖关系应该尽量依赖接口和抽象类,而不是依赖于具体类。具体类只负责相关业务的实现,修改具体类不影响与特定业务有关的依赖关系。
在结构化设计中,我们可以看到底层的模块是对高层抽象模块的实现(高层抽象模块通过调用底层模块),这说明,抽象的模块要依赖具体实现相关的模块,底层模块的具体实现发生变动时将会严重影响高层抽象的模块,显然这是结构化方法的一个"硬伤".
面向对象方法的依赖关系刚好相反,具体实现类依赖于抽象类和接口。
为此,我们在进行业务设计时,应尽量在接口或抽象类中定义业务方法的原型,并通过具体的实现类(子类)来实现该业务方法,业务方法内容的修改将不会影响到运行时业务方法的调用。
== 接口分离原则 == (the Interface Segregation Principle ISP)
采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。
ISP原则是另外一个支持诸如COM等组件化的使能技术。缺少ISP,组件、类的可用性和移植性将大打折扣。
这个原则的本质相当简单。如果你拥有一个针对多个客户的类,为每一个客户创建特定业务接口,然后使该客户类继承多个特定业务接口将比直接加载客户所需所有方法有效。
以上四个原则是面向对象中常常用到的原则。此外,除上述四原则外,还有一些常用的经验诸如类结构层次以三到四层为宜、类的职责明确化(一个类对应一个具体职责)等可供我们在进行面向对象设计参考。但就上面的几个原则看来,我们看到这些类在几何分布上呈现树型拓扑的关系,这是一种良好、开放式的线性关系、具有较低的设计复杂度。一般说来,在软件设计中我们应当尽量避免出现带有闭包、循环的设计关系,它们反映的是较大的耦合度和设计复杂化。
分享到:
相关推荐
Java面向对象设计原则 Java面向对象设计原则是 Java 编程中的基础概念,它们是指在 Java 编程中遵循的一些基本原则,以确保编写的代码是可维护、可扩展、灵活的。这些原则包括开闭原则、里氏替换原则、单一职责原则...
"Java面向对象设计原则" Java面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心。下面我们将详细介绍七大设计原则。 原则1: DRY(Don't repeat yourself) DRY...
### Java面向对象设计原则 #### 一、面向对象设计原则概览 面向对象设计原则是在软件开发过程中确保代码质量、可维护性和可扩展性的指导方针。遵循这些原则可以帮助开发者写出更加健壮、灵活且易于理解的代码。...
### Java面向对象设计的六大原则 在Java编程中,面向对象设计的原则对于构建高质量、可维护、可扩展的软件系统至关重要。以下将详细介绍面向对象设计的六大原则:单一职责原则(Single Responsibility Principle, ...
总的来说,Java面向对象设计原则中的“优先使用对象组合而非类继承”鼓励我们避免过度使用继承,而是通过组合来构建灵活、解耦的系统。在实际开发中,我们需要根据具体场景和需求,明智地选择和应用这两种机制,以...
面向对象设计是软件开发中的核心思想,它强调以对象为中心,通过封装、继承和多态等特性来构建可维护和可扩展的系统。在Java这样的面向对象语言中,...在Java开发过程中,理解和应用这些面向对象设计原则是非常重要的。
Java面向对象程序设计是计算机科学中的一个重要领域,它基于面向对象编程(OOP)原则,为开发者提供了构建复杂软件系统的方法。本资源包含了该课程所有章节的课后习题答案,帮助学习者深入理解Java语言的面向对象...
面向对象设计是软件开发中的核心思想,...以上是根据61条Java面向对象设计原则的详细解读,这些原则帮助开发者编写更高效、易于理解和维护的代码。在实际编程中,灵活运用这些原则能够提高代码质量,减少后期维护成本。
在Java编程语言中,面向对象程序设计(Object-Oriented Programming, OOP)是一种核心的编程范式,它基于“对象”概念,将数据和处理数据的方法封装在一起。本章节的源代码着重于讲解和实践Java中的面向对象特性,...
根据提供的文件信息,我们可以看出文档《Java面向对象设计.pdf》主要围绕Java语言中的面向对象设计原则进行介绍。从给出的部分内容中,我们可以提炼出以下知识点: 1. **Java基础语法**:文中包含了Java的基本...
以上只是Java面向对象设计的一些基础概念,实际的项目开发中,还需要考虑更多的设计原则,如单一职责原则、开闭原则、依赖倒置原则等,以及设计模式的应用,如工厂模式、单例模式、观察者模式等。在实践中不断学习和...
在IT行业中,面向对象设计(Object-Oriented Design,简称OOD)是一种常用的设计方法论,尤其在Java这样的面向对象编程语言中尤为重要。本篇将详细探讨如何使用Java进行门禁系统的面向对象设计。 门禁系统是用于...
面向对象设计原则,开闭原则,迪米特法则,里氏代换,接口隔离
学习Java面向对象编程不仅仅是掌握语法,更重要的是理解其设计理念和原则,如SOLID原则(单一职责、开闭、里氏替换、接口隔离、依赖倒置),以及设计模式的应用,如工厂模式、单例模式、观察者模式等。这些都将在...
Java面向对象应用程序开发是软件开发领域中的核心主题,尤其对于初学者和专业开发者而言,理解并掌握这一技术至关重要。Java语言以其强大的面向对象特性、跨平台兼容性以及丰富的类库,成为了开发各种类型应用程序的...
该书的特点是采用“从对象开始”的方式引导读者,从基础知识开始,逐步深入到高级主题,包括面向对象设计(OOD)、UML类图、编程揭示、调试提示与设计提示等。同时,本书还提供了205道自测题及答案、381道难度不一的...
《面向对象程序设计JAVA语言程序设计》涵盖了 Java 语言的基础知识点、设计原则、编程风格、多线程和并发、网络和 Web 编程、异常处理、安全和可靠性、Applet 和应用程序、设计模式、测试和调试等多方面的内容。
Java面向对象程序设计是计算机科学中的一个重要概念,尤其在软件开发领域中占据核心地位。本电子教案主要针对初学者,旨在提供一个简单易懂、实用的学习路径,帮助他们掌握Java编程语言的基础和面向对象的核心思想。...
标题:“Java面向对象设计” 描述:“找了很长时间的东东,拿到这里分享一下,大家可以先看看哦”。这句话虽然简短,但透露出分享者对“Java面向对象设计”这一主题的重视与热忱,以及希望通过分享促进大家共同学习...
Java_面向对象设计原则总结 一 类的设计原则 1 依赖倒置原则-Dependency Inversion Principle (DIP) 2 里氏替换原则-Liskov Substitution Principle (LSP) 3 接口分隔原则-Interface Segregation Principle...