主讲:刘志强
计算机教学
实验中心 第 17单元
面向对象方法
计算机软件基础
The software basic of computer
第 2 页
教学目标、内容
? 了解面向对象程序设计的基本概念
? 了解面向对象程序设计的特点
第 3 页
本单元涉及内容
? 第 11章 面向对象的软件开发方法
11.1 面向对象方法概述
? P325 ~ P333
第 4 页
一、面向对象的基本概念
?,面向对象, 简称为, OO“。 这
是目前计算机业界使用的高频
词 。, OO“代表着一种新的思维
方式, 代表着一种新的程序设
计方法的潮流 。
? 什么是 OO方法? 什么是 OOP?
为什么人们要选择它?
第 5 页
面向对象方法的由来
? 面向对象 ( Object Orented) 方法简称为 OO方法 。
?, 面向对象, 技术追求的是软件系统对现实世界的直
接模拟, 尽量实现将现实世界中的事物直接映射到软
件系统的解空间 。
? 面向对象的程序设计技术是以对象为基础, 以消息驱
动对象实现操作的一种全新的程序设计方法 。
? OO方法最早出现在挪威奥斯陆大学和挪威计算中心共
同研制的仿真语言 Simula67中 。
? 1980年随美国加州的 Xerox研究中心推出的 SmallTalk
80语言, 使得 OO方法得以较完善地实现 。
? 90年代初, OO方法和 OOP语言开始成熟 。
? 到 2000年, OO方法将成为软件开发的首选方法而受到
越来越多的程序设计人员的青睐 。
第 6 页
什么是面向对象方法
? 传统的程序设计方法,不论是需求分析,还是系统设计,
都是针对数学模型的,出发点是, 怎样做 ( How)?,,
即用计算机求解这个实际问题应该, 怎样做?, 。从实际
问题到求解模型(数学模型)的抽象都是围绕, 怎样做?
,去进行的。
? 现实世界是由物质组成的,物体的形式是多样化的,这就
是问题域( Domain)。人认识事物的规律:首先是认识这
个问题域,它, 是什么?, 。当物体反映到头脑中后,变
成意识,得到抽象的概念,及所谓逻辑世界。
? 逻辑世界是由对象组成的。对象在具体的逻辑世界中担当
一定的角色,并完成一定的功能(动作);对象有自己的
属性和动作。, 对象, 表现现实世界中的某个具体的事物。
? 面向对象( OO)方法的出发点是:, 是什么( What)?,,
即要求解的实际问题,它到底, 是什么?, 。
第 7 页
面向对象方法产生的 背景
? 软件的巨大作用 计算机技术的发展, 极大推动了社会的
发展 。 而社会的发展又给计算机科学提出了新的要求 。
计算机科学只有不断进行自身提高和完善, 才能适应不
断进步的社会生产力的需要 。
? 传统方法的历史功绩 传统的程序设计方法对, 软件生产
工程化, 曾起过重要的促进作用, 部分缓解了软件危机,
用传统方法成功地指导软件开发的范例也很多 。
? 软件危机 但是, 传统的方法学并不能完全消除软件危机,
用传统方法开发软件的生产率已远远不能满足要求, 成
为计算机科学发展的阻力 。 传统程序设计方法本身存在
着不可克服的问题 。
? 面向对象方法( OO) 就是在这种背景下诞生的,它使业
界看到了成功的希望。同时也促使 OO方法和技术的研究
得到迅速发展。
第 8 页
传统程序设计方法存在的问题
? 生产率提高的幅度远不能满足需要
? 软件重用程度很低
? 软件维护困难
? 软件不能真正满足用户的需要
第 9 页
生产率提高的幅度远不能满足需要
? 生命周期方法学强调需求分析的重要性, 强调
每个阶段结束之前必须进行严格的评审和质量
把关, 这确实加快了软件开发的速度 。 但所产
生的开发率的提高, 远远赶不上对软件产品需
求率的增长 。
? 据统计资料表明, 从 50年代到 80年代的 30年间,
美国的软件生产率翻了两翻 。 但社会对软件的
需求每年以两位数字的百分比在增长 。 软件的
开发, 已成为影响计算机应用的巨大桎梏和瓶
颈 。
第 10 页
软件重用程度很低
?,重用, 也称, 再用, 或, 复用,, 是指同一事物
不经修改或稍加修改就可以多次重复使用 。 显然,
软件重用是节约人力, 提高软件生产率的重要途径 。
? 传统的程序设计方法没能很好地解决软件重用问题 。
建立标准函数库和子程序库是人们为追求提高软件
的可重用性做出的尝试 。 但事实证明, 标准函数库
和子程序库只是对建立在数学模型基础上的应用问
题有可重用的功效, 而对其它应用问题则不行 。
? 对于传统的 SA-SD-SP技术而言, 思维成果的可重用
性很差 。
第 11 页
软件维护困难
? 按生命周期方法学开发出的软件, 维护成本很
高, 据统计数据表明, 软件维护的生产率比软
件开发的生产率低几十倍 。
? 80年代, 美国一年花费的软件维护费用高达
300多亿美元 。
? 90年代, 软件维护费用占系统研制, 开发总费
用的 70%-80%。
第 12 页
软件不能真正满足用 户的需要
? 实践表明, 用传统方法开发的大型应用系统往往不能
真正满足用户的需要 。 在美国, 开发出的系统中:
?符合用户需要并顺利投入使用的系统仅占总数
的 1/4;
?中途夭折的系统占 1/4;
?将近 1/2的系统, 虽然完成了开发过程, 但并未
被用户采用或并未被长期使用 。
? 还表现在:
?开发人员不能完全获得或不能彻底理解用户的要求,
以致开发出的软件系统与用户预期的系统不一致,
不能满足用户的需要 。
?所开发出的系统不能适应用户经常变化的情况, 系
统的稳定性和可扩充性不能满足要求 。
第 13 页
现实世界与 OO系统的对应关系
? OO方法是将现实世界抽象为, 对象是什么?,, 所以说, OO方法
是更高一级的抽象 。 它和人认识现实世界的方法是一致的 。
现实问题空间 面向对象解空间
物质:
一辆白色的自行车
意识:
自行车
具体事物:
一个对象 ——自行车的实例
抽象概念:
自行车类
?现实世界中事物分为两大部分:物质和意识;前者表示是具体的事
物,后者描述的是某个抽象的概念。
?现实世界中,“一辆白色自行车”是客观存在,是物质的;而自 行
车是人脑中一个抽象的概念,是主观意识;
?在 OO系统中自行车用“自行车类”来表达,“一辆白色自行车”是
一个具体的对象,是自行车类的一个实例。
第 14 页
面向对象程序设计 OOP—OOProgramming
? OOP是软件系统设计与实现的新方法 。
? OOP将数据及对数据的操作放在一起, 作为一个相互依存, 不
可分割的整体来处理 。
? OOP采用数据抽象和信息隐藏技术, 它将对象和对对象的操作
抽象成一种新的数据类型 ——类 。 拓宽了描述复杂现实问题
的能力 。
? OOP方法是通过增加软件的可扩充性和可重用性来改善并提高
软件的生产率的 。
? OOP的特点:
? 继承了 SP的优点 ( 任务分解, 模块化 )
? 抽象数据类型 ADT
? 继承性
? 封装性
? 可重用性
第 15 页
OO方法的 4个要点
? 客观世界由各种对象组成 。 OO的软件系统也是由
对象组成的;任何复杂的软件都是由简单的对象
组合而成的;
? 所有对象都可以划分为不同的对象类;每个对象
类都有自己特定的数据和方法;
? 对象类具有层次结构;上层的类称为, 父类, 或,
基类,, 下层的类称为, 子类, 或, 派生类, 。
子类可以继承父类的特性及操作;
? 对象之间通过传递, 消息, 互相联系 ( 消息机
制 ) 。
OO方法 = 对象 + 类 + 继承性 + 消息机制
第 16 页
OO方法的主要优点
? 与人类习惯的思维方法一致
? 稳定性好
? 可重用性好
? 可维护性好
第 17 页
与人类习惯的思维方法一致
? 人的认识过程是从一般到特殊的渐进思维
过程, 是从, 是什么?, 开始, 认识事物
及其本质规律, 主观随意性受到限制 。
? 而传统方法是从, 怎样做?, 开始, 到,
做什么?,, 反认识规律而动, 主观随意
性太多 。
第 18 页
稳定性好
? 传统方法以, 过程为中心,, 完全基于功能分
析和功能分解 。 当功能需求发生变化时, 将引
起对软件结构整体的修改, 这样的系统是不稳
定的 。
? OO方法以, 对象为中心,, 它是以对象模拟问
题领域中的实体, 以对象间的联系描述实体间
的联系 。 在分析, 研究对象及其属性的过程中
根据其内在的规律建立求解模型 。 基于这种方
法建立的软件系统, 不管功能需求如何变化,
其内在规律不变, 因而不会引起软件系统结构
的整体变化 。 因此是稳定的 。
第 19 页
可重用性好
? OO方法采用封装机制和信息隐藏机制, 使其
内部实现与外界完全隔离, 具有较强的独立
性 ( 对象对外界而言, 好象一个, 黑匣子
,) 。 较好地解决了, 软件复杂性控制, 问
题 。
? OO方法中类的继承性是一种代码重用的有效
途径 。 开发者在设计软件的过程中, 将一些
精心设计, 测试过的代码不断加入到已有的
类库中 。 而类库是可供共享的代码库 。
? 因此用 OOP开发的软件具有较好的可重用性 。
第 20 页
可维护性好
? 稳定性较好 局部修改, 不影响大局,
错误不会传播;
? 易修改 封装性和信息隐藏机制
? 易于阅读, 理解 符合人类习惯的思维
方法, 对原系统所做的修改, 往往通过在
原有类的基础上派生一些新类即可实现,
易于贯通 。
? 易于测试和调试 派生类继承原有类的
特性, 只需测试新增加的特性即可 。
第 21 页
面向对象程序设计语言 OOPL
? OOPL有两个显著的特征,
? 抽象数据类型 (ADT)
? 继承性
? OOPL要提供:
? 特定的语法成分来保证和支持 OOP;形式上
要能够表现,语义上要能够处理;
? 继承性, 多态性和动态链接机制, 使得类
和类库成为可重用的程序模块 。
第 22 页
面向对象程序设计语言的发展史
? LISP语言 50年代末发展起来的一种符号处理语言, 是一
种人工智能语言 。 1979年推出 Flavors是 LISP的 OOPL版本 。
? Simula语言 60年代开发, 在 ALGOL60的基础上扩充 。 主
要用于模拟 。 具有表加工等功能 。
? SmallTalk语言 第 1个真正的 OOPL,它体现了纯粹 OOP设
计思想 。 它起源于 Simula,是最成功的一个版本 。
? C家族 C++是在 C基础上扩充, 增加了对象处理机制, 将
,类, 看作是用户定义类型 。 由于 C++的出现, 才使 OOPL
越来越得到重视和广泛的应用 。 C++有许多种类,MS C++、
Turbo C++,Borland C++ 和 Visual C++等 。
? 其它语言 的 OO版本有,Turbo PASCAL,Object PASCAL、
Visual Basic等 。
第 23 页
实体和对象
? 对象 客观世界中的 实体 均可以抽象为问
题空间中的 对象 。 可以将要研究的任何事
物作为对象;大到航天飞机, 宇宙天体,
工厂, 学校, 小到一个学生, 一本书 。 对
象可以是 具体实体, 还可以表示 抽象实体,
例如规则, 算法, 事件等 。
第 24 页
对象 ——Object
? 考虑问题的角度不同, 对对象的定义也不同:
?对象是具有相同状态的一组操作的集合
( 从 OOP的角度看 )
?对象是对属性值和操作的封装
( 从信息模拟的角度看 )
?对象是存储在计算机中的一块私有存储区(具有数
据、也有对数据进行操作的方法);
(从存储的角度看)
?对象,:={ ID,MS,DS,MI}
ID 标识符 MS 操作集合
DS 数据结构 MI 消息集合
(形式化定义 )
第 25 页
对象的三个特征
? 标识 用来区别其它对象;
? 状态 用来描述对象的属性, 用数据成员来表示;
? 行为 对对象的操作, 用于改变对象的状态;
行为分两类:
?自身所承受的操作
?施加于其它对象的操作
? 例如, 一个人叫王东, 男, 1.80M,68kg,会修电器,可教计算
机课 。 描述如下:
对 象 名, 王东
对象状态, 性别:男 身高,1.80m 体重,68kg
对象功能,
回答身高, 体重, 性别 ( 属于自身所承受的操作 )
修理电器, 教计算机课程 ( 属于施加于其它对象的操作 )
第 26 页
对象的形象表示
? 可以将对象形象地比喻为一台录音机 。
当外界对它施加了
一个操作 ( 按下
按键 ), 它就
去执行播放, 录
音或停机 。 至于
内部如何实现这
写操作, 对用户
来说根本无须知到;用户只要知道按哪个键, 执行什么
操作即可 。 用户若要组装一台音响, 只需买一个合适
的音响设备接上即可, 也根本不用去修改录音机的电
子部件 。
Play
Record
状态
S
操作 1,2,3的实现
操作 1
操作 2
操作 3


Stop
第 27 页
对象是封装了数据和操作的黑匣子
? 与录音机类似, 可以把对象看成是一个封装了数
据和操作的黑匣子 ( 实体 ) 。
数据描述了对象的状态
属性表示对象的结构特征
操作可以改变对象的状态
通过传递消息实现对象的操作
第 28 页
自动机模拟对象举例
? 对象中的数据表
示对象的状态,
一个状态只能由
该对象的操作来
改变 。 每当需要
改变对象的状态
时, 只能由其它
对象向该对象发
出消息 。 对象响
应消息时, 按照
消息模式找出与
之匹配的方法,
并执行该操作 。
状态
S
输出
fi(x,s)
输入
fi,x
操作, f1,f2,…,fn
转换,g1,g2,…,gn
转换, 新状态 S’=gi (x,s)
第 29 页
对象的特点
? 以数据为中心 所设操作都与数据要做的处理有关 。
? 对象是主动的 与传统的数据有本质不同, 不是被动
地等待对它进行处理;相反, 对象本身是进行处理的
主体 。
? 实现了数据封装 对象的私有数据完全被封装在内部,
对外是不可见的 。 要使用对象的私有数据, 只需知道
数据的取值范围和可以对该数据施加的操作, 根本无
须知道数据的具体结构以及实现操作的算法 。 这就是
抽象数据类型 ( ADT) 的概念 。
? 本质上具有并行性 不同对象各自独立地处理自身的
数据, 彼此通过发消息传递信息完成通信 。
? 模块独立性好 对象的内聚性强, 对象间的耦合性弱 。
第 30 页
类 ——Class
? 人们习惯于把有相似特征的事物归为一类, 分类是人
类认识客观世界的基本方法 。 在 OO方法中,, 类, 就
是对具有相同数据和操作的一组相似对象的定义 。 例
如,, 人, 类, 可以是黑人, 白人, 可以是教师, 工
人等, 他们具有相同的人类特征和行为特征 。
? 类是 OO技术中最重要的概念 。 OOP中所有的操作都可
归结为对类的操作 。
? 类形成了一个具有特定功能的模块和一种代码共享的
手段 。 它为程序员提供了一种工具, 使得可方便地建
立所需要的任何类型 。
第 31 页
C++中对象类的定义举例
CLASS person {
Private,&& 私有数据和操作
char name[20];
int age;
cahr address[40];
char sex[10];
void PrintName( );
viod PrintAge( );
void PrintAddress( );
void PrintSex( );
Public,&& 公有操作
void Print( ) {
PrintName( );
PrintAge( );
PrintAddress( );
PrintSex( ); }
};
结构特征
数据成员
行为特征
成员函数
第 32 页
类层次
? 对象类描述的问题可以是一个点,也可以是一个方面 。 类的
层次结构称为类层次 。 处于上层的称为, 父类, 或, 基
类,, 处于下层的称为, 子类, 或, 派生类, 。
? 例如,, 人, 类是一个类层次;
工人, 农民, 学生, 教师是
,人, 类的派生类;
中学生, 大学生,
研究生是, 学生,
类的派生类, 研究
生, 助教, 讲师,
教授是, 教师, 类
的派生类 。
工人

中学生
教师 农民学生
大学生 研究生 助教 讲师 教授
父类
派生类
第 33 页
类格结构
? 将子类具有一个以上
父类的类层次结构称
为 类格结构 。 例如,
研究生子类;有在职
研究生, 他们在读学位
的同时, 还要承担教学
任务 。 类格结构用来描述具有多重隶属关系 ( 多重属
性 ) 的对象类 。
教师学生
研究生
第 34 页
实例 ——Instance
? 组成类的对象, 都是该类的实例 。
? 类与实例之间的关系, 可以看成是抽象与具体的关
系 。 类是多实例的综合抽象, 而实例又是类的个体
实物 。
? 例如,, 书, 是一个对象类, 而, 软件工程导论,
则是, 书, 类的一个实例 。
? 实际上类是建立对象时使用的样板, 按照这个样板
所建立的一个个具体的对象, 就是类的实例例子 。
第 35 页
消息 ——Message
? 前面举例中人的对象 ——王东 。 他可以修理电器, 讲计
算机课;这是他为别人可提供的服务 。 他还接受其它对
象的服务, 例如吃饭, 穿衣等 。 他要请求别人解决这些
问题 ( 因为他不生产粮食和服装 ) 。 这里的, 请求, 就
是人与人之间进行交互的手段 。 同样, 它什么时候修理
电器, 什么时候讲课, 都要得到其他对象的请求后才进
行 。
? 在面向对象的技术中,, 请求, 就是发送的, 消息, 。
消息是对象之间相互请求或相互协作的途径, 是要求某
个对象执行其中某个功能操作的规格的说明 。
? 发送消息的对象成为发送者, 接收消息的对象称为接收
者 。 对象间的联系, 只能通过传递消息来进行 。 对象也
只能在收到消息时, 才被激活 。 被激活后的对象代码将
按消息中的命令去操作它的私有数据, 完成要求的功能 。
第 36 页
消息的定义
? 将操作送到目标对象的一种机制称为消息 。 它
包括操作名的选择和传递, 操作信息的变量有
三个部分:
?接收消息的对象
?消息选择符
?变元
? 例如, 增加公司的操作,JFM( 一汽集团公司 )
JFM,Add子公司 ( ‘奥迪 1000’ )
操作变量 操作名 目标对象
“Add子公司”操作 将‘奥迪 1000’加入到 JFM中,当 JFM
接到该消息后,就执行,Add子公司”的操作。
第 37 页
消息的性质
? 同一对象可接收不同形式的多个消息, 产生不同
的响应;即
1个对象 M个消息 M个动作
? 相同形式的消息可以送给不同的对象, 所做出的
响应可以是截然不同的;即
M个对象 1个消息 M个动作
? 消息的发送可以不考虑具体的接收者, 对象可以
响应消息, 也可以对消息不予理会, 对消息的响
应并不是必须的 。
第 38 页
公有消息和私有消息
? 公有消息 在某个对象的一批消息中, 由外界对象
直接向它发送的消息, 称为公有消息 。
? 私有消息 在某个对象的一批消息中, 不对外发放,
由对象自己向本身发送的消息, 称为私有消息 。
? 前面介绍的对象类 person中, print( )是公有消息,
其它 (PrintName(),PrintAge()等 )为私有消息 。 外
界对象只能向 person对象发送 print()消息 。
第 39 页
消息类型
? 可返回对象的内部状态的消息;
? 可改变对象的内部状态的消息;
? 可以做一些特定的操作, 改变系
统状态的消息 。
第 40 页
消息序列
? 即接收或发送一系列的消息 。 在 OO系统中就是用消息序列来表述要解决的一
系列问题的 。 例如, 定义类 person和类 course如下:
Class person { class course {
char Name[20]; char Cname[20];
int Age; int roomno;
char Major[20]; char Ctime[20];
int Score;
public,public:
void print() {cout <<Name<<Age<< //……..
Major<<Score;} void print() { cout<<Cname<<
void printName(){cout<<Name;} roomno<<Ctime;}
void printAge(){cout<<Age;} };
void printMajor(){cout<<Major;}
void printScore(){cout<<Score;}
};
void f1(person P) void f2(person P,course C)
{ P.printName(); { P.print();
P.printAge(); C.print();
P.printMajor(); }
P.printScore(); 函数 f1向 person类对象 P发送了 4个打印消息 ;
} 函数 f2向 person类对象 P和 course类对象 C各发 1个消息,
第 41 页
事件( Event)
? 在自然界中,各种动物都能够对刺激作出反应。在程序
设计中,对象只有具有相同的反应能力,才能实现要求
的功能。对象对外界的刺激能够作出反应就是用 事件 和
方法 来模拟和实现的。
? 当用户对某一对象有操作意图的时候,通过外部设备
(鼠标、键盘等)输入必要的信息,计算机不但能够判
断出事件的性质,而且能够判断出事件的特征,从而给
对象一个准确的刺激,使对象进行预定的反应行为。
? 刺激对象的方式很多;例如,单击鼠标左键,计算机将
接收到一组信号,确定鼠标单击事件的发生,而事件的
特征,包括鼠标的位置、鼠标的激活键等信息也同时被
计算机接收,与对象联系起来,于是启动对象中对的事
件处理程序,进行事件的处理。
第 42 页
方法( Method)
? 对对象的处理称为 方法 或 操作 。 它包括控
制和操作过程 。
? 方法描述了对象执行操作的算法, 响应消
息的方法, 在 C++中称为 成员函数 。
? 例如:
ADD子公司 ( )
Print( )
第 43 页
属性( Attribute)
? 对象中的数据称为 属性, 它是对实体
所具有的性质大抽象 。 C++中把属性称
之为数据成员 。
? 例如:
char name[20];
int age;
第 44 页
二、面向对象方法的 特点
? OO方法的抽象技术
? OO方法的封装技术
? OO方法的继承机制
第 45 页
OO方法的抽象技术( Abstraction)
? 抽象是指将实际问题化简为计算机能处理和表示的形式 。 OO方法
比其它已有方法从应用设计到解决方案有更高的抽象性和更好的
对应性 。
? 主要原因是:
? 对象具有极强的抽象表达能力 OO方法采用对象来表达一切事
物 。 由于对象具有不同的属性, 使得 OO方法具有很强的建模能
力 。
? 对象实现了抽象的数据类型 在对象抽象的基础上, OO方法更
进一步提出对象类的概念, 从而实现了更高层的抽象 。 用户可
以根据实际问题的需要, 自定义对象类的机制被称为, 抽象的
数据类型,, 它使 OO方法具有更强的解决复杂问题的能力 。
? 规范化的抽象方法 OO方法的抽象技术更加接近于人类认识客
观事物的思维方法 。 寻找要求解的对象实体, 研究其属性和功
能, 再根据实体的性质, 功能将它们组成不同的功能模块 。
第 46 页
OO方法的封装技术( Encapsulation)
? 在程序设计中, 封装是指将数据及与这些数据有关的操
作集合放在一起, 形成一个能动的实体 ——对象 ( 黑匣
子 ) 。 用户不必知道对象行为的实现细节, 只要根据对
象提供的外部特征及接口来访问对象 。
? 所谓, 封装性, 是一种信息隐藏技术, 其目的是将对象
的设计者和对象的使用者分开 。
? 对象的封装性体现在:
?具有清楚的边界 对象的数据结构和操作限定与其中
?具有统一的外部接口 ( 也称消息模式 ) 它描述了对
象之间的相互作用, 请求和响应
?代码保护 对象内部的实现代码受到封装壳的保护,
其它对象不能直接修改本对象所拥有的数据和代码 。
第 47 页
封装机制的目的
? 将对象的使用者和设计者分开;使用者
不必知道对象行为实现的细节, 只需用
设计者提供的协议 ( 消息 ) 命令对象去
实现其动作 。
? 协议 ( Protocol) 是一个对象对外服务
的说明, 它声明对象可以为外界做什么 。
请求对象进行操作的唯一途径就是通过
协议中提供的消息进行的 。 协议实际上
是一个对象所能接受的所有公有消息的
集合 。
第 48 页
STUDENT对象类举例
class student {
private,私有功能,changemark只供
char *name; 对象自己使用
int mark;
char *major ; void changemark( ) ;
public, 公有功能,getname和
char *getname( ) ; getmajor可供外界
char *getmajor( ), 对象使用
protected:
int getmark( ) ; 被保护功能,getmark,虽向外
}; 界公布, 但只能
由为排生类对象提
供服务 。
第 49 页
OO方法的继承机制 (Inheritance)
? 继承所表达的是一种对象类之间的相互关系,它使
得某类对象可以继承另一类对象的特征和能力 。
? 继承性的含义是:自动共享类的对象的全部特征的
一种机制 。 它包括:
?继承性 新的对象自动继承该类的特征;
?继承传递性 子类自动继承其父类的特征;对多
层类结构, 下层子类可以继承其上各层父类的
特征;
?多重继承性 子类可以从它的多个父类 ( 超类 )
中继承它们的特征 。
第 50 页
继承性举例
? 在, 人, 类中, 大学生可以继承, 人, 和, 学生,
的特征 ( 继承传递 ) ;对于在职研究生既可以继承
,学生, 的特征, 又可以继承, 教师, 的特征 ( 多
重继承 ) 。

身份证号:
姓名:
学号:
校名
学生
大学生
专业:
班级:
身份证号,xxxxxxx
姓名:刘小明
学生,学生,9601078校名:西安交通大学
大学生,专业:计算机班级,962班
人:
第 51 页
具有继承关系的对象的特性
? 对象类间具有共享特征 ( 包括数据和程序代
码的共享 )
? 对象类间具有细微的差别或新增部分 ( 包括
非共享的程序代码和数据 )
? 对象类间具有层次结构 。
? 继承所具有的作用有两个方面:
?减少代码冗余
?通过协调性减少相互之间的接口和界面 。
第 52 页
继承的分类
? 从继承源上划分为:单继承和多继承
?单继承 一个人只能继承一个人的财产
?多继承 一个人既可以继承父母的财产,又可以继承
其他亲属的财产。
? 从继承内容上划分为:取代, 包含, 受限和特化继承 。
?取代继承 徒弟掌握了师傅所有的技术, 在任何需要
师傅的地方都可以由徒弟来代替;
?包含继承, 水果, 是一类对象,, 苹果, 是一种特
殊的水果 。, 苹果, 继承了, 水果, 的所有特征;任
何一个苹果都是一个水果, 即苹果包含了水果具有的
所有特征;
?受限继承, 驼鸟, 是一种特殊的鸟, 它不能继承鸟
会飞的特征;
?特化继承, 工程师, 是一类特殊的人, 他们比一般
人具有更多的特有信息 。
第 53 页
继承性的优点
? 能清晰体现相关类间的层次结构关系;
? 可大大增加代码的重用性;
? 通过增强一致性来减少模块见的接口和界
面, 大大增加可维护性;
? 是自动传播代码的有利工具
? 在一般类基础上构造, 建立, 扩充新类的
最有效的手段 。
第 54 页
作业、思考题
? 思考:
第 11章的 1.~9.
? 预祝同学们考出好成绩。
谢谢!再见!
第 55 页
结束语
? 欢迎参加到中心网站, 软件基础, 课程
的学习讨论中来。
? 中心网址:
http,//ctec.xjtu.edu.cn
? 课件下载地址,
ftp,//ctec.xjtu.edu.cn
? 我的 E-mail地址,
LZQ_2668634@263.net
谢谢,再见!