晰的抽象界面,它只说明做什么,不必说明如何去做,同时还说明模块之间的关系。这些模块 构成了一种层次结构,在设计时采用自顶向下,分而治之的办法。 面向对象方法提供了一种有效的模块分解方法,进一步发展了基于数据抽象的模块化 设计并且在数据抽象和抽象数据类型之上又引入了劝态连接和继承性等机制,使其更好地 支持大型程序设计。 1.5面向对象程序设计范型 程序设计范型是指程序设计的体裁,即用程序设计语言表达各种概念和各种结构的 套设施。 当今所具有的程序设计范型有 (1)过程式程序设计范型程序设计归结为选定数据结构、设计算法过程或函数。程 序执行被看作各过程调用的序列。 PASCAL和C语言就支持此范型。 (2)函数式程序设计范型程序被看作“描述输入与输出之间的关系”的一个数学函 数。在此范型中,完全消除状态或变量这一概念,即函数式程序设计范型是无变量的程序设 计。LISP语言就文持此范型。 (3)面向约束程序设计范型程序被看作“描述输入与输出之间的各关系”的一组方 程。程序设计归结为列举事实定义逻辑关系、以提问方式求解。在此范型中也消除了状态 概念。 PROLOG语言就支持此范型 (4)面向对象程设计范型。 (5)进程式程序设计范型它是一种从属于面向对象程序设计范型的范型 (6)类型系统程序设计范型。 (7)事件程序设计范型。 什么是面向对象程序设计范型?从程序这一方面来讲,它是一个类的集合和各类之间 以继承关系联系起来的结构,再加上一个主程序,在主程序中定义各对象并规定它们之间传 递消息的规律。从程序的执行这一方面来看,它归结为各对象和它们之间以消息传递的方式 进行着的通讯。面向对象程序设计最主要的特征是各对象之间的消息传递和各类之间的继 承。 某一种程序设计语言并不一定与一种程序设计范型相对应,它也许是具备两种或多种 范型的程序设计语言,即混合范型语言。例如C++就不是纯粹的面向对象范型,而是过程 式程序设计范型和面向对象程序设计范型的混合范型程序设计语言。 1.6面向对象方法的思维科学基础 为了学习掌握使用一种程序设计语言我们从这个语言所属范型的理论基础着手,可 以对此程序设计语言做更深的理解。 面向对象程序的执行是模拟现实世界一部分或其想象的行为。 程序设计本身是人们的抽象思维和形象思维的统一,是人类的一种思维活动。 面向对象程序设计的思维活动是一种建立模型的活动
1.6.1建立模型 模型是用来反映现实世界中事物的特征的,任何一个模型都不可能反映客观事物的一 切貝休特征,它只能是对事物特征和变化规律的一种抽象,并在它所涉及的范围内更普遍 更集中、更深刻地描述客体的特征,通过建立模型而达到的抽象是人们对客体认识的深化。 建立模型的过程主要是抽象思维过程,可以把抽象思维过程概括如下: 邦性思,思维抽象一阶 具体思维 感性具体阶段 思维具体 1知性思维阶段 知性思维阶段是抽象思维过程的第一个阶段,它是从感性具体到思维抽象的过程。 思维是从丰富的感性材料中分解“对象”抽象出一般规定,形成了对“对象”的某些方 面、某些属性、某些特征的普遍认识。 感性具体是丰富多彩的,既具有特殊性的个别性,同时也包含一般性的个别性。在程序 设计过程中,为了理解被模拟系统的复杂状态,必须分析“对象”所表现的各种现象,并且为 了把握各现象的有关性质,必须进行科学抽象,即设计类及其属性和行为 2.具体思维阶段 具体思维阶段是从思维抽象到思维具体的过程 抽象思维之所以要从抽象发展到具体,是因为卜面两个原因 ①从感性具体到思维抽象所获得的抽象规定,只是对“对象”的某些本质属性和特征的 抽象认识并不能全面把握这些本质属性和特征,不能揭示事物的深刻本质和规律性 ②思维的目的在于把握具体“对象”的多样性的统一和不同规定的综合,全面把握“对 象”的本质和规律,因此必须在思维中再现具体 在程序设计过程中,在知性思维阶段,我们获得了类的抽象规定;在具体思维阶段,我们 把类组织成类/子类的层次结构继承关系。 被模拟的系统和建立的模型系统内部以及它们之间的关系如图1.3所示。 被模拟的系统 「针对何题的概念 知性思维思维抽象具体 感性具体 思维 思维具体 抽象 建 棋型系统 实体 实现的概念 图1.3被模拟系统与模型间的关系
从图1.3中看出,被模拟系统的感性具体映射到模型系统的实体(即对象),被模拟系统 的针对问题的概念映射到模型系统的实现的概念(即类)。 1.6.2抽象思维的方法 在形成概念的过程中,有许多抽象思维的方法,其中用得较多的是分类法、综合法和普 遍化方法 1.分类法 分类法是根据“对象”的共同点和不同点,将“对象”区分为不同的种类,而且形成有一定 从属关系的不同等级的系统的逻辑方法。使用它能使客观“对象”条理化、系统化,便于分门 别类,可以形成对客观“对象”完整的看法。它是一种从一般到特殊的演绎方法。 如图1.4所示为动物世界的分类图示表征,它是一棵自上而下的生成树,每一结点表示 一类动物括号内表示该类对象的属性。 动物(有感觉,会动) 哺乳类(有毛发,有奶 鸟类(有羽毛,会生蛋 企鹅…倍天翁 (吃肉,犬牙利齿)(反刍动物 子)〔不会飞,长腿,长脖)(不会飞,善游泳)(会飞,速度快) 金钱豹 (黄褐色,有暗斑点)(黄褐色,有黑色条纹) 图1.4动物的分类方法 2.综合法 综合总是和分析相联系的,所谓分析是指把整体分解为部分,或把复杂的事物分解为简 单要素;而综合则是把“对象”的各个部分、各个方面和各种因素结合起来整体地、动态地观 察“对象”,是与分析相反的一种思维过程。 3.普遍化方法 任何客观事物既具有个别属性,也具有一般属性,如何从个别中发现一般,这种思维方 法就是普遍化方法,也称为归纳方法。 例如我们今天看到一条黄狗,它是一个对象,明天又看到一条白狗,它也是一个对象,这 两个对象除了颜色不同外,其它的特征都一样,我们便可以通过这两个特殊的对象归纳出狗 的共同特点,然后构造出一个狗类在其中描述了狗的所有共同特征,如会叫、有犬齿、嗅觉 灵敏、忠实等,而前面我们看到的那两个对象—黄狗和白狗便是狗这个类的实例。 练习题 (1)面向对象思想是怎么产生的? (2)什么是面向对象程序设计,它与传统的结构武程序设计有什么不同
(3)面向对象程序设计语言有哪几类? (4)常用的程序设计范型有哪几种? (5)用面向对象方法建立模型的思维过程是怎么样的。 (6)常用的抽象思维方法有哪几种?
3营面对源的悲念 为了理解面向欢象的理论,必须从最基本的概念入手,通过对最基本的概念的掌握,来 真正认识面向对象方法的作用。这一章我们介绍面向对象理论中的几个最基本的部件 2.1对象 对象是面向对象系统中的核心概念,如果不能正确地认识和定义它,就无法掌握面向对 象的理论。 211对象的定义 首先需要搞清楚的第一个问题是,什么是对象?对象具有两方面的含义,即在现实世界 中的含义和在计算机世界中的含义 在我们所生活的现实世界中,“对象”无处不在。在我们身边存在的一切事物都是对象, 例如一粒米、本书、一个人、所学校,甚至个地球,这些都是对象除去这些可以触及的 事物是对象之外,还有一些无法整体触及的抽象事件,例如一次演出、一场球赛、一次借书, 也都是对象 个对象既可以非常简单,又可以非常复杂复杂的对象往往可以是由若干个简单对象 组合而成的 所有的这些对象除去它们都是现实世界中所存在的事物之外,它们都还具有各自不同 的特征例如一粒米它首先是一粒米这样一个客观存在汉语中称做“米”,其次它还具有颜 色、体积、重量,再其次它还可以被食用,可以用作原料等。也就是说一粒米是一个具有自身 状态和目身功能的客观存在再例如一个人,首先它是一个客观实体,具有一个名字来标识 其次它具有性别、年龄、身高体重等这些体现他自身状态的特征再其次他还具有一些技 能,例如会说英语、会修电器等。 通过上面的这些举例我们可以对“对象”下一个定义,即对象是现实世界中的一个实体 它具有如下特性: 有一个名字以区别于其他对象; 有一个状态用来描述它的某些特征; 有一组操作,每一个操作决定对象的一种功能或行为; 对象的操作可分为两类:一类是自身所承受的操作,一类是施加于其它对象的操 作 对象是其自身所具有的状态特征及可以对这些状态施加的操作结合在一起所构成的独 立实体