一、单一职责原则(SRP) ,就一个类而言,应该仅有一个引起它变化的原因。[ASD]
如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。[ASD]
软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离[ASD]。其实要判断是否应该分离也不难,那就是如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责。[ASD]
(如手机就一个功能职责过多的例子……)
二、开放--封闭原则,是说软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。[ASD]
两大特征:一个是“对于扩展是开放的(open for extension)”,另一个是“对于更改是封闭的(closed for modification)”。[ASD]
在最初编写代码时,假设变化不会发生。当变化发生时,我们就创建抽象来隔离以后发生的同类变化[ASD]。面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码[ASD]。这就是‘开放--封闭原则’的精神之所在。
开放--封闭原则是面向对象设计的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可扩展、可复用、灵活性好。开发人员应该仅对程序中呈现出频繁变化的那些部分做出抽象,然而,对于应用程序中的每个部分都进行刻意抽象同样不是一个好主意。拒绝不成熟的抽象和抽象本身一样重要。[ASD]
三、依赖倒装原则
A、高层模块不应该依赖低层模块。两个都应该信赖抽象。
B、抽象不应该依赖细节。细节应该依赖抽象[ASD]。
说白了,就是要针对接口编程,不要针对实现编程。
四、里氏代换原则
一个软件实体如果使用的是一个父亲的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。也就是说,在软件里面,把父类都替换成它的子类,程序的行为没有变化[ASD]。
五、迪米特法则(LoD)
也叫最少知识原则,如果两个类不必彼此直接通信,那么这两个类都不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用[J&DP]。
迪米特法则首先强调的前提是在类的结构设计不,每一个类都应当尽量降低成员的访问权限.[J&DP]
迪米特法则其根本思想,是强调了类之间的松耦合,类之间耦合越弱,越有利于利用复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。
六、合成/聚合复用原则(CARP),(本原则可参考桥接模式)
尽量使用合成/聚合,尽量不要使用类继承[J&DP]。
聚合表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种强的‘拥有’关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。[DPE]
优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。[DP]
分享到:
相关推荐
本资料包“C++面向对象程序设计 经典例题 附练习题”显然是为了帮助学生深入理解C++的面向对象特性,并通过实例和练习来巩固学习成果。 在C++中,面向对象的主要概念包括: 1. **类**:类是创建对象的模板或蓝图,...
《面向对象程序设计JAVA语言程序设计》涵盖了 Java 语言的基础知识点、设计原则、编程风格、多线程和并发、网络和 Web 编程、异常处理、安全和可靠性、Applet 和应用程序、设计模式、测试和调试等多方面的内容。
面向对象程序设计是现代软件开发中的核心概念,它基于实体的抽象、封装、继承和多态等原则。C++是一种支持面向对象编程的强大的编程语言,它的类是实现面向对象特性的重要工具。在这个主题中,我们将深入理解C++中的...
第二单元:技术架构视图─面向对象程序设计原则与模式 59 用GRASP模式指导设计 62 领域模型 96 面向对象设计的基本原则 132 第三单元:用UML辅助系统分析与设计 177 UML简介及常见疑难问题辨析 178 借鉴RUP的UML建模...
在这个离线作业中,我们将学习到面向对象程序设计的基本概念和原则。 一、对象的概念 对象是面向对象程序设计的基本单元,它是由数据及其操作所构成的封装体。对象包含三个基本要素:对象标识、对象状态和对象行为...
面向对象程序设计是一种重要的编程范式,它基于“对象”的概念,强调数据和操作数据的方法紧密结合,从而构建复杂的软件系统。C++语言是面向对象编程的代表性语言之一,由Bjarne Stroustrup在C语言的基础上发展而来...
Java面向对象程序设计是计算机科学中的一个重要领域,它基于面向对象编程(OOP)原则,为开发者提供了构建复杂软件系统的方法。本资源包含了该课程所有章节的课后习题答案,帮助学习者深入理解Java语言的面向对象...
本资料“C++面向对象程序设计答案”针对清华大学出版社出版的相关教材,提供了课后习题的解答,旨在帮助学习者深入理解并熟练掌握C++的面向对象编程技术。 1. **类与对象** - 类是C++中的蓝图,定义了一组数据成员...
面向对象程序设计(C++语言描述)教程是深入学习C++编程的重要资源,它涵盖了从基础概念到高级特性的全面内容。本教程旨在帮助开发者理解并掌握C++中的面向对象编程理念,通过实例和讲解来阐述如何利用C++实现面向...
面向对象程序设计(Object-Oriented Programming,OOP)是一种广泛应用的编程范式,它以对象为核心,将数据和操作数据的方法封装在一起,通过类与对象的概念,实现了代码的模块化和可重用性。本资源是北京工业大学的...
"浅谈结构化程序设计与面向对象程序设计" 本文档是对结构化程序设计和面向对象程序设计的比较和分析。结构化程序设计是将程序分解成单一处理功能的模块,通过参数传递调用相应模块以实现程序的功能。结构化程序设计...
面向对象程序设计(Object-Oriented Programming,简称OOP)是一种重要的编程范式,自Windows图形用户界面(GUI)普及以来,它已成为主流的程序设计方法。本文将深入探讨面向对象程序设计的核心概念、特点以及它与...
根据给定文件的信息,我们可以提炼出关于“面向对象程序设计”的一些关键知识点。这份文档似乎是为大学本科生期末考试准备的题库,包含了单项选择题和主观题,并且附带了详细的答案解析。接下来,我们将围绕面向对象...
### 面向对象程序设计C++课后答案概述 #### 1. C++的发展历程与特性 - **发展历程**:C++是一种由Bjarne Stroustrup在1979年开始设计并实现的编程语言。它基于C语言进行扩展,旨在提供更强大的抽象机制和类型安全性...
面向对象程序设计是一种编程范式,它基于“对象”的概念,将数据结构和操作这些数据的方法结合在一起。C++语言是实现面向对象编程的主要工具之一,由Bjarne Stroustrup于1983年在C语言的基础上扩展而来,旨在提供更...
这篇实验报告是关于面向对象程序设计的一个实例,主要使用C++语言实现了一个名为`TwoCoor`的类,用于表示二维坐标系中的点。在这个类中,`x`和`y`是私有成员变量,分别代表点的横纵坐标。类提供了构造函数来初始化坐...
在Java编程语言中,面向对象程序设计(Object-Oriented Programming, OOP)是一种核心的编程范式,它基于“对象”概念,将数据和处理数据的方法封装在一起。本章节的源代码着重于讲解和实践Java中的面向对象特性,...
面向对象程序设计是一种编程范式,它使用“对象”来设计软件。对象是类的实例,其中类是一种定义对象行为和属性的模板。面向对象程序设计强调数据和行为的封装、继承和多态等特性。下面详细解释给定文件中提到的一些...
面向对象程序设计是一种重要的编程范式,它基于“对象”的概念,强调数据和操作数据的方法紧密结合,以此构建复杂的软件系统。在本次课程设计任务中,学生们将运用C++语言,结合面向对象的思想来实现一系列的实际...