面向对象程序设计概述56309_第1页
面向对象程序设计概述56309_第2页
面向对象程序设计概述56309_第3页
面向对象程序设计概述56309_第4页
面向对象程序设计概述56309_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第1章章 面向对象程序设计面向对象程序设计 概述概述 内容提要内容提要 1 面向对象程序设计面向对象程序设计* n面向对象编程面向对象编程 是一种以对象为中心的程序设计范型。 也可以说是一套概念和想法,它与面向过 程程序设计相对应,是一种用计算机程序 来描述实际问题的思路。 n面向过程编程面向过程编程 它是早期的程序设计范型,它考察整个 设计过程,以功能分解为中心。 1 面向对象程序设计(续)面向对象程序设计(续) n面向过程的特征面向过程的特征 早期程序设计认为: 程序 = 数据结构 + 算法 这个公式贯穿于整个程序设计的始终, 无论程序是系统程序还是模块程序。 n面向过程的不足面向过程的

2、不足 强调功能分解,为了实现功能,有时数 据结构屈从于算法,结果造成数据结构和 过程的分离。(大型程序难以控制) 1 面向对象程序设计(续)面向对象程序设计(续) n面向对象的特征面向对象的特征 OO(Object-Oriented)程序设计认为: 程序 = 对象 + 消息 这个公式表明面向对象的程序以对象为程 序组成单位,以消息为动力(驱动)。 n面向对象的好处面向对象的好处 以对象为单位组织程序,更接近人思维 方式,OO借鉴了认知论的观点。 1 面向对象程序设计(续)面向对象程序设计(续) n面向对象和面向过程面向对象和面向过程 两者不是对立的,面向对象是面向过程 发展到一定阶段的产物,是

3、程序设计的高 级阶段,面向对象以面向过程为基础。 n软件历史软件历史 硬件高速发展软件发展软件危 机结构化程序设计软件工程 面向对象技术 1 面向对象程序设计(续)面向对象程序设计(续) n程序可分为系统程序和模块程序,现在的 程序已前者居多。 (系统)程序 = 对象 + + 消息 (模块)程序 数据结构 + 相应算法 程序=数据结构+算法 在较小的模块程序层在较小的模块程序层 面,还使用这个公式面,还使用这个公式 2 对象和类对象和类* n对象的概念对象的概念 问题空间元素在方法空间的表示称为对 象,它是现实世界的实体或概念在计算机 逻辑中的表示。(程序中的变量)(程序中的变量) n现实对象

4、现实对象 现实世界的实体;人们 认识世界的基本单位。 2 对象和类(续)对象和类(续) n对象的组成对象的组成 对象对象 静态特征静态特征属性,一般属性,一般 用数据(结构)来体现。用数据(结构)来体现。 动态行为动态行为方法,基于方法,基于 数据的函数或过程。数据的函数或过程。 属性和方法是程序设计方法学中的术语属性和方法是程序设计方法学中的术语 2 对象和类(续)对象和类(续) n对象有如下的特性对象有如下的特性 1 每个对象必须有一个名字以区别于其他对象。 2 有属性(或叫状态)来描述对象的某些特征。 3 有一组操作,每一操作决定对象的一种行为。 4 对象的整体性:把属性和操作放在一起,

5、这里 的操作要与属性相关,通过使用名字就可以使 用整个对象。 2 对象和类(续)对象和类(续) n对象的例子对象的例子教师黎明是一个对象教师黎明是一个对象 对象名:对象名:黎明黎明 对象的属性:对象的属性: 年龄:年龄:30 学历:博士学历:博士 职称:教授职称:教授 对象的操作:对象的操作: 进修进修 教授课程教授课程 说自己的年龄说自己的年龄 struct Teacher int age; char* degree; char* title; public: void Study( ); void Teach( ); int TellAge( ); ; 2 对象和类(续)对象和类(续) n

6、对象的例子对象的例子教师黎明是一个对象教师黎明是一个对象 Teacher LiMing; /对象(名)对象(名) LiMing.age = 30; LiMing.degree = “doctor”; LiMing.title = “professor”; 2 对象和类(续)对象和类(续) n类的概念类的概念 类是一组具有相同属性和行为特征的对 象的抽象描述。 n类和对象的关系类和对象的关系 抽象和具体的关系,类是多个对象的归 纳和总结(分类的结果),对象又是类的 个体实物,一个对象就是类的一个实例。 2 对象和类(续)对象和类(续) n类是对象的类是对象的“模板模板”或者或者“蓝图蓝图” ,同

7、时同时 定义了对象的特性和操作定义了对象的特性和操作 123 245 12 245 对象对象1 类类 对象对象2 2 对象和类(续)对象和类(续) n类和对象类和对象类型和变量类型和变量 类和对象实际上就是C的数据类型和变量, 只不过在C+中,统称为类和对象。 n对象的状态对象的状态 类没有具体的值,对象才有,对象的这些 具体的值称为对象的状态。 类类 对象对象 实例化实例化 声明声明 2 对象和类(续)对象和类(续) n对象的状态对象的状态 名称名称LiMing age30 degreedoctor titleprofessor Teacher LiMing; LiMing.age = 30

8、; LiMing.degree = “doctor”; LiMing.title = “professor”; 2 对象和类(续)对象和类(续) n类的结构类的结构 类的结构和对象的组成是严格对应的! 类中的成分有两种:数据成员和成员函数。 类类 数据成员数据成员对应对象的对应对象的 属性属性,也叫做,也叫做成员变量成员变量。 成员函数成员函数对应对象的对应对象的 方法方法,是类功能的载体。,是类功能的载体。 2 对象和类(续)对象和类(续) n类的结构实例类的结构实例 数据成员数据成员 成员函数成员函数 class Teacher int age; char* degree; char* t

9、itle; public: void Study( ); void Teach( ); int TellAge( ); ; 2 对象和类(续)对象和类(续) n*类和对象的作用时期类和对象的作用时期 类只在源程序的代码中出现,它是编译 器生成对象的说明书,并不会在运行的程 序中出现 ,即类只在编译时存在; 对象作为类的实例是在运行的程序中出 现,并占有内存空间,它是程序运行时存 在的实体,是机器指令操作的内容。 2 对象和类(续)对象和类(续) n对象的交互对象的交互 现实世界的对象并非孤立的实体,它们现实世界的对象并非孤立的实体,它们 间存在着间存在着联系联系,从而构成不同的系统。,从而构成

10、不同的系统。 面向对象程序设计中,对象的联系我们面向对象程序设计中,对象的联系我们 称为称为对象的交互对象的交互。 n对象交互的实现对象交互的实现 在在OOP中,对象交互的实现要用到一个中,对象交互的实现要用到一个 重要的工具:重要的工具:消息消息。 2 对象和类(续)对象和类(续) n对象交互图示对象交互图示 n消息消息 对象的交互中介(请求或通知) n消息传递消息传递 面向对象的程序设计中对象协作机制 对象对象1 对象对象2 消息消息 2 对象和类(续)对象和类(续) n消息传递与调用消息传递与调用 实际上,对象的消息传递对应于程序设计实际上,对象的消息传递对应于程序设计 中的中的过程(函

11、数)调用过程(函数)调用。 比如:键盘对象的按键消息传给显示对象比如:键盘对象的按键消息传给显示对象 n消息的发送和接收消息的发送和接收 发送消息的对象为发送消息的对象为发送者发送者或或请求者请求者,接收,接收 消息的目标对象为消息的目标对象为接收者接收者或或服务者服务者(有处(有处 理者消息的能力)。理者消息的能力)。 2 对象和类(续)对象和类(续) n消息的处理简单模型消息的处理简单模型 消息的处理就是过程(函数)的消息的处理就是过程(函数)的执行执行。 某过程某过程 Teacher n; / n.Study(实参实参); / return 0; ; 代码后半部分 消息传递给消息传递给n

12、 代码前半部分 某过程 代码在中 对象对象n n的内容的内容 / /执行代码执行代码 Study(Study(参数参数) ) 2 对象和类(续)对象和类(续) n消息的内容组成消息的内容组成 包含有接收者的名字,请求的方法,一个 或多个参数。 n消息机制可以扩充的很复杂消息机制可以扩充的很复杂 n消息的性质消息的性质 1、一消息可以发给多个对象 2、一对象可以接受多个消息 3、对象可以响应消息,也可不响应 2 对象和类(续)对象和类(续) n类的确定和划分类的确定和划分 OOP要将系统划分为对象,即分类。但 在现实中,问题域的分类很复杂,而且依 赖于人的认知水平和系统设计经验,在后 续课程“软

13、件工程”中我们将要学习到具 体的方法。 3 数据的抽象与封装数据的抽象与封装 n面向对象系统最突出的特征面向对象系统最突出的特征 封装性、继承性、多态性(三个特性) n封装的概念和数据抽象(类)密切相关封装的概念和数据抽象(类)密切相关 n封装在现实中的例子 人们使用录音机,只要知道键的功能即 可(放音、录音、停止、倒带等),不需 要知道这些功能是如何实现的,也不需要 知道其内部电路或构造。 3 数据的抽象与封装(续)数据的抽象与封装(续) n抽象抽象从特定的实例从特定的实例抽取共同性质形成抽取共同性质形成 概念的过程概念的过程。抽象是对系统简化的描述或 规范说明,它强调了系统中一部分细节和

14、特性(用户关心的),而忽略了其他部分。 n封装封装将数据结构和操作组成一个实体将数据结构和操作组成一个实体 的过程。的过程。其中的数据和操作均是我们所需 要的部分(数据的抽象)。 n隐藏隐藏封装的结果实现了数据和操作的封装的结果实现了数据和操作的 隐藏(隐藏细节),用户知道功能隐藏(隐藏细节),用户知道功能WHATWHAT, 不知道如何实现不知道如何实现HOWHOW。 3 数据的抽象与封装(续)数据的抽象与封装(续) n抽象与封装的关系抽象与封装的关系 抽象与封装是互补的。好的抽象有利于 封装,封装的实体则帮助维护抽象的完整 性。重要的是抽象先于封装。 n通过封装来增强抽象的功能通过封装来增强

15、抽象的功能 用户看到的用户看到的ATM 封装了内容封装了内容 /验证语言验证语言 /验证密码验证密码 /验证账户验证账户 /更改账户更改账户 3 数据的抽象与封装(续)数据的抽象与封装(续) n对象的封装对象的封装 1 封装后的对象有一个边界,对象的某 些数据和函数等细节被封装在边界之内。 2 有一个描述与其他对象相互作用的接 口,该接口说明了消息传递的方法。 3 对象内部的数据和代码受到保护,其 他对象不能直接修改。 3 数据的抽象与封装(续)数据的抽象与封装(续) n接口接口与其他对象与其他对象交互的方法集交互的方法集 封装后能让用户与对象细节分离,用户 只需知道功能即可,接口就是功能的载

16、体。 TellAge Study Teach age degree title 用户用户 打交道打交道 接口接口 3 数据的抽象与封装(续)数据的抽象与封装(续) n对象的特性对象的特性 对象是面向对象程序设计的最重要的细胞 和基石,它有如下的特性: 1 封装性封装性隐藏内部细节 2 模块独立性模块独立性实体的抽象(类) 3 动态连接性动态连接性消息机制 4 易维护性易维护性更新在边界内 4 继承继承* n继承继承类间的承袭关系类间的承袭关系 继承所表达的是对象类之间的相互关系, 这种关系让某类对象可以使用另外一类对象 的特征和能力。 父母父母 孩子孩子 继承继承 4 继承(续)继承(续) n

17、继承类之间的几个特性继承类之间的几个特性 1 类间具有共享的特征(数据和代码共享) 2 类间具有差别和新增部分(非共享内容) 3 类间具有层次结构 n假如有类B继承类A,则类B 的对象具有类A的一切特征, 此时,类A为基类或父类或 超类,类B为派生类或子类 基类基类 派生类派生类 继承继承 4 继承(续)继承(续) n继承机制的优点继承机制的优点 1 代码重用,避免重复开发 2 增强一致性,统一的处理接口和界面 3 代码进化,高效的扩充功能 n为程序员提供了一种为程序员提供了一种组织组织、构造构造和和重用重用 类的方法。类的方法。 4 继承(续)继承(续) n继承的分类继承的分类 从继承源上分

18、,继承分为单继承和多继承 窗口窗口 对话框对话框 玩具玩具车车 玩具车玩具车 单继承单继承 多继承多继承 4 继承(续)继承(续) n继承的分类继承的分类 从继承内容上分,继承分为取代继承、 包含继承 、受限继承和特化继承 1 取代继承子类覆盖了父类的内容 2 包含继承子类含有父类(的内容) 3 受限继承子类退化父类的内容 4 特化继承子类比父类有更多内容 4 继承(续)继承(续) n继承与封装的关系继承与封装的关系 封装是继承的基础;继承是封装的发展, 是为了更好的、更大规模的封装。 n继承和封装的相似性继承和封装的相似性 它们都提供了共享代码的手段:都是通 过this指针来完成程序运行时的

19、代码共享。 5 多态多态* n多态的定义多态的定义 面向对象系统中,不同的对象收到相同 的消息时产生多种不同行为方式的现象。 nC+语言支持两种多态性语言支持两种多态性 编译时多态性和运行时多态性 C+中,编译时多态是通过重载实现的, 而运行时多态是通过虚函数实现的。 5 多态(续)多态(续) n重载的概念重载的概念 重载是指用一个标志符(符号)来实现多 个功能或行为的现象。 n重载包括重载包括函数重载函数重载和和运算符重载运算符重载 n函数重载函数重载 使用同一个名字的多个函数定义。 n运算符重载运算符重载 符号使用的重新定义。实质同函数重载。 5 多态(续)多态(续) n重载的目的重载的目的 更好地表达行为共享,重载的函数或运算 符一般都具有相似的操作。 n重载的直接益处重载的直接益处 减少了程序员的记忆负担。 例如:print(char*); print(“Hello”); print(int); print(50); 6 面向对象的语言面向对象的语言 n面向对象语言应该具有下述特征面向对象语言应该具有下述特征: 1 支持类和对象(包括特性,如封装等) 2 提供类间的继承机制 3 支持多态(重载机制) 上述实际上就是面向对象系统的三大特性。 6 面向对象的语言(续)面向对象的语言

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论