《面向对象分析与设计》一1.3面向对象的基本原则

简介: 本节书摘来自华章出版社《面向对象分析与设计》一书中的第1章,第1.3节,作者 麻志毅,更多章节内容可以访问云栖社区“华章计算机”公众号查看

1.3面向对象的基本原则

面向对象的基本原则主要有抽象、分类、封装、消息通信、多态性、行为分析和复杂性控制。
(1)抽象
抽象(abstraction)是指从事物中舍弃个别的、非本质的特征,而抽取共同的、本质特征的思维方式。在面向对象方法中,可从几个方面来理解抽象:
1)编程语言的发展呈现抽象层次提高的趋势。例如,用C++编程,不用考虑CPU寄存器和堆栈中存放的内容,因为大多数编程语言都是从这些细节中抽象出来的。对于一个完成确定功能的语句序列,其使用者都可把它看作单一的实体(如函数),这种抽象就是过程抽象。在面向对象编程语言中,存在着过程抽象和数据抽象。在类的范围内,使用过程抽象来形成操作。数据抽象是指把数据类型和施加在其上的操作结合在一起,形成一种新的数据类型。类就是一种数据抽象,栈也是一种数据抽象。
2)在面向对象方法中,对象是对现实世界中事物的抽象,类是对对象的抽象,一般类是对特殊类的抽象。有的抽象是根据开发需要进行的。例如,就对象是对现实世界中的事物的抽象而言,高校中的学籍管理系统和伙食管理系统中所使用的学生的信息就是不一样的;再如,一个现实事物可能要担任很多角色,只有与问题域有关的角色,在系统中才予以考虑。
3)在面向对象的不同开发阶段需要进行不同程度的抽象。典型地,在面向对象分析阶段,先定义类的属性和操作,而与实现有关的因素在设计阶段再考虑。例如,对自动售货机建模,在分析阶段先定义一个类“自动售货机”,根据其收钱和发货的职责定义其属性和操作,其中对外提供的操作为收钱口、选择按钮和发货口(三者形成一个接口),而对于如何根据实现条件来设计它的内部细节是设计阶段的任务。这与现实生活中一样,我们可以在较高的抽象层次上分析与解决问题,然后再逐步地在较低抽象层次上予以落实。
从上述自动售货机的例子中能看到,使用抽象至少有如下好处:一是便于访问,外部对象只需知道有限的几个操作(作为接口)即可使用自动售货机对象;二是便于维护,如自动售货机的某部分有变化而其接口没有发生变化,只需在机器内部对该部分进行修改。甚至可用更优的具有相同接口的售货机对其进行替换,而不影响使用者的使用方式。
(2)分类
分类(classification)的作用是按照某种原则划分出事物的类别,以有助于认识复杂世界。
在OO中,分类就是把具有相同属性和相同操作的对象划分为一类,用类作为这些对象的抽象描述。如果一个对象是分类(类)的一个实例,它将符合该分类的模式。分类实际上是把抽象原则运用于对象描述时的一种表现形式。在OO中,进一步地还可以运用分类原则,通过不同程度的抽象,形成一般/特殊结构。
运用分类原则,清楚地表示了对象与类的关系,以及特殊类与一般类的关系。
(3)封装
封装(encapsulation)有两个含义:①把描述一个事物的性质和行为结合在一起,对外形成该事物的一个界限。面向对象方法中的封装就是用对象把属性和操纵这些属性的操作包装起来,形成一个独立的单元。封装原则使对象能够集中而完整地对应并描述具体的事物,体现了事物的相对独立性。②信息隐蔽,即外界不能直接存取对象的内部信息(属性)以及隐藏起来的内部操作,外界也不用知道对象对外操作的内部实现细节。在原则上,对象对外界仅定义其什么操作可被其他对象访问,而其他的对象不知道所要访问的对象的内部属性和隐藏起来的内部操作以及它是如何提供操作的。
通过封装,使得在对象的外部不能随意访问对象的内部数据和操作,而只允许通过由对象提供的外部可用的操作来访问其内部,这就降低了对象间的耦合度,还可以避免外部错误对它的“交叉感染”。另外,这样对象的内部修改对外部的影响变小,减少了修改引起的“波动效应”。图13所示的是封装的原理图,其中的一部分操作是外部可用的。

image

严格的封装也会带来问题,如编程麻烦,有损执行效率。有些语言不强调严格的封装和信息隐蔽,而实行可见性控制,以此来解决问题。例如,C++和Java就是这样的语言,通过定义对象的属性和操作的可见性,对外规定了其他对象对其属性和操作的可访问性;另外,一个对象也可以提供仅局限于特定对象的属性和操作,这可以通过把相应的可见性指定为受保护的或私有的来做到。
(4)消息通信
原则上,对象之间只能通过消息(message)进行通信,而不允许在对象之外直接地访问它内部的属性,这是由封装原则引起的。
消息必须直接发给特定的对象,消息中包含所请求服务的必要信息,且遵守所规定的通信规格说明。一条消息的规格说明至少包括:消息名、入口参数和可能的返回参数。一个对象可以是消息的发送者,也可以是消息的接收者,还可以作为消息中的参数。
(5)多态性
多态性(polymorphism)是指一般类和特殊类可以有相同格式的属性或操作,但这些属性或操作具有不同的含义,即具有不同的数据类型或表现出不同的行为。这样,针对同一个消息,不同的对象可对其进行响应,但所体现出来的行为是不同的。
(6)行为分析
关系机制提供了用关联、继承和聚合等组织类的方法。很多面向对象学者把系统模型的这部分结构称作静态模型,也有的称其为结构模型。通常,对系统还需要进行行为分析。
对于一个对象,由于其内的属性值在不断地发生着变化,按一定的规则根据属性值可把对象划分为不同的状态。在请求对象操作时,可能会使对象的状态发生改变,而对象的当前状态对随后的执行是有影响的。通过状态机图可以分析对象的状态变迁情况。
系统中的对象是相互协作的,通过发消息共同完成某项功能。这种协作的交互性可以用交互图来描述。
很多系统具有并发行为。从事物的并发行为的起因上看,事物的每个并发行为是主动发生的。体现在对象上,就是有一种对象是主动的,每个对象代表着一个进程或线程。在交互图上也能体现出对象间的并发行为。
(7)复杂性控制
为了控制系统模型的复杂性,引入了包(package)的概念。使用包可以把模型元素组织成不同粒度的系统单位,也可以根据需要用包来组织包。例如,用分析包和设计包来分别组织分析模型和设计模型,以显式地描述不同抽象层次的模型;对复杂类图也可以按类之间关系的紧密程度用包来组织类。

相关文章
|
1月前
什么是面向对象领域软件设计的 Contravariance 概念
什么是面向对象领域软件设计的 Contravariance 概念
20 0
《面向对象分析与设计》一3.1 系统边界
本节书摘来自华章出版社《面向对象分析与设计》一书中的第3章,第3.1节,作者 麻志毅,更多章节内容可以访问云栖社区“华章计算机”公众号查看
3407 0
|
6月前
|
领域建模 uml
面向对象分析与设计
一、面向对象分析与设计 面向对象分析与设计(Object-oriented Analysis and Design,简称OOAD)是一种软件开发方法论,旨在通过将现实世界的问题抽象为对象的集合来进行系统分析和设计。 面向对象分析(Object-oriented Analysis,简称OOA)是指通过识别和描述系统中的对象及其相互关系来分析问题。在面向对象分析中,重点关注的是问题域中的实体、属性、行为以及它们之间的关系。通过对问题域的深入理解,可以识别出系统中的关键对象,并确定它们的属性和行为。 面向对象设计(Object-oriented Design,简称OOD)是指根据面向对象分析的结果,
88 0
|
8月前
|
存储 算法 程序员
25【软件基础】面向对象分析与设计思想总结
`面向对象的本质`:通过对象之间的协作完成功能。
387 0
|
11月前
|
关系型数据库
面向对象的设计(OOD)原则了解一下
面向对象的设计(OOD)原则了解一下
129 0
|
设计模式 Java 关系型数据库
面向对象、设计原则、设计模式、编程规范、重构,这五者有何关系?
面向对象、设计原则、设计模式、编程规范、重构,这五者有何关系?
面向对象、设计原则、设计模式、编程规范、重构,这五者有何关系?
面向对象的设计的7大原则
面向对象的设计的7大原则
191 0
|
uml
【程序设计】6大设计原则之依赖倒置
【程序设计】6大设计原则之依赖倒置
120 0
【程序设计】6大设计原则之依赖倒置
|
设计模式 Java
面向对象的设计原则最终篇(一)
关于面向对象的设计原则我之前已经解释过四种了,分别是单一职责原则,开放关闭原则,里式替换原则,依赖倒置原则而接下来我们要解释的就是最后的三种原则了,分别是接口隔离原则, 迪米特法则, 组合复用原则。
面向对象的设计原则最终篇(一)
|
设计模式 关系型数据库 uml
OOP编程七大原则
OCP(Open-Closed Principle),开放封闭原则:软件实体应该扩展开放、修改封闭。实现:合理划分构件,一种可变性不应当散落在代码的很多角落里,而应当被封装到一个对象里;一种可变性不应当与另一个可变性混合在一起。
1172 0