1、 面向对象程序设计面向对象程序设计(C+) 面向对象程序设计面向对象程序设计 Ma Jianhui3 3 课程概述课程概述 一、预备知识一、预备知识 二、课程目标二、课程目标 三、讲授方式三、讲授方式 四、课程内容四、课程内容 五、参考书目五、参考书目 六、考核形式六、考核形式 七、几点要求七、几点要求 面向对象程序设计面向对象程序设计 Ma Jianhui4 4 一、预备知识一、预备知识 预备知识预备知识 F熟练使用熟练使用C C语言语言 -尤其是结构体、指针、动态内存分配等内容。尤其是结构体、指针、动态内存分配等内容。 F深入理解结构化程序设计思想深入理解结构化程序设计思想 -什么是结构化
2、程序设计?什么是结构化程序设计? -其优、缺点有哪些其优、缺点有哪些? ? 面向对象程序设计面向对象程序设计 Ma Jianhui5 5 二、课程目标二、课程目标 F理解理解“对象技术对象技术”(Object TechnologyObject Technology)和)和 “面向对象程序设计面向对象程序设计”(Object-oriented Object-oriented Programming)Programming)的基本概念和编程思想的基本概念和编程思想 - - 数据抽象和封装数据抽象和封装 - - 继承性继承性 - - 多态性多态性 A基本熟练掌握一门基本熟练掌握一门OOPOOP语言语
3、言 - C+- C+ B探讨探讨C+C+中的某些具体问题中的某些具体问题 面向对象程序设计面向对象程序设计 Ma Jianhui6 6 三、教学方式三、教学方式 总学时:总学时:40/3040/30 EBCDIC ARRAY E 0:11; REPLACE E BY HELLO WORLD!; WHILE TRUE DO BEGIN WRITE (F, *, E); END; END. IDENTIFICATION DIVISION. PROGRAM-ID. HELLO-WORLD. ENVIRONMENT DIVISION. DATA DIVISION. PROCEDURE DIVISION
4、. DISPLAY Hello, world!. STOP RUN. 例3: COBOL 缺点:缺点: - 程序控制复杂,程序控制复杂, - 过于依赖程序员的经验和技巧,过于依赖程序员的经验和技巧, - 难读、难改、难移植难读、难改、难移植 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉2222 1.1 1.1 程序设计方法的发展历程程序设计方法的发展历程(3)(3) u70年代早期:结构化的过程式程序设计年代早期:结构化的过程式程序设计 (如:如:C,Pascal) 例例4: C语言语言 #include int max(int,int); / m
5、ax模块 int main(void) int i; i=max(10,20); printf(Hello, world!n); return 0; 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉2323 1.1 1.1 程序设计方法的发展历程程序设计方法的发展历程(3(3续续) ) - 分解原则、模块独立原分解原则、模块独立原 则、编码结构化原则则、编码结构化原则 - 最大的软件:最大的软件:385万行万行 (美国导弹预警系统)(美国导弹预警系统) - 大型软件难以维护、难大型软件难以维护、难 以修改和移植。以修改和移植。 面向对象程序设计面向对象
6、程序设计 中国科技大学计算机系中国科技大学计算机系 马马 建辉建辉 2424 1.1 1.1 程序设计方法的发展历程程序设计方法的发展历程(4)(4) u7070年代中后期:软件工程年代中后期:软件工程 - - 有成套的管理方法有成套的管理方法 - - 强调模块性、抽象强调模块性、抽象 性、易维护、可修性、易维护、可修 改、可移植改、可移植 - - 软件工程原则:软件工程原则:将软将软 件件“做什么做什么”和和“怎怎 么么 做做”分离分离 - - 最大的软件:最大的软件:40004000万万 行(美国航天飞机监行(美国航天飞机监 控系统)控系统) “需求分析”处于软 件工程的核心地位。一旦 需
7、求发生变更,工作量是 巨大的! 因此,描述需求的方 法是关键! 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉2626 现实情况怎么样现实情况怎么样? 一方面,各种程序设计方法学被提出来一方面,各种程序设计方法学被提出来 G G 大得可怕大得可怕, ,却并不好用!却并不好用! A A 看上去好像我们要花绝大多数的时间写文档,看上去好像我们要花绝大多数的时间写文档, 以至于没有时间编写程序以至于没有时间编写程序 另一方面,软件危机没有得到根本上的解决另一方面,软件危机没有得到根本上的解决 B B 超过超过50%50%的大型软件项目以失败告终!的大型软件
8、项目以失败告终! Why ?Why ? 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉2727 Where are we? 程序设计方法的发展历程程序设计方法的发展历程 如何评价软件的质量?如何评价软件的质量? 过程式程序设计的局限性过程式程序设计的局限性 从过程式转变到面向对象从过程式转变到面向对象 I I 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉2828 1.2.1 如何评价软件的质量?如何评价软件的质量? n软件的内部质量软件的内部质量 正确性正确性 健壮性健壮性 可扩充性可扩充性 可复用性可复
9、用性 可读性可读性 可维护性可维护性 其他(兼容性,效率,可移植性其他(兼容性,效率,可移植性) FF 但是但是事实上事实上, ,这些方面正是结构化程序设计和软件这些方面正是结构化程序设计和软件 工程追求的目标。工程追求的目标。 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉3030 1.2.2 过程式程序设计本身的局限性过程式程序设计本身的局限性 过程式程序设计是一种过程式程序设计是一种以功能为中心以功能为中心、基于功能分解的、基于功能分解的 程序设计方法。程序设计方法。 一个过程式程序由一些子程序构成,每个子程序对应一一个过程式程序由一些子程序构
10、成,每个子程序对应一 个子功能,它实现了功能抽象。子程序描述了一系列的操个子功能,它实现了功能抽象。子程序描述了一系列的操 作,它是操作的封装体。作,它是操作的封装体。 过程式程序的执行过程体现为一系列的子程序调用。在过程式程序的执行过程体现为一系列的子程序调用。在 过程式程序中,数据处于过程式程序中,数据处于附属地位附属地位,它,它独立于子程序独立于子程序,在,在 子程序调用时作为参数传给子程序使用。子程序调用时作为参数传给子程序使用。 下面的经典公式刻划了过程式程序设计的本质特征:下面的经典公式刻划了过程式程序设计的本质特征: 程序程序 = = 算法算法 + + 数据结构数据结构 面向对象
11、程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉3131 例例: 自我介绍自我介绍, whoami 定义一个定义一个结构体结构体PERSON,PERSON, 包含成员包含成员name;name;生成一生成一 个个结构体变量结构体变量, ,调用调用函函 数数设置他的姓名设置他的姓名; ;调用调用 函数函数whoamiwhoami打印他的姓打印他的姓 名名. . struct Person char name20; ; ; void whoami(struct Person); void main() struct Person mike; strcpy(mike
12、.name, “mike”); whoami(mike); void whoami(struct Person p) printf(“%s”, p.name); 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉3232 1.2.2 过程式程序设计本身的局限性过程式程序设计本身的局限性(续续) 程序员只能按过程式程序设计的逻辑结构程序员只能按过程式程序设计的逻辑结构( (而不而不 是按问题本身的逻辑结构是按问题本身的逻辑结构) )去描述问题去描述问题; ;因此因此, ,问题的问题的 求解实际上求解实际上是一种过程的抽象。是一种过程的抽象。 也就是说也就是
13、说, ,程序员必须在实际问题模型(问题程序员必须在实际问题模型(问题 空间)和机器模型(解空间)之间进行空间)和机器模型(解空间)之间进行转换转换。 然而,这种转换并不是线性的。因此,当实际然而,这种转换并不是线性的。因此,当实际 问题发生改变时,程序中各种成分也随之改变。其问题发生改变时,程序中各种成分也随之改变。其 中:中: o功能:很容易变功能:很容易变 o过程执行顺序:很容易变过程执行顺序:很容易变 o接口:极容易变接口:极容易变 o数据:极容易变数据:极容易变 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉3333 Where are we
14、? 程序设计方法的发展程序设计方法的发展 评价软件质量的因素评价软件质量的因素 结构化程序设计的局限性结构化程序设计的局限性 从过程式转变到面向对象从过程式转变到面向对象I 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉3434 1.3 从过程式转变到面向对象从过程式转变到面向对象 n结构体结构体+过程(易变)过程(易变)对象(稳定)对象(稳定) 对象:把问题空间中的事物在解空间中的表示称为对象:把问题空间中的事物在解空间中的表示称为 “对象对象”。 n基于过程基于过程基于对象基于对象 n按计算机的结构建模按计算机的结构建模对问题本身建模对问题本身建
15、模 也就是说:也就是说: 当我们读描述解决方案的代码时,也就是在读当我们读描述解决方案的代码时,也就是在读 表达该问题的文字!表达该问题的文字! OOP允许程序员用问题本身的术语来描述问题,允许程序员用问题本身的术语来描述问题, 而不是用而不是用(要运行解决方案的要运行解决方案的)计算机的术语来描述计算机的术语来描述 问题。问题。 每个对象看上去就象一台小计算机,它有状态,每个对象看上去就象一台小计算机,它有状态, 有可以执行的运算。有可以执行的运算。 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉3535 1.3.1 例例: 自我介绍自我介绍, w
16、hoami OOP(C+):OOP(C+): n定义一个定义一个类类PERSON,PERSON,包包 含含属性属性namename和和行为行为 whoami;whoami;生成一个名为生成一个名为 mikemike的的对象对象(mike)(mike); ;给给 mikemike发送一个发送一个消息消息,让,让 他他自己自己通过行为通过行为whoamiwhoami 说出说出他的名字他的名字. . class PERSON public: char name20; void whoami()coutname; ; / ; void main() PERSON mike(“mike”); mike.
17、whoami(); 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉3636 1.3.2 面向对象程序设计的编程思想面向对象程序设计的编程思想 对象式程序设计是一种对象式程序设计是一种以对象为中心以对象为中心、基于数据抽、基于数据抽 象的程序设计方法。象的程序设计方法。 对象式程序设计通常称为对象式程序设计通常称为面向对象程序设计面向对象程序设计。一个。一个 面向对象程序由一些对象构成,对象是由一些数据及面向对象程序由一些对象构成,对象是由一些数据及 可施于这些数据上的操作所构成的可施于这些数据上的操作所构成的封装体封装体。对象的特。对象的特 征由相应
18、的类来描述,一个类可以从其它的类继承。征由相应的类来描述,一个类可以从其它的类继承。 面向对象程序的执行过程体现为各个对象之间相互面向对象程序的执行过程体现为各个对象之间相互 发送和处理发送和处理消息消息. .面向对象程序可简单地表示成下面的面向对象程序可简单地表示成下面的 公式:公式: 程序程序 = = 对象对象/ /类类 + + 对象对象/ /类类 + + 对象对象/ /类类 = = 数据数据 + + 操作操作 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉3737 1.3.3 对象技术对象技术(OT)的年代表的年代表 面向对象程序设计面向对象程
19、序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉3838 1.4 对象技术对象技术(OT)的年代表的年代表(续续) Simula:Simula: SmalltalkSmalltalk C+: C+: 在兼容原有在兼容原有C C语言的基础上,进一步加入支持面语言的基础上,进一步加入支持面 向对象技术的要素,如数据抽象、继承、多态等。向对象技术的要素,如数据抽象、继承、多态等。 Java:Java: UML:UML: 2.2.面向对象程序设计概述面向对象程序设计概述 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉4040 Where ar
20、e we? 什么是对象什么是对象 什么是类什么是类 OO的四个基本原理的四个基本原理 多态性和泛化多态性和泛化 I 2.1 什么是对象?什么是对象? n对象的定义对象的定义 n对象的标识对象的标识 n对象的状态对象的状态 n对象的操作对象的操作 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉4242 2.1.1 对象的非正式定义对象的非正式定义 非正式地,一个对象用来描述一个实体非正式地,一个对象用来描述一个实体(entity),这,这 个实体可以使物理实体、概念上的实体或者是软件。个实体可以使物理实体、概念上的实体或者是软件。 physical e
21、ntity: 卡车卡车 Conceptual entity :化学反应过程化学反应过程 Software entity : 链表链表 面向对象程序设计面向对象程序设计 中国科技大学计算机系中国科技大学计算机系 马马 建辉建辉 4343 2.1.2 对象的一个更正式的定义对象的一个更正式的定义 对象,是现实世界中某个实体对象,是现实世界中某个实体 在计算机逻辑中的映射和描述。在计算机逻辑中的映射和描述。 对象具有标识对象具有标识( (identityidentity) ),在,在 一个明确的边界一个明确的边界( (boundaryboundary) )里封装里封装 了状态了状态( (states
22、tate) )和行为和行为( (behaviorbehavior) )。 State is represented byState is represented by attributes and relationships.attributes and relationships. Behavior is representedBehavior is represented by operations, methods,by operations, methods, and state machines.and state machines. Attributes(属性) Operation
23、s(操作) 面向对象程序设计面向对象程序设计 中国科技大学计算机系中国科技大学计算机系 马马 建辉建辉 4444 2.1.3 对象的标识对象的标识(Identity) 每一个对象都有一个唯一的标识,即使它每一个对象都有一个唯一的标识,即使它 的状态跟其他对象相同。的状态跟其他对象相同。 Professor “J Clark” teaches Biology Professor “J Clark” teaches Biology Identity: ProfJClark_f ProfJClark_m 面向对象程序设计面向对象程序设计 中国科技大学计算机系中国科技大学计算机系 马马 建辉建辉 45
24、45 2.1.4 对象的状态对象的状态(state) 状态状态(state)(state)描述的是对象在不同时刻所表现出来的描述的是对象在不同时刻所表现出来的 一种状况一种状况(condition)(condition)或情形或情形(situation): (situation): 例如,满足某例如,满足某 种条件,在做某件事情或者等待某个事件的发生。种条件,在做某件事情或者等待某个事件的发生。 通常对象的状态随时间的变化而改变。通常对象的状态随时间的变化而改变。 Discipline(学科): Finance(金融学) Maximum Course Load(最大课程负担): 3 class
25、es (终身职位) Professor Clark 面向对象程序设计面向对象程序设计 中国科技大学计算机系中国科技大学计算机系 马马 建辉建辉 4646 2.1.5 对象的行为对象的行为(Behavior) 对象的行为确定了一个对象如何行动对象的行为确定了一个对象如何行动 (acts)(acts),如何对事件进行响应,如何对事件进行响应(reacts)(reacts)。 Professor Clarks behavior Submit Final Grades Accept Course Offering Take Sabbatical(休假年) 面向对象程序设计面向对象程序设计 中国科技中国
26、科技 大学计算机系大学计算机系 马建辉马建辉4747 Where are we? 什么是对象?什么是对象? 什么是类什么是类 OO的四个基本原理的四个基本原理 多态性和泛化多态性和泛化 I 2.2 什么是类?什么是类? n类的定义类的定义 n类的属性类的属性 n类的操作类的操作 n举例举例 n类和对象的关系类和对象的关系 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉4949 2.2 类类(Class) A class(类类) is a description of a set of objects that share the same attri
27、butes(属性属性), operations(操作操作), relationships(关系关系), and semantics(语义语义). nAn object is an instance(实例实例) of a class. A class is an abstraction(抽象抽象) in that it nEmphasizes relevant characteristics. (强调相关的本质特征强调相关的本质特征) nSuppresses other characteristics. (舍去其他的无关特征舍去其他的无关特征) 面向对象程序设计面向对象程序设计 中国科技大学计算
28、机系中国科技大学计算机系 马马 建辉建辉 5050 2.2.1 类的属性类的属性(Attributes) An attribute is a named property of a class that describes the range of values that instances of the property may hold. A class may have any number of attributes or no attributes at all. 属性 面向对象程序设计面向对象程序设计 中国科技大学计算机系中国科技大学计算机系 马马 建辉建辉 5151 2.2.2
29、类的操作类的操作(Operation) A service that can be requested from an object to effect behavior. An operation has a signature, which may restrict the actual parameters that are possible. (操作是可以被另一个对象请求执行而实现某种行为的服务。一个操作有一个签名,该签名可以对实际参数进行约束。操作是可以被另一个对象请求执行而实现某种行为的服务。一个操作有一个签名,该签名可以对实际参数进行约束。) nA class may have
30、any number of operations or none at all. 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉5252 2.2.3 类类course (花名册) 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉5353 2.2.4 类的类的UML表示表示 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉5454 2.2.5 类的类的UML表示的组成部分表示的组成部分 A class has three sections: The class name
31、 (类名类名) The structure (属性属性) The behavior (操作操作) 面向对象程序设计面向对象程序设计 中国科技大学计算机系中国科技大学计算机系 马马 建辉建辉 5555 2.2.6 Objects 和和Classes的关系的关系 A class is an abstract definition of an object. (类是对象的抽象定义类是对象的抽象定义) It defines the structure and behavior of each object in the class. (定义类中每一个对象的结构和行为定义类中每一个对象的结构和行为) I
32、t serves as a template for creating objects. (类是创建对象的模板类是创建对象的模板) Classes are not collections of objects. 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉5656 2.2.6 Objects 和和Classes的关系的关系(例例) Professor Meijer Professor Allen 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉5757 2.2.6.1 类和对象中的属性类和对象中的属性 面向
33、对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉5858 Where are we? 什么是对象?什么是对象? 什么是类?什么是类? OO的四个基本原理的四个基本原理 多态性和泛化多态性和泛化 I 面向对象程序设计面向对象程序设计 中国科技大学计算机系中国科技大学计算机系 马马 建辉建辉 5959 2.3 面向对象的四个基本原理面向对象的四个基本原理 2.3.1 什么是抽象什么是抽象(Abstraction) 面向对象程序设计面向对象程序设计 中国科技大学计算机系中国科技大学计算机系 马马 建辉建辉 6161 2.3.1 什么是抽象什么是抽象(Abstra
34、ction) The essential characteristics of an entity that distinguishes it from all other kinds of entities. (区别于其他实体的区别于其他实体的本质特征本质特征) Defines a boundary relative to the perspective of the viewer. (定义一个相对于观察者的角度的定义一个相对于观察者的角度的边界边界) Is not a concrete manifestation, denotes the ideal essence of somethin
35、g. (不是一种有形的表现,表示的是事物的本质不是一种有形的表现,表示的是事物的本质) 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉6262 2.3.1.1 例:抽象例:抽象 2.3.2 什么是封装什么是封装(Encapsulation) 面向对象程序设计面向对象程序设计 中国科技大学计算机系中国科技大学计算机系 马马 建辉建辉 6464 2.3.2 什么是封装什么是封装(Encapsulation) Hides implementation from clients. (封装把具体实现隐藏起来,对客户使用者不可见。增封装把具体实现隐藏起来,对客户
36、使用者不可见。增 加了实现的加了实现的“弹性弹性”-resiliency) Clients depend on interface(接口接口). clients 面向对象程序设计面向对象程序设计 中国科技大学计算机系中国科技大学计算机系 马马 建辉建辉 6565 2.3.2.1 对象的接口对象的接口(Interface) 对象的接口(Interface)规定我们能向特定 的对象发出什么请求,而具体的实现(属性)则被 隐藏起来了。 Class TV public: void turn_on() ; void turn_off() ; void volume_up() ; void volume_
37、down() ; void change_channel(int n) ; private: ; / 不能使用 ; 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉6666 2.3.2.2 封装的本质:隐藏实现封装的本质:隐藏实现 通过封装,使得程序员分为:通过封装,使得程序员分为: 类创建者:专注于实现类类创建者:专注于实现类 客户程序员:使用类的用户,专注于使用类客户程序员:使用类的用户,专注于使用类 优点:优点: 避免客户程序员插手他们不应当接触的部分。避免客户程序员插手他们不应当接触的部分。 (通过通过public, private,prote
38、cted控制客户的访问控制客户的访问) 实现者可以随时修改被隐藏的内部工作方式,而不实现者可以随时修改被隐藏的内部工作方式,而不 影响客户程序员影响客户程序员(的代码的代码)。 2.3.3 什么是模块性什么是模块性(Modularity) 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉6868 2.3.3 什么是模块性什么是模块性(Modularity) Breaks up something complex into manageable pieces. (把一个复杂的事物分成易于把一个复杂的事物分成易于 处理的碎片处理的碎片) Helps peo
39、ple understand complex systems. (帮助人们理解复杂的系统帮助人们理解复杂的系统) 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉6969 例:模块性例:模块性大问题分解成小问题大问题分解成小问题 (选课系统) (缴费系统) (课程编目系统) (学生管理系统) 2.3.4 什么是层次什么是层次(Hierarchy) 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉7171 2.3.4 什么是层次什么是层次(Hierarchy) 提高抽象程度 降低抽象程度 处在层次中同一层(lev
40、el)的元素,也应该处在抽象的同一层。 (资产) (有价证券) (债券) (不动产) 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉7272 Where are we? 什么是对象?什么是对象? OO的四个基本原理的四个基本原理 什么是类什么是类 多态性和泛化多态性和泛化 I 面向对象程序设计面向对象程序设计 中国科技大学计算机系中国科技大学计算机系 马马 建辉建辉 7373 2.4.1 多态性多态性(Polymorphism) The ability to hide many different implementations behind a s
41、ingle interface. 多态性是能够把多种不同的实现隐藏在一个单一多态性是能够把多种不同的实现隐藏在一个单一 的接口后面的能力。的接口后面的能力。 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉7474 2.4.1.1 多态性:例多态性:例1 面向对象程序设计面向对象程序设计 中国科技大学计算机系中国科技大学计算机系 马马 建辉建辉 7575 2.4.1.2 多态性:例多态性:例2 What happens when move() is called? Bird move() Goose move() Penguin move() Bird
42、Controller reLocate() 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉7676 2.4.1.3 多态性的实现机制多态性的实现机制 Shape CircleSquareTriangle Upcasting u 晚绑定 vs 早绑定 u Upcasting vs Downcasting 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉7777 2.4.2 泛化泛化(Generalization) A relationship among classes where one class shar
43、es the structure and/or behavior of one or more classes. (泛化是类与类之间的这样一种关系:其中一个类共泛化是类与类之间的这样一种关系:其中一个类共 享一个或多个其它类的结构和行为享一个或多个其它类的结构和行为) Defines a hierarchy of abstractions in which a subclass inherits from one or more super classes. (定义了之类继承父类的抽象层次定义了之类继承父类的抽象层次) nSingle inheritance.(单继承单继承) nMultipl
44、e inheritance. (多继承多继承) Is an “is a kind of” relationship. (是一种是一种“同一类同一类”的关系的关系) 面向对象程序设计面向对象程序设计 中国科技大学计算机系中国科技大学计算机系 马马 建辉建辉 7878 2.4.3 继承:重用接口继承:重用接口 通过继承,可以创建一个与已存在的类(基类)通过继承,可以创建一个与已存在的类(基类) 具有类似功能的类(派生类)。具有类似功能的类(派生类)。 - 派生类包含了基类的所有成员;派生类包含了基类的所有成员; - 派生类复制了基类的接口,因此派生类派生类复制了基类的接口,因此派生类 与基类是相同
45、类型的。与基类是相同类型的。 - 可以对派生类加以扩充:可以对派生类加以扩充: 方法一:添加全新的函数方法一:添加全新的函数 (is-like-ais-like-a) 方法二:只改变基类中函数的行为,即方法二:只改变基类中函数的行为,即“重载重载” 函数。(函数。(is-ais-a) 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉7979 2.4.3.1 单继承:例单继承:例1 Shape draw() erase() move() getColor() setColor() CircleSquareTriangle 基类Shape含有大小、颜色位置
46、等属性及图示的方法。 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉8080 2.4.3.2 单继承:例单继承:例2 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉8181 Is-like-a vs is-a-kind-of Shape draw() erase() move() getColor() setColor() CircleSquareTriangle FlipVertical() FlipHorizontal() Shape draw() erase() move() getColor() s
47、etColor() Triangle draw() erase() Circle draw() erase() Square draw() erase() 参见教材第 页 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉8282 2.4.3.3 多继承多继承(Multiple Inheritance) Use multiple inheritance only when needed and always with caution! 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉8383 2.4.3.4 继承
48、的本质继承的本质 A subclass inherits its parents attributes, operations, and relationships. A subclass may: nAdd additional attributes, operations,relationships. nRedefine inherited operations. (Use caution!) Common attributes, operations, and/or relationships are shown at the highest applicable level in th
49、e hierarchy. Inheritance leverages the similarities among classes. 继承提高了类与类之间的相似性。继承提高了类与类之间的相似性。 面向对象程序设计面向对象程序设计 中国科技中国科技 大学计算机系大学计算机系 马建辉马建辉8484 3. 小结小结(Review) What is an object? What are the four principles of object orientation? Describe each. What is a class? How are classes and objects relat
50、ed? What is an attribute? An operation? Define polymorphism. Provide an example of polymorphism. What is generalization? 第二章第二章 C+初探初探:创建和使用对象创建和使用对象 面向对象程序设计面向对象程序设计(C+) This chapter explains key differences between C and C+, and takes you through three essential C+ features: nType safety (类型安全性类型安