理解面向对象设计原则
要开发出一个好的面向对象程序,必须先理解面向对象的设计原则,这是在进行面向对象程序设计时必须要遵守的原则。
1.面向对象设计原则概述
设计模式是软件开发人员的经验总结,为实际工作中遇到的一些常见问题提供了完善的解决方案。面向对象设计原则是设计模式的基础,也可以说设计模式都是遵守面向对象设计原则的。
重点理解单一职责原则和开闭原则。
面向对象的设计原则有7个:
Ø 单一职责原则(SRP):要求每个对象应该只有一种责任。
Ø 开闭原则(OCP):设计程序时对扩展开放,对修改关闭。
Ø 里氏替换原则(LSP):任何情况下,子类替换父类,不会影响程序的运行。
Ø 依赖倒置原则(DIP):提倡高层不依赖低层,二者都依赖抽象。
Ø 接口隔离原则(ISP):把多个功能分开声明,不强迫客户实现不需要的功能。
Ø 迪米特原则(LOP):最少知识原则,尽可能地降低访问级别。
Ø 组合/聚合复用原则(CARP):尽量不用继承达到复用类的目的,而是使用组合和聚合。
2.面向对象设计原则介绍
2.1单一职责原则
单一职责原则就是在设计程序的时候,每一个对象要设计为只有一个职责,就是让每一个对象或类只做一件事情,而且能够引起这个类或对象发生变化的原因只有一个。
遵守单一职责原则的好处就是高内聚,低耦合。高内聚是指一个类或功能模块由相关性很强的代码组成,类或模块很难再拆分,它只负责一项任务。耦合指的是类之间或模块之间的相互联系,耦合度越高,说明联系越紧密,独立性越差,分开越难;相反,耦合度越低,联系越松散,独立性越好,可重用的可能性越大。
让一个类具有多个职责,是不利于代码复用的。按照单一职责原则进行开发,可以缩小单个类的规模,降低耦合度,并提高类的复用性。
2.2开闭原则
开闭原则是指对扩展开放,对修改关闭。
符合开闭原则带来的好处:
第一个好处是,可是使程序有很好的适应性和灵活性,增加功能时不需要修改已有代码,已有的代码可以在更多的地方使用,要进行扩展也很方便。
第二个好处是,稳定性和延续性,因为避免了不必要的修改,代码变得更稳定,可以长久保持代码的可靠性。
第三个好处是,由于代码的稳定,所以就更适宜复用。进行功能扩展时也不会影响已有的代码,使得代码的维护更容易。
2.3里氏替换原则
里氏替换原则表示在任何父类出现的地方都可以用它的子类来替换,且不影响功能。它是对开闭原则的扩展。里氏替换原则所表述的就是在一个继承体系中的对象应该具有共同的外在特征。里氏替换原则主张我们使用“抽象”和“多态”,将设计中的静态结构改为动态结构。
对象的多态性就是最好的里氏替换原则的例子,使用多态就是在遵守里氏替换原则。
2.4依赖倒置原则
依赖倒置原则也叫做控制反转。
在结构化程序设计中,高层模块多数要依赖低层模块,这会导致当低层模块发生变化时,高层模块也需要修改。在面向对象的程序设计中,遵循依赖倒置原则将高层模块依赖于低层模块这种现象彻底改变了。将高层模块和低层模块设计成都依赖于接口或抽象类,就是创建类的时候最好都来自于接口或抽象类,接口负责公共方法的声明,抽象类负责公共方法的实现。
依赖倒置原则和开闭原则有些相似,都是为了在增加新功能时,不去修改原有的程序。但是开闭原则提出了一个要求:对扩展开放,对修改关闭,这是程序设计的目标。而依赖倒置原则提出了具体的解决方法:在程序设计时面向接口编程,这是实现程序设计目标使用的手段。遵守依赖倒置原则进行程序设计时,高层模块和低层模块都依赖于接口,当低层模块发生变化或修改时,不会影响高层模块,而且也提高了高层模块代码的复用性,同时也降低了代码的耦合度,提高了代码的可读性,可维护性,使得应用程序更容易扩展。
2.5接口隔离原则
接口隔离原则就是要求将功能拆分开来放在不同的接口中。如果将所有的功能放在一个接口中,那么实现这个接口的时候就要实现里面所有的方法。但是将功能拆分开,需要什么功能就实现什么接口,就使实现变得简单多了。
接口隔离原则的好处就是在增加新功能时想实现什么方法就实现什么方法,而不强迫新功能实现不需要的方法。
2.6迪米特原则
迪米特原则又叫最少知识原则,意思是一个对象应当对其他对象尽可能地了解,也尽可能地被更少的对象了解。通俗点说就是“不喝陌生人说话”。
如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。当其中一个类需要调用另一个类的某个方法时,可以通过中介实现。
迪米特原则的目的在于降低类与类之间的耦合。因为最大程度地隐藏了实现,也就避免了不必要的引用和调用,从而使耦合度降低。由于每个类尽量减少了对其他类的依赖,因此,很容易使得系统的功能模块独立,使得各个类相互间存在尽可能少的依赖关系。
但是过度地使用迪米特原则,也会造成系统不同模块之间的通信效率降低,使系统的不同模块之间不容易协调等问题。同时,因为迪米特原则要求类与类之间尽量不直接通信,如果类之间需要通信,就要通过第三方转发的方式,这就直接导致了系统中存在大量的中介类,这些类存在的唯一原因是为了传递类与类之间的相互调用关系,这就会影响了系统的运行效率。
2.7组合/聚合复用原则
组合/聚合复用原则,也叫做合成/聚合复用原则。
想达到代码复用的目的,首先会想到使用继承。但是,使用继承时,代码耦合度较高,因此该优先考虑使用组合或聚合实现代码的复用。
组合或聚合可以将已有的对象纳入新对象中,使之成为新对象的一部分,因此新的对象可以调用已有对象的功能,好处有:
对象组合是通过获得其他对象的引用而在运行时刻动态定义的。组合要求对象具有良好定义的接口,对象只能通过接口访问,所以并不破坏封装性;只要类型一致,运行时刻还可以用一个对象来替代另一个对象;更进一步,因为对象的实现是基于接口写的,所以实现上存在较少的依赖关系。
强调一下,并不是继承不重要,而是不要滥用继承。
组合复用原则也是由缺点,其最主要的缺点就是通过使用这种复用建造的系统会有较多对象需要管理。
相关推荐
面向对象设计原则是软件开发中至关重要的一环,它关乎到代码的可维护性、扩展性和复用性。本文将深入探讨这些原则,并结合实例来解释它们的重要性。 首先,我们需要理解面向对象不仅仅是编程语言中的概念,如封装、...
面向对象设计原则是软件开发中的一种核心思想,它为创建可维护、可扩展且易于理解的代码提供了指导方针。在本文中,我们将深入探讨这些原则,帮助你更好地理解和应用它们。 1. **单一职责原则(Single ...
### 面向对象设计原则详解 面向对象设计原则是一系列指导软件开发人员构建高质量、易于维护和扩展的软件系统的准则。这些原则旨在帮助开发者创建更健壮、更灵活的系统,减少代码间的耦合度,并提高代码的重用性和...
面向对象设计原则与设计模式是软件工程领域的重要组成部分,它们为构建高质量、可维护和可扩展的软件系统提供了指导方针。下面将详细阐述面向对象设计原则及其如何促进软件的复用,以及设计模式的概念。 ### 面向...
对面向对象设计原则的总结,设计模式:“开-闭”原则,里氏代换原则、依赖倒转原则、合成/聚合复用原则、迪米特法则、接口隔离原则
02 第2章 面向对象设计原则02 第2章 面向对象设计原则02 第2章 面向对象设计原则
[No Starch Press] JavaScript 面向对象设计原则 (英文版) [No Starch Press] The Principles of Object-Oriented JavaScript (E-Book) ☆ 图书概要:☆ If you've used a more traditional object-oriented ...
面向对象设计原则总结 面向对象设计原则是软件设计中最重要的原则之一,它们是软件设计的基础和核心。面向对象设计原则的应用可以提高软件的开发效率、质量和可维护性。下面是七大面向对象设计原则的总结: 一、开...
面向对象设计原则是软件开发中的核心概念,尤其在Java、C++等面向对象编程语言中至关重要。这些原则为创建可维护、可扩展和可重用的代码提供了指导框架。这篇文章将深入探讨面向对象设计原则,并结合设计模式进行...