谈到面向对象程序设计,会联想到前人总结的,并认为必须遵守的抽象原则。
1.OCP原则 即 开闭原则
主要的意思就是一个软件实体应当对扩展开放,对修改封闭。对一个已有的软件,如果想要扩展,应当不需要修改已有的代码基础上进行。
2.DIP原则 (依赖倒转原则):要针对接口编程,不要针对实现编程。对于不同层次的编程,高层次暴露给低层次的应当是接口,而不是具体的类。
3.LOD原则(迪米特法则):只与你直接的朋友通信,而避免和陌生人通信。这样做的目的就是减少不同模块之间的通信,降低耦合度。
4.SRP原则(单一职责原则):就一个类而言,应当只专注做一件事和仅有一个引起它变化的原因。
所谓职责,我们可以理解他为功能,就是设计的这个类功能应该只有一个,而不是两个或更多。也可以理解为引用变化的原因,当你发现有两个变化会要求我们修改这个类,那么你就要考虑拆分这个类了。因为职责是变化的一个轴线,当需求变化时,该变化会反映类的职责的变化。
5.ISP原则(接口隔离原则):不能强迫用户去依赖他们不使用的接口。换句话说,使用多个专门的接口比使用单一的总接口要好。
它包含了2层意思:
-接口的设计原则:接口的设计应当遵循最小接口原则,不要把用户不使用的方法塞进同一个接口里。
如果一个接口的方法没有被使用到,则说明该接口过胖,应当将其分割成几个功能专一的接口。
-接口的依赖(继承)原则:如果一个接口a依赖(继承)另一个接口b,则接口a相当于继承了接口b的方法,那么继承了接口b的接口a也应当遵循上述原则:不应该包含用户不适用的方法。
6.LSP原则(里氏替换原则):所有引用基类的地方必须透明地使用其子类的对象。
可以理解为所有基类代码的地方用派生类代码替换以后,能够正确执行动作处理。换句话说,如果派生类替换了基类后,不能正确执行动作,那么他们的继承关系就应该废除。从另一个侧面上保证了符合LSP原则的类的扩展不会给系统引入新的错误。
7.CARP原则(合成/聚合复用原则):
要尽量使用合成/聚合,而不是继承关系达到复用的目的。
合成和聚合都是联系的特殊种类。
聚合表示整体和部分的关系,表示"拥有".如奔驰360汽车,对奔驰S360引擎,奔驰S360轮胎的关系是聚合关系。离开了奔驰S360汽车,引擎,轮胎就失去了意义。在设计中,聚合不应该频繁出现,这样会增大设计的耦合度。
合成则是一种更强的"拥有",部分和整体的生命周期一样。合成的新的对象完全支配其组成部分,包括她们的创建和毁灭等。一个合成关系的成分对象是不能与另一个合成关系共享的。
换句话说,合成是值得聚合,而一般说的聚合是引用的聚合。
在面向对象程序设计中,有两种基本的方法可以实现复用:
第一种是通过合成/聚合,即合成复用原则,含义是指,尽量使用合成/聚合,而不是继承关系。
第二种就是通过继承。
要正确的选择合成/聚合和继承的方法,只有一下的条件全部满足时,才应当使用继承关系:
1),子类是父类的一个特殊种类,而不是父类的一个角色,也就是区分"Has-A"和"Is-A"关系才符合继承关系,"Has-A"关系应当用聚合来描述。
2).永远不会出现需要将子类换成另外一个类的子类的情况,如果不能指定将来是否会变成另外一个子类的话,就不要使用继承。
3),子类具有扩展父类的责任,而不是具有置换掉(override)或注销掉(Nullify)的责任,如果一个子类需要大量的置换掉父类的行为,那么这个类就不应该是该父类的子类。
4),只有在分类学角度上有意义时,才可以使用继承。
如果语义上存在着明确的is-a关系,并且这种关系是稳定的,不变的,则考虑使用继承:如果没有is-a关系,或者这种关系是可变时,使用合成。
区分"Has-A"与"Is-A"
-Is-A是严格的分类学意义上的定义,意思是一个类是另一种类的一种。
-Has-A表示某一个角色具有某一项责任,也就是说一个类是另一个类的角色,而不是另一个类的特殊种类。
分享到:
相关推荐
面向对象程序设计原则与模式 面向对象程序设计原则是软件设计中的一种重要方法,它强调通过封装、继承和多态来实现软件的可维护性、可扩展性和可重用性。设计模式是指在软件设计中常见的、可以重复使用的解决方案,...
本资料包“C++面向对象程序设计 经典例题 附练习题”显然是为了帮助学生深入理解C++的面向对象特性,并通过实例和练习来巩固学习成果。 在C++中,面向对象的主要概念包括: 1. **类**:类是创建对象的模板或蓝图,...
面向对象程序设计是一种基于对象思想的程序设计方法,它强调程序的模块化、抽象化和继承性。学生需要了解面向对象程序设计的基本概念和原则,如类和对象、继承、多态性等。 2. C++ 语言的基础知识 C++ 语言是面向...
在这个离线作业中,我们将学习到面向对象程序设计的基本概念和原则。 一、对象的概念 对象是面向对象程序设计的基本单元,它是由数据及其操作所构成的封装体。对象包含三个基本要素:对象标识、对象状态和对象行为...
面向对象程序设计是现代软件开发中的核心概念,它基于实体的抽象、封装、继承和多态等原则。C++是一种支持面向对象编程的强大的编程语言,它的类是实现面向对象特性的重要工具。在这个主题中,我们将深入理解C++中的...
面向对象程序设计(Object-Oriented Programming,OOP)是一种广泛应用的编程范式,它以对象为核心,将数据和操作数据的方法封装在一起,通过类与对象的概念,实现了代码的模块化和可重用性。本资源是北京工业大学的...
面向对象程序设计是一种强大的编程范式,它通过封装、继承、多态和抽象等机制提高了软件的结构化程度和可维护性。理解并熟练掌握这些概念对于任何希望成为一名优秀的软件开发者的人来说都是至关重要的。通过对这份...
面向对象程序设计(C++语言描述)教程是深入学习C++编程的重要资源,它涵盖了从基础概念到高级特性的全面内容。本教程旨在帮助开发者理解并掌握C++中的面向对象编程理念,通过实例和讲解来阐述如何利用C++实现面向...
面向对象程序设计(Object-Oriented Programming,简称OOP)是一种重要的编程范式,自Windows图形用户界面(GUI)普及以来,它已成为主流的程序设计方法。本文将深入探讨面向对象程序设计的核心概念、特点以及它与...
Java面向对象程序设计是计算机科学中的一个重要领域,它基于面向对象编程(OOP)原则,为开发者提供了构建复杂软件系统的方法。本资源包含了该课程所有章节的课后习题答案,帮助学习者深入理解Java语言的面向对象...
### 面向对象程序设计C++课后答案概述 #### 1. C++的发展历程与特性 - **发展历程**:C++是一种由Bjarne Stroustrup在1979年开始设计并实现的编程语言。它基于C语言进行扩展,旨在提供更强大的抽象机制和类型安全性...
面向对象程序设计是一种编程范式,它使用“对象”来设计软件。对象是类的实例,其中类是一种定义对象行为和属性的模板。面向对象程序设计强调数据和行为的封装、继承和多态等特性。下面详细解释给定文件中提到的一些...
面向对象程序设计是一种编程范式,它基于“对象”的概念,将数据结构和操作这些数据的方法结合在一起。C++语言是实现面向对象编程的主要工具之一,由Bjarne Stroustrup于1983年在C语言的基础上扩展而来,旨在提供更...
通过本文的媒体播放器设计案例,我们不仅看到了如何从面向过程的思维逐步过渡到面向对象的思维方式,也了解到了面向对象程序设计的一些基本原则和最佳实践。最终的目标是为了创建出更加健壮、易于维护和扩展的软件...
面向对象程序设计(Object-Oriented Programming,简称OOP)是一种广泛应用的编程范式,它...以上内容深入浅出地介绍了面向对象程序设计的基本概念、优势、原则以及相关资源,希望对你理解和应用面向对象编程有所帮助。
面向对象程序设计总复习资料是计算机专业学生的必修课之一,该资料对面向对象程序设计的基本概念、特征、分类、设计原则和实现方法进行了详细的讲解和分析。以下是该资料的详细知识点总结: 一、面向对象程序设计的...
面向对象程序设计是计算机科学中的核心课程之一,尤其在软件工程领域中占据着重要的地位。本次实验课程由西北工业大学软件学院开设,旨在帮助学生深入理解并掌握面向对象编程的概念、原则和技巧,主要语言为JAVA。 ...