《第1章面向对象程序设计概述.ppt》由会员分享,可在线阅读,更多相关《第1章面向对象程序设计概述.ppt(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第1章面向对象程序设计概述章面向对象程序设计概述现在学习的是第1页,共42页 内容提要内容提要n n1 1 面向对象程序设计面向对象程序设计*n n2 2 对象与类的基本概念对象与类的基本概念*n n3 3 数据的抽象与封装数据的抽象与封装n n4 4 继承性继承性*n n5 5 多态性多态性*n n6 6 面向对象的程序设计语言面向对象的程序设计语言现在学习的是第2页,共42页1 面向对象程序设计面向对象程序设计*n面向对象编程面向对象编程 是一种以对象为中心的程序设计范型。也可以说是一套概念和想法,它与面向过程程序设计相对应,是一种用计算机程序来描述实际问题的思路。n面向过程编程面向过程
2、编程 它是早期的程序设计范型,它考察整个设计过程,以功能分解为中心。现在学习的是第3页,共42页1 面向对象程序设计(续)面向对象程序设计(续)n面向过程的特征面向过程的特征 早期程序设计认为:程序=数据结构 +算法 这个公式贯穿于整个程序设计的始终,无论程序是系统程序还是模块程序。n面向过程的不足面向过程的不足 强调功能分解,为了实现功能,有时数据结构屈从于算法,结果造成数据结构和过程的分离。(大型程序难以控制)现在学习的是第4页,共42页1 面向对象程序设计(续)面向对象程序设计(续)n面向对象的特征面向对象的特征 OO(Object-Oriented)程序设计认为:程序=对象 +消息 这
3、个公式表明面向对象的程序以对象为程序组成单位,以消息为动力(驱动)。n面向对象的好处面向对象的好处 以对象为单位组织程序,更接近人思维方式,OO借鉴了认知论的观点。现在学习的是第5页,共42页1 面向对象程序设计(续)面向对象程序设计(续)n面向对象和面向过程面向对象和面向过程 两者不是对立的,面向对象是面向过程发展到一定阶段的产物,是程序设计的高级阶段,面向对象以面向过程为基础。n软件历史软件历史 硬件高速发展软件发展软件危机结构化程序设计软件工程面向对象技术现在学习的是第6页,共42页1 面向对象程序设计(续)面向对象程序设计(续)n程序可分为系统程序和模块程序,现在的程序以前者居多。(系
4、统)程序=对象 +消息(模块)程序 数据结构+相应算法程序=数据结构+算法在较小的模块程序层面,在较小的模块程序层面,还使用这个公式还使用这个公式现在学习的是第7页,共42页2 对象和类对象和类*n对象的概念对象的概念 问题空间元素在方法空间的表示称为对象,它是现实世界的实体或概念在计算机逻辑中的表示。(程序中的变量程序中的变量)n现实对象现实对象 现实世界的实体;人们 认识世界的基本单位。现在学习的是第8页,共42页2 对象和类(续)对象和类(续)n对象的组成对象的组成对对象象静态特征静态特征属性,一般用数属性,一般用数据(结构)来体现。据(结构)来体现。动态行为动态行为方法,基于数方法,基
5、于数据的函数或过程。据的函数或过程。属性和方法是程序设计方法学中的术语属性和方法是程序设计方法学中的术语现在学习的是第9页,共42页2 对象和类(续)对象和类(续)n对象有如下的特性对象有如下的特性 1 每个对象必须有一个名字以区别于其他对象。2 有属性(或叫状态)来描述对象的某些特征。3 有一组操作,每一操作决定对象的一种行为。4 对象的整体性:把属性和操作放在一起,这里的操作要与属性相关,通过使用名字就可以使用整个对象。现在学习的是第10页,共42页2 对象和类(续)对象和类(续)n对象的例子对象的例子教师黎明是一个对象教师黎明是一个对象对象名:对象名:黎明黎明对象的属性:对象的属性:年龄
6、:年龄:30学历:博士学历:博士职称:教授职称:教授对象的操作:对象的操作:进修进修教授课程教授课程说自己的年龄说自己的年龄struct Teacher int age;char*degree;char*title;public:void Study();void Teach();int TellAge();;现在学习的是第11页,共42页2 对象和类(续)对象和类(续)n对象的例子对象的例子教师黎明是一个对象教师黎明是一个对象 Teacher LiMing;/对象(名)对象(名)LiMing.age=30;LiMing.degree=“doctor”;LiMing.title=“profes
7、sor”;现在学习的是第12页,共42页2 对象和类(续)对象和类(续)n类的概念类的概念 类是一组具有相同属性和行为特征的对象的抽象描述。n类和对象的关系类和对象的关系 抽象和具体的关系,类是多个对象的归纳和总结(分类的结果),对象又是类的个体实物,一个对象就是类的一个实例。现在学习的是第13页,共42页2 对象和类(续)对象和类(续)n类是对象的类是对象的“模板模板”或者或者“蓝图蓝图”,同时同时定义了对象的特性和操作定义了对象的特性和操作12324512245对象对象1类类对象对象2现在学习的是第14页,共42页2 对象和类(续)对象和类(续)n类和对象类和对象类型和变量类型和变量 类和
8、对象实际上就是C的数据类型和变量,只不过在C+中,统称为类和对象。n对象的状态对象的状态 类没有具体的值,对象才有,对象的这些具体的值称为对象的状态。类类 对象对象实例化实例化声明声明现在学习的是第15页,共42页2 对象和类(续)对象和类(续)n对象的状态对象的状态名称LiMingage30degreedoctortitleprofessor Teacher LiMing;LiMing.age=30;LiMing.degree=“doctor”;LiMing.title=“professor”;现在学习的是第16页,共42页2 对象和类(续)对象和类(续)n类的结构类的结构 类的结构和对象的
9、组成是严格对应的!类中的成分有两种:数据成员和成员函数。类类数据成员数据成员对应对象的对应对象的属属性性,也叫做,也叫做成员变量成员变量。成员函数成员函数对应对象的对应对象的方方法法,是类功能的载体。,是类功能的载体。现在学习的是第17页,共42页2 对象和类(续)对象和类(续)n类的结构实例类的结构实例 数据成员数据成员 成员函数成员函数class Teacher int age;char*degree;char*title;public:void Study();void Teach();int TellAge();;现在学习的是第18页,共42页2 对象和类(续)对象和类(续)n*类和对
10、象的作用时期类和对象的作用时期 类只在源程序的代码中出现,它是编译器生成对象的说明书,并不会在运行的程序中出现,即类只在编译时存在;对象作为类的实例是在运行的程序中出现,并占有内存空间,它是程序运行时存在的实体,是机器指令操作的内容。现在学习的是第19页,共42页2 对象和类(续)对象和类(续)n对象的交互对象的交互 现实世界的对象并非孤立的实体,它们现实世界的对象并非孤立的实体,它们之间存在着之间存在着联系联系,从而构成不同的系统。,从而构成不同的系统。面向对象程序设计中,对象的联系我们面向对象程序设计中,对象的联系我们称为称为对象的交互对象的交互。n对象交互的实现对象交互的实现 在在OOP
11、中,对象交互的实现要用到一个中,对象交互的实现要用到一个重要的工具:重要的工具:消息消息。现在学习的是第20页,共42页2 对象和类(续)对象和类(续)n对象交互图示对象交互图示n消息消息 对象的交互中介(请求或通知)n消息传递消息传递 面向对象的程序设计中对象协作机制对象对象1对象对象2消息消息现在学习的是第21页,共42页2 对象和类(续)对象和类(续)n消息传递与调用消息传递与调用 实际上,对象的消息传递对应于程序设计实际上,对象的消息传递对应于程序设计中的中的过程(函数)调用过程(函数)调用。比如:键盘对象的按键消息传给显示对象比如:键盘对象的按键消息传给显示对象n消息的发送和接收消息
12、的发送和接收 发送消息的对象为发送消息的对象为发送者发送者或或请求者请求者,接收,接收消息的目标对象为消息的目标对象为接收者接收者或或服务者服务者(有处理(有处理者消息的能力)。者消息的能力)。现在学习的是第22页,共42页2 对象和类(续)对象和类(续)n消息的处理简单模型消息的处理简单模型 消息的处理就是过程(函数)的消息的处理就是过程(函数)的执行执行。某过程某过程 Teacher n;/n.Study(实参实参);/return 0;代码后半部分消息传递给消息传递给n代码前半部分某过程代码在中对象对象n n的内容的内容 /执行代码执行代码 Study(Study(参数参数)现在学习的是
13、第23页,共42页2 对象和类(续)对象和类(续)n消息的内容组成消息的内容组成 包含有接收者的名字,请求的方法,一个或多个参数。n消息机制可以扩充的很复杂消息机制可以扩充的很复杂n消息的性质消息的性质 1、一消息可以发给多个对象 2、一对象可以接受多个消息 3、对象可以响应消息,也可不响应 现在学习的是第24页,共42页2 对象和类(续)对象和类(续)n类的确定和划分类的确定和划分 OOP要将系统划分为对象,即分类。但在现实中,问题域的分类很复杂,而且依赖于人的认知水平和系统设计经验,在后续课程“软件工程”中我们将要学习到具体的方法。现在学习的是第25页,共42页3 数据的抽象与封装数据的抽
14、象与封装n面向对象系统最突出的特征面向对象系统最突出的特征 封装性、继承性、多态性(三个特性)n封装的概念和数据抽象(类)密切相关封装的概念和数据抽象(类)密切相关n封装在现实中的例子 人们使用录音机,只要知道键的功能即可(放音、录音、停止、倒带等),不需要知道这些功能是如何实现的,也不需要知道其内部电路或构造。现在学习的是第26页,共42页3 数据的抽象与封装(续)数据的抽象与封装(续)n抽象抽象从特定的实例从特定的实例抽取共同性质形成抽取共同性质形成概念的过程概念的过程。抽象是对系统简化的描述或规范说明,它强调了系统中一部分细节和特性(用户关心的),而忽略了其他部分。n封装封装将数据结构和
15、操作组成一个实体将数据结构和操作组成一个实体的过程。的过程。其中的数据和操作均是我们所需要的部分(数据的抽象)。n隐藏隐藏封装的结果实现了数据和操作的封装的结果实现了数据和操作的隐藏(隐藏细节),用户知道功能隐藏(隐藏细节),用户知道功能WHATWHAT,不知道如何实现不知道如何实现HOWHOW。现在学习的是第27页,共42页3 数据的抽象与封装(续)数据的抽象与封装(续)n抽象与封装的关系抽象与封装的关系 抽象与封装是互补的。好的抽象有利于封装,封装的实体则帮助维护抽象的完整性。重要的是抽象先于封装。n通过封装来增强抽象的功能通过封装来增强抽象的功能 用户看到的用户看到的ATM封装了内容封装
16、了内容/验证语言验证语言/验证密码验证密码/验证账户验证账户/更改账户更改账户现在学习的是第28页,共42页3 数据的抽象与封装(续)数据的抽象与封装(续)n对象的封装对象的封装 1 封装后的对象有一个边界,对象的某些数据和函数等细节被封装在边界之内。2 有一个描述与其他对象相互作用的接口,该接口说明了消息传递的方法。3 对象内部的数据和代码受到保护,其他对象不能直接修改。现在学习的是第29页,共42页3 数据的抽象与封装(续)数据的抽象与封装(续)n接口接口与其他对象与其他对象交互的方法集交互的方法集 封装后能让用户与对象细节分离,用户只需知道功能即可,接口就是功能的载体。TellAgeSt
17、udyTeach age degree title 用户用户打交道打交道 接口接口现在学习的是第30页,共42页3 数据的抽象与封装(续)数据的抽象与封装(续)n对象的特性对象的特性 对象是面向对象程序设计的最重要的细胞和基石,它有如下的特性:1 封装性封装性隐藏内部细节 2 模块独立性模块独立性实体的抽象(类)3 动态连接性动态连接性消息机制 4 易维护性易维护性更新在边界内现在学习的是第31页,共42页 4 继承继承*n继承继承类间的承袭关系类间的承袭关系 继承所表达的是对象类之间的相互关系,这种关系让某类对象可以使用另外一类对象的特征和能力。父母父母孩子孩子继承继承现在学习的是第32页,
18、共42页 4 继承(续)继承(续)n继承类之间的几个特性继承类之间的几个特性 1 类间具有共享的特征(数据和代码共享)2 类间具有差别和新增部分(非共享内容)3 类间具有层次结构n假如有类B继承类A,则类B 的对象具有类A的一切特征,此时,类A为基类或父类或 超类,类B为派生类或子类基类基类派生类派生类继承继承现在学习的是第33页,共42页 4 继承(续)继承(续)n继承机制的优点继承机制的优点 1 代码重用,避免重复开发 2 增强一致性,统一的处理接口和界面 3 代码进化,高效的扩充功能n为程序员提供了一种为程序员提供了一种组织组织、构造构造和和重用重用类类的方法。的方法。现在学习的是第34
19、页,共42页 4 继承(续)继承(续)n继承的分类继承的分类 从继承源上分,继承分为单继承和多继承窗口窗口对话框对话框玩具玩具车车玩具车玩具车 单继承单继承 多继承多继承现在学习的是第35页,共42页 4 继承(续)继承(续)n继承的分类继承的分类 从继承内容上分,继承分为取代继承、包含继承、受限继承和特化继承 1 取代继承子类覆盖了父类的内容 2 包含继承子类含有父类(的内容)3 受限继承子类退化父类的内容 4 特化继承子类比父类有更多内容现在学习的是第36页,共42页 4 继承(续)继承(续)n继承与封装的关系继承与封装的关系 封装是继承的基础;继承是封装的发展,是为了更好的、更大规模的封
20、装。n继承和封装的相似性继承和封装的相似性 它们都提供了共享代码的手段:都是通过this指针来完成程序运行时的代码共享。现在学习的是第37页,共42页 5 多态多态*n多态的定义多态的定义 面向对象系统中,不同的对象收到相同的消息时产生多种不同行为方式的现象。nC+语言支持两种多态性语言支持两种多态性 编译时多态性和运行时多态性 C+中,编译时多态是通过重载实现的,而运行时多态是通过虚函数实现的。现在学习的是第38页,共42页 5 多态(续)多态(续)n重载的概念重载的概念 重载是指用一个标志符(符号)来实现多个功能或行为的现象。n重载包括重载包括函数重载函数重载和和运算符重载运算符重载n函数
21、重载函数重载 使用同一个名字的多个函数定义。n运算符重载运算符重载 符号使用的重新定义。实质同函数重载。现在学习的是第39页,共42页 5 多态(续)多态(续)n重载的目的重载的目的 更好地表达行为共享,重载的函数或运算符一般都具有相似的操作。n重载的直接益处重载的直接益处 减少了程序员的记忆负担。例如:print(char*);print(“Hello”);print(int);print(50);现在学习的是第40页,共42页6 面向对象的语言面向对象的语言n面向对象语言应该具有下述特征面向对象语言应该具有下述特征:1 支持类和对象(包括特性,如封装等)2 提供类间的继承机制 3 支持多态(重载机制)上述实际上就是面向对象系统的三大特性。现在学习的是第41页,共42页6 面向对象的语言(续)面向对象的语言(续)n程序设计的高级语言可以划分为四代程序设计的高级语言可以划分为四代n第一代语言第一代语言显著特征是对显著特征是对数学表达式数学表达式有有很强的处理能力,很强的处理能力,其代表有Fortran和Algol 60,有了封装的雏形。n第二代语言第二代语言的重点是的重点是过程化过程化地表达算法地表达算法(结构化)(结构化),其代表有Pascal和C。n第三代语言第三代语言引入了引入了抽象数据类型抽象数据类型,例如Ada,它含有面向对象的构造:包。现在学习的是第42页,共42页
限制150内