1、面向对象程序设计的基本概念和特点教学目标、内容 了解面向对象程序设计的基本概念 了解面向对象程序设计的特点第 2 页 什么是面向对象方法? 结构化方法怎么啦? 先从起因说起第 3 页一、面向对象的基本概念 “面向对象“简称为“OO”。这是目前计算机业界使用的高频词。“OO”代表着一种新的思维方式,代表着一种新的程序设计方法的潮流。 什么是OO方法?什么是OOP?为什么人们要选择它?第 4 页1、传统方法学的问题 传统的程序设计方法结构化程序设计方法对“程序开发”实现软件开发工程化曾经起到了重要的促进作用,部分地缓解了软件危机,用传统方法学成功的指导软件开发的范例很多。 但是,传统方法学并不能完
2、全消除软件危机。方法学本身还存在不可克服的问题。第 5 页 传统程序设计方法存在的问题 生产率提高的幅度远不能满足需要 软件重用程度很低 软件维护困难 软件不能真正满足用户的需要第 6 页 生产率提高的幅度 远不能满足需要u生命周期方法学强调需求分析的重要性,强调每个阶段结束之前必须进行严格的评审和质量把关,这确实加快了软件开发的速度。但所产生的开发率的提高,远远赶不上对软件产品需求率的增长。u据统计资料表明,从50年代到80年代的30年间,美国的软件生产率翻了两翻。但社会对软件的需求每年以两位数字的百分比在增长。软件的开发,已成为影响计算机应用的巨大桎梏和瓶颈。第 7 页n软件重用程度很低u
3、“重用”也称“再用”或“复用”。显然,软件重用是节约人力,提高软件生产率的重要途径。u传统的程序设计方法没能很好地解决软件重用问题。建立标准函数库和子程序库是人们为追求提高软件的可重用性做出的尝试。但事实证明,标准函数库和子程序库只是对建立在数学模型基础上的应用问题有可重用的功效,而对其它应用问题则不行。u对于传统的SA-SD-SP技术而言,思维成果的可重用性很差。第 8 页n软件维护困难u按生命周期方法学开发出的软件,维护成本很高,据统计数据表明,软件维护的生产率比软件开发的生产率低几十倍。u80年代,美国一年花费的软件维护费用高达300多亿美元。u90年代,软件维护费用占系统研制、开发总费
4、用的70%80%。第 9 页软件不能真正满足用户的需要 实践表明,用传统方法开发的大型应用系统往往不能真正满足用户的需要。在美国,开发出的系统中:符合用户需要并顺利投入使用的系统仅占总数的1/4;中途夭折的系统占1/4;将近1/2的系统,虽然完成了开发过程,但并未被用户采用或并未被长期使用。 还表现在: 开发出的软件系统与用户预期的系统不一致,不能满足用户的需要。 所开发出的系统不能适应用户经常变化的情况,系统的稳定性和可扩充性不能满足要求。第 10 页2.出现问题的原因 僵化的瀑布模型 结构化技术的缺点第 11 页僵化的瀑布模型 瀑布模型生存周期的各个阶段之间存在着严重的顺序性和依赖性。 但
5、实践证明,在系统建立起来之前,很难仅仅依靠分析就确定出一套完整、准确、一致、有效的应用需求。更何况预先需求的方法,也不能适应用户需求不断变化的情况。具体表现在:某些系统需求是模糊的项目参与者之间存在通信鸿沟预先定义的系统可能是过时的第 12 页某些系统需求是模糊的 实际情况是:a.有的用户有在计算机上实际使用类似软件的工作经验,能够预先精确地提出全部系统需求。例如,OS类的系统软件、导弹控制系统类的控制软件、图像处理软件、科学计算等软件。b.但对更多的应用系统,例如,MIS、OA之类的数据处理系统,其需求往往是很难预先准确地指出。 许多用户对他们的需求最初只是模糊笼统的概念,显然让其准确无误地
6、描述出来是不切合实际的。第 13 页项目参与者之间存在通信鸿沟 由于没有共同语言,因此,双方很难作到完全沟通和相互理解,在需求分析阶段定义的用户需求常常是不完成和不准确的。 传统的定义需求的方法假设利用需求规格说明书之类的文档,就可以进行清晰、准确及有效的沟通。但一般来说,文档本质上被动、静止的通信工具,利用它往往很难准确地描述一个动态系统。因此,即使用户同意了需求规格说明书,也并不能保证根据这份说明书开发出来的软件系统就能真正满足用户的需要。第 14 页预先定义的系统可能是过时的 目前,开发软件的生产率仍然很低,一个规模较大的软件其开发时间往往需要较长时间。随时间的推移,用户需求可能有较大的
7、不同。按预先指定的需求开发软件,当软件开发出来已经过时。 有时,按生命周期方法学在开发后期修改需求,往往要付出很高的代价,甚至根本不可能修改。第 15 页结构化技术的缺点 难于将一个复杂的问题化简、分解 设计方法主观随意性很大 很难修改和扩充第 16 页难于将一个复杂的问题化简、分解 传统方法(结构化方法)的本质是“功能分解”,是围绕实现处理功能的“过程”来构造系统的。 然而,用户需求的变化大部分是针对功能的。因此,这种变化对于基于过程的设计来说就是灾难性的。用这种技术设计出的系统结构常常是不稳定的。第 17 页设计方法主观随意性很大 结构化方法采用“自顶向下,逐步求精”进行分解。但因开发人员
8、的经验、知识背景对问题认识的不同,而造成分解的随意性。 即使是对同一个系统,不同的人可能分解出不同的软件结构。 结构化技术在本质上具有冯诺依曼计算机体系结构的特点,把数据和操作作为分离的实体,一些具有可用价值的软件部件已和应用环境结合在一起,不可分割。因此,使得软件可重用性差。第 18 页很难修改和扩充 结构化技术明确地定义了目标系统的边界,软件通过界面与客观世界通信。由于开发的系统依赖于对系统边界的定义,因此,很难把这样的系统扩展到新的边界。 既这样的系统是很难修改和扩充的。第 19 页3、软件工程的新途径 如何克服传统方法的缺点,在长期的工程实践中人们创造出许多新方法,其中包括:快速原型法
9、面向对象方法两种新途径的结合第 20 页两种类型的应用系统 在实际应用中,软件系统分为两大类:预先指定的系统用户驱动系统第 21 页预先指定的系统 这样的系统需求定义比较稳定,而且能够预先指定其功能。 例如,OS、传统工业生产过程控制系统、火箭发射跟踪控制系统、编译系统、DBMS之类的系统软件。 在这类软件的开发过程中,结构化技术至今仍然是最有效的开发方法之一。第 22 页用户驱动系统 这类系统需求是不稳定的,随时间的变化而改变。 例如,商业、行政领域的数据处理系统、决策支持系统、及其他一些面向终端用户的系统。 这类系统必须具有快速、简洁地进行调整的特性,以便能及时根据用户需求的变化相应的修改
10、系统。 传统开发方法和技术,对这类问题就不太适应了。第 23 页快速原型法 原型模型样品模式即通过样品不断改进,使得最后的产品就是用户所需要的。 快速原型法 用交互式的快速建立起来的原型取代形式的、僵化的大部头规格说明,用户通过在计算机上实际运行和试用原型系统而向开发者提供真实的反馈意见。 这种方法打破了传统方法自顶向下的开发模式,是目前比较流行的实用的开发模式。第 24 页快速原型法和传统方法 采用瀑布模型开发软件,对用户来说是“纸上谈兵”,用户无法知道或感触到实际需要的是一个什么样的系统。 而用原型模型开发软件,是“真枪实弹”的在真实的系统上操作,用户在试用原型系统过程中,很容易判断该系统
11、是否真正满足自己的业务需要。第 25 页为什么选择面向对象分析法? 更加自然 当系统不断地演化时,内部的功能会变化,但是对象本质不变 面向对象的系统更容易维护 面向对象分析法强调对象间定义良好的界面第 26 页4.面向对象方法的由来 面向对象(Object Orented)方法简称为OO方法。 “面向对象”技术追求的是软件系统对现实世界的直接模拟,尽量实现将现实世界中的事物直接映射到软件系统的解空间。 面向对象的程序设计技术是以对象为基础,以消息驱动对象实现操作的一种全新的程序设计方法。 OO方法最早出现在挪威奥斯陆大学和挪威计算中心共同研制的仿真语言Simula67中。 1980年随美国加州
12、的Xerox研究中心推出的SmallTalk 80语言,使得OO方法得以较完善地实现。 90年代初,OO方法和OOP语言开始成熟。 如今,OO方法将成为软件开发的首选方法而受到越来越多的程序设计人员的青睐。第 27 页什么是面向对象方法 传统的程序设计方法,是针对数学模型的,出发点是“怎样做(How)?”。 面向对象(OO)方法的出发点是:“是什么(What)?”。 现实世界是由物质组成的,人认识事物的规律:首先是认识问题域(Domain),它”是什么?“。当物体反映到头脑中后,变成意识,得到抽象的概念,即所谓逻辑世界。 “对象”表现现实世界中的某个具体的事物。第 28 页面向对象方法产生的背
13、景 软件的巨大作用 传统方法的历史功绩 传统的程序设计方法对”软件生产工程化“曾起过重要的促进作用,部分缓解了软件危机,用传统方法成功地指导软件开发的范例也很多。 软件危机 但是,传统的方法学并不能完全消除软件危机,用传统方法开发软件的生产率已远远不能满足要求,成为计算机科学发展的阻力。传统程序设计方法本身存在着不可克服的问题。 面向对象方法(OO) 就是在这种背景下诞生的,它使业界看到了成功的希望。同时也促使OO方法和技术的研究得到迅速发展。第 29 页现实世界与OO系统的对应关系 OO方法是将现实世界抽象为“对象是什么?”,所以说,OO方法是更高一级的抽象。它和人认识现实世界的方法是一致的
14、。第 30 页现实问题空间现实问题空间 面向对象解空间面向对象解空间物质:物质:一辆白色的自行车一辆白色的自行车意识:意识:自行车自行车具体事物:具体事物:一个对象一个对象自行车的实例自行车的实例抽象概念:抽象概念:自行车类自行车类v 现实世界中事物分为两大部分:现实世界中事物分为两大部分:物质物质和和意识意识;前者表示是;前者表示是具体的事物,后者描述的是某个抽象的概念。具体的事物,后者描述的是某个抽象的概念。v 现实世界中,现实世界中,“一辆白色自行车一辆白色自行车”是客观存在,是物质的;是客观存在,是物质的;而而“自行车自行车”是人脑中一个抽象的概念,是主观意识;是人脑中一个抽象的概念,
15、是主观意识;v 在在OOOO系统中自行车用系统中自行车用“自行车类自行车类”来表达,来表达,“一辆白色自一辆白色自行车行车”是一个具体的对象,是自行车类的一个实例。是一个具体的对象,是自行车类的一个实例。OO方法4要素 OO方法 = 对象 + 类 + 继承性 + 消息机制 客观世界由各种对象组成。OO的软件系统也是由对象组成的;任何复杂的软件都是由简单的对象组合而成的; 所有对象都可以划分为不同的对象类;每个对象类都有自己特定的数据和方法; 对象类具有层次结构;上层的类称为”父类“或”基类“,下层的类称为”子类“或”派生类“。子类可以继承父类的特性及操作; 对象之间通过传递”消息“互相联系(消
16、息机制)第 31 页第 32 页对象的成份对象的成份身份身份: : 名字名字/ /身份号码身份号码身分标识是对象所身分标识是对象所独有的独有的,它能,它能把一个对象和另一个区分开把一个对象和另一个区分开状态状态: : 属性属性对象的状态包括了它对象的状态包括了它所有的特征所有的特征以及这些状态的当前值以及这些状态的当前值行为行为: : 操作操作/ /方法方法/ /通信通信对象的对象的协议协议定义了一个对象怎样行定义了一个对象怎样行动及作出反应,它包括了这个对象动及作出反应,它包括了这个对象的的所有的静态的所有的静态的和和动态动态的视图。的视图。名称名称属性属性操作操作什么不能成为对象?不能成为
17、对象的个体包括: 规程或过程 (例如:打印) 微小的属性或 值 (例如, 兰色, 名字, 10公斤) 时间(例如:10 秒是持续时间的数量化)第 33 页OO方法的主要优点 与人类习惯的思维方法一致 稳定性好 可重用性好 可维护性好第 34 页与人类习惯的思维方法一致 人的认识过程是从一般到特殊的渐进思维过程,是从“是什么?”开始,认识事物及其本质规律,主观随意性受到限制。 而传统方法是从“怎样做?”开始,到“做什么?”,反认识规律而动,主观随意性太多。第 35 页稳定性好 传统方法以“过程为中心”,完全基于功能的分析和分解。当功能需求发生变化时,将引起对软件结构整体的修改,这样的系统是不稳定
18、的。 OO方法以“对象为中心”,它是以对象模拟问题领域中的实体,以对象间的联系描述实体间的联系。在分析、研究对象及其属性的过程中根据其内在的规律建立求解模型。基于这种方法建立的软件系统,不管功能需求如何变化,其内在规律不变,因而不会引起软件系统结构的整体变化。因此是稳定的。第 36 页可重用性好 OO方法采用封装机制和信息隐藏机制,使其内部实现与外界完全隔离,具有较强的独立性(对象对外界而言,好象一个”黑匣子“)。较好地解决了“软件复杂性控制”问题。 OO方法中类的继承性是一种代码重用的有效途径。开发者在设计软件的过程中,将一些精心设计、测试过的代码不断加入到已有的类库中。而类库是可供共享的代
19、码库。 因此用OOP开发的软件具有较好的可重用性。第 37 页可维护性好稳定性较好 局部修改,不影响大局,错误不会传播;易修改 封装性和信息隐藏机制易于阅读、理解 符合人类习惯的思维方法,对原系统所做的修改,往往通过在原有类的基础上派生一些新类即可实现,易于贯通。易于测试和调试 派生类继承原有类的特性,只需测试新增加的特性即可。第 38 页5.面向对象程序设计语言OOPL OOPL有两个显著的特征: 抽象数据类型(ADT) 继承性 OOPL要提供: 特定的语法成分来保证和支持OOP;形式上要能够表现,语义上要能够处理; 继承性、多态性和动态链接机制,使得类和类库成为可重用的程序模块。第 39
20、页面向对象程序设计语言的发展史 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+等。
21、其它语言的OO版本有:Turbo PASCAL、Object PASCAL、Visual Basic等。第 40 页6.实体和对象 对象 客观世界中的实体均可以抽象为问题空间中的对象。可以将要研究的任何事物作为对象;大到航天飞机、宇宙天体、工厂、学校,小到一个学生、一本书。 对象可以是具体实体,还可以表示抽象实体,例如规则、算法、事件等。第 41 页对象(Object) 考虑问题的角度不同,对对象的定义也不同: 对象是具有相同状态的一组操作的集合 (从OOP的角度看) 对象是对属性值和操作的封装 (从信息模拟的角度看) 对象是存储在计算机中的一块私有存储区(具有数据、也有对数据进行操作的方法)
22、; (从存储的角度看) 对象:= ID,MS,DS,MI ID 标识符 MS 操作集合 DS 数据结构 MI 消息集合 (形式化定义)第 42 页对象的三个特征 标识 用来区别其它对象; 状态 用来描述对象的属性,用数据成员来表示; 行为 对对象的操作,用于改变对象的状态; 行为分两类: 自身所承受的操作 施加于其它对象的操作 例如,一个人叫王东,男,1.80M,68kg,会修电器,可教计算机课。描述如下: 对 象 名:王东 对象状态:性别:男 身高:1.80m 体重:68kg 对象功能: 回答身高、体重、性别 (属于自身所承受的操作) 修理电器、教计算机课程(属于施加于其它对象的操作)第 4
23、3 页对象的形象表示 可以将对象形象地比喻为一台录音机。 当外界对它施加了 一个操作(按下 按键),它就 去执行播放、录 音或停机。至于 内部如何实现这 写操作,对用户 来说根本无须知到;用户只要知道按哪个键,执行什么操作即可。 用户若要组装一台音响,只需买一个合适的音响设备接上即可,也根本不用去修改录音机的电子部件。第 44 页PlayRecord状态状态S S操作操作1、2、3的实现的实现操作操作1操作操作2操作操作3界面界面Stop 对象是封装了 数据和操作的黑匣子 与录音机类似,可以把对象看成是一个封装了数据和操作的黑匣子(实体)。数据描述了对象的状态属性表示对象的结构特征操作可以改变
24、对象的状态通过传递消息实现对象的操作第 45 页类(Class) 人们习惯于把有相似特征的事物归为一类,分类是人类认识客观世界的基本方法。在OO方法中,“类”就是对具有相同数据和操作的一组相似对象的定义。 例如,“人“类,可以是黑人、白人,可以是教师、工人等,他们具有相同的人类特征和行为特征。 类是OO技术中最重要的概念。OOP中所有的操作都可归结为对类的操作。第 46 页C+中对象类的定义举例 CLASS person Private: & 私有数据和操作 char name20; int age; cahr address40; char sex10; void PrintName( );
25、 viod PrintAge( ); void PrintAddress( ); void PrintSex( ); Public: & 公有操作 void Print( ) PrintName( ); PrintAge( ); PrintAddress( ); PrintSex( ); ;第 47 页结构特征结构特征数据成员数据成员行为特征行为特征 成员函数成员函数类层次 对象类描述的问题可以是一个点,也可以是一个方面。 类的层次结构称为类层次。处于上层的称为“父类”或 “基类”,处于下层的称为“子类”或“派生类”。 例如,“人”类是一个类层次; 工人、农民、学生、教师是 “人”类的派生类;
26、 中学生、大学生、 研究生是“学生” 类的派生类,研究 生、助教、 讲师、 教授是”教师“类 的派生类。第 48 页工人工人人人中学生中学生教师教师农民农民学生学生大学生大学生 研究生研究生 助教助教 讲师讲师教授教授父类父类派生类派生类“窗口”类举例 “窗口”类。第 49 页“窗口窗口”超类超类文本窗口文本窗口图形窗口图形窗口“窗口窗口”操作操作移动移动改变大小改变大小隐藏隐藏激活等激活等文本文本“窗口窗口”子类除了继承子类除了继承“窗口窗口”超类的所有超类的所有方法外,还具有自己的专门的操作方法外,还具有自己的专门的操作“编辑编辑”、“修改修改”。窗口窗口文本窗口文本窗口文本窗口文本窗口
27、图形窗口图形窗口操作:操作: 编辑编辑 修改修改操作:操作: 剪切剪切 画线画线 画圆画圆实例(Instance) 组成类的对象,都是该类的实例。 类与实例之间的关系,可以看成是抽象与具体的关系。类是多实例的综合抽象,而实例又是类的个体实物。 例如,“书”是一个对象类,而软件工程导论则是“书”类的一个实例。第 50 页 消息(Message) 在面向对象的技术中,消息是对象之间相互请求或相互协作的惟一途径。对象间的联系,只能通过传递消息来进行。对象也只能在收到消息时,才被激活。 前例中人的对象王东。他可以修理电器、讲计算机课;这是他为别人可提供的服务。但是,他什么时候修理电器,什么时候讲课,都
28、要得到其他对象的请求后才进行。第 51 页消息的定义 将操作送到目标对象的一种机制称为消息。它包括操作名的选择和传递,操作信息的变量有三个部分:n接收消息的对象n消息选择符n变元 例如,增加公司的操作:JFM(一汽集团公司) JFM .Add子公司( 奥迪1000 )第 52 页操作变量操作变量 操作名操作名 目标对象目标对象“Add子公司子公司”操作操作 将将奥迪奥迪1000加入到加入到JFM中中,当当JFM接到该消息后接到该消息后,就执行就执行“Add子公司子公司”的操作。的操作。消息的性质 同一对象可接收不同形式的多个消息,产生不同的响应;即 1个对象 M个消息 M个动作 相同形式的消息
29、可以送给不同的对象,所做出的响应可以是截然不同的;即 M个对象 1个消息 M个动作 消息的发送可以不考虑具体的接收者,对象可以响应消息,也可以对消息不予理会,对消息的响应并不是必须的。第 53 页公有消息和私有消息公有消息 在某个对象的一批消息中,由外界对象直接向它发送的消息,称为公有消息。私有消息 在某个对象的一批消息中,不对外发送,而是由对象自己向本身发送的消息,称为私有消息。 前面介绍的对象类person中,print( )是公有消息,其它(PrintName()、PrintAge()等)为私有消息。外界对象只能向person对象发送print()消息。第 54 页消息序列即接收或发送一
30、系列的消息。在OO系统中就是用消息序列来表述要解决的一系列问题的。例如,定义类person和类course如下:第 55 页Class person class course char Name20; char Cname20; int Age; int roomno; char Major20; char Ctime20; int Score;public: public: void print() cout NameAge /. MajorScore; void print() coutCname void printName()coutName; roomnoCtime; void pr
31、intAge()coutAge; ; void printMajor()coutMajor; void printScore()coutScore; 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个消息.事件(Event) 对象对外界的刺激能够作出反应是用事件和方法来模拟和
32、实现的。 当用户对某一对象有操作意图的时候,通过外部设备(鼠标、键盘等)输入必要的信息,从而给对象一个准确的刺激,使对象进行预定的反应行为。 刺激对象的方式很多;例如,通过鼠标、快捷键、控件等方式。第 56 页方法(Method) 对对象的处理称为方法或操作。它包括控制和操作过程。 方法描述了对象执行操作的算法、响应消息的方法,在C+中称为成员函数。 例如:ADD子公司( )Print()第 57 页属性(Attribute) 对象中的数据称为属性,它是对实体所具有的性质的抽象。C+中把属性称之为数据成员。 例如:char name20;int age;第 58 页类、对象和方法举例 第 59
33、 页类:教师类:教师对象:李伟对象:李伟实例抽象数据结构数据值属性: 姓名 年龄 单位 职称 工资状态: 李伟 25 计算机系 讲师 300操作: 调工资 评职称 受 聘行为: 调工资 评职称 受 聘执行操作抽象实例方法名(参数)抽象方法: 调工资 (计算公式) 评职称 (步骤、条件)方法体人事处向对象发消息李伟、调工资()二、面向对象方法的特点 OO方法的抽象技术 OO方法的封装技术 OO方法的继承机制第 60 页OO方法的抽象技术(Abstraction) 抽象是指将实际问题化简为计算机能处理和表示的形式。OO方法比其它已有方法从应用设计到解决方案有更高的抽象性和更好的对应性。主要原因是:
34、 对象具有极强的抽象表达能力 OO方法采用对象来表达一切事物。 对象实现了抽象的数据类型 用户可以根据实际问题的需要,自定义对象类,它使OO方法具有更强的解决复杂问题的能力。 规范化的抽象方法 OO方法的抽象技术更加接近于人类认识客观事物的思维方法。第 61 页OO方法的封装技术(Encapsulation) 封装是指将数据及对数据的操作集成在一起,形成一个能动的实体对象。用户不必知道对象行为的实现细节,只要根据对象提供的外部特征及接口来访问对象。 “封装性”是一种信息隐藏技术,其目的是将对象的设计者和对象的使用者分开。 对象的封装性体现在: 具有清楚的边界 对象的数据结构和操作限定与其中 具
35、有统一的外部接口(也称消息模式) 它描述了对象之间的相互作用、请求和响应 代码保护 对象内部的实现代码受到封装壳的保护,外界不能直接修改本对象的数据和代码。第 62 页STUDENT对象类举例 class student private: 私有功能:changemark只供 char *name; 对象自己使用 int mark; char *major ; void changemark(); public : 公有功能:getname和 char *getname( ); getmajor可供外界 char *getmajor(): 对象使用 protected: int getmark(
36、 ); 被保护功能:getmark,虽向外 ; 界公布,但只能 由为排生类对象提 供服务。第 63 页OO方法的继承机制(Inheritance) 继承所表达的是一种对象类之间的相互关系,它使得某类对象可以继承另一类对象的特征和能力。 继承性的含义是:自动共享对象类的全部特征的一种机制。它包括: 继承性 新的对象自动继承该类的特征; 继承传递性 子类自动继承其父类的特征;对多层类结构,下层子类可以继承其上各层父类的特征; 多重继承性 子类可以从它的多个父类中继承它们的特征。第 64 页继承性举例 在“人”类中,大学生可以继承“人”和“学生”的特征(继承传递);对于在职研究生既可以继承“学生”特征,又可以继承“教师”特征(多重继承)。 第 65 页人人身份证号:身份证号:姓名:姓名:学号:学号:校名校名学生学生大学生大学生专业:专业:班级:班级:身份证号:身份证号:xxxxxxx姓名:刘小明姓名:刘小明学生:学生:学生:学生:9601078校名:西安交通大学校名:西安交通大学大学生:大学生:专业:计算机专业:计算机班级:班级:962班班人:人:继承性的优点 能清晰体现相关类间的层次结构关系; 可大大增加代码的重用性; 通过增强一致性来减少模块间的接口和界面,大大增加可维护性; 是自动传播代码的有利工具 在一般类基础上构造、建立、扩充新类的最有效的手段。第 66 页