面向对象编程技术.ppt

上传人:max****ui 文档编号:15071467 上传时间:2020-08-03 格式:PPT 页数:159 大小:1.34MB
收藏 版权申诉 举报 下载
面向对象编程技术.ppt_第1页
第1页 / 共159页
面向对象编程技术.ppt_第2页
第2页 / 共159页
面向对象编程技术.ppt_第3页
第3页 / 共159页
资源描述:

《面向对象编程技术.ppt》由会员分享,可在线阅读,更多相关《面向对象编程技术.ppt(159页珍藏版)》请在装配图网上搜索。

1、1,面向对象编程技术课程代码:2020430050时间:周一,12节 周四,12节地点:研302周次:314周,遇节假日调课则顺延,授课教师:郝应光 邮件地址:h_,2,3,课程考核及成绩构成,本课程的成绩由期末考试和平时作业2部分构成 平时成绩由:期末大作业+平时随堂作业构成 具体比例待定,4,主要内容,面向对象技术 C+语法概要(6) MFC框架基础详解(15) MFC文档/视图结构详解(9) 几个应用程序开发实例(6) Visual C+应用程序设计(12) 多线程程序设计(3) TCP/IP网络程序设计(3) 动态连接库程序设计(3) 数据库程序设计(3),5,第一部分 面向对象技术,

2、面向对象概念 UML,6,第二部分 C+语法概要,类和对象 静态数据成员及成员函数 对象与指针 操作符重载和友员 继承 多态性,7,第三部分 MFC框架基础,Visual C+集成开发环境简介 Windows操作系统下的应用程序(SDK、MFC) 用Appwizard开发一个MFC程序 事件处理、映射模式及滚动视图 GDI、颜色及字体 对话框及控件 ActiveX及IE公用控件 位图,第四部分 MFC文档视图结构,菜单、键盘及命令处理 工具栏及状态栏 文档和视图分离 SDI及MDI文档的读写 打印及打印予览 拆分窗口及多视图,8,9,第五部分 MFC程序设计的其他方面,多线程程序设计 数据库程

3、序设计 动态连接库程序设计 TCP/IP网络程序设计,10,主要参考书,面向对象建模与设计,Rumbaugh,电力出版社 面向对象分析与设计,Grady Booch,机械工业出版社 Thinking in C+,Bruce Eckel C+ Primer,Stanley B Lippman,中国电力出版社 C+语言及其程序设计教程,张国峰,电子工业出版社 深入浅出MFC,2Ed,侯俊杰(侯杰),松岗。 Visual C+ 技术内幕,Microsoft,北京希望电子出版社,11,主要网络资源, (microsoft) (世界最大开源代码库) ,第一部分 面向对象技术,12,软件开发,软件开发的过

4、程就是程序员对客观世界问题域形式化的过程,计算机开发语言,机器语言、汇编语言、高级语言,高级语言可能有几千种 计算机语言都是某种程度的形式语言,计算机高级语言的历史 由美国科学家巴科斯设计,1956年在IBM计算机上实现的FORTRAN。 70年代以来的PASCAL 80年代,C语言 80年代后期,C+ 90年代以来,语言要OO而且Visual,更要Web,Java快速推广。,PO方法: 现实世界 流程图(变量,函数) PO语言 执行求解 OO方法: 现实世界 类图(对象,方法) OO语言 执行求解 OO作为一种思想及编程语言,为软件开发的整个过程:分析、设计到coding,提供了一个完整解决

5、方案。,从PO到OO,17,面向过程思想,问题域 (Domain),以问题域的系统流程为中心分析,Sub1,Sub2,Subn,.,各子流程实现-函数化,Func1,Func2,Funcn,.,根据系统的流程组建软件,通过函数的调用实现,18,面向对象思想,问题域 (Domain),以问题域中的事物为中心思考问题,Object1,Object2,Objectn,.,对象归类-抽象化,Class1,Class2,Classn,.,类实例化:定义对象,构建系统,形成解决方案,19,面向对象的基本概念,Coad和Yourdon给出了一个定义:“面向对象=对象+类+继承+通信”。 如果一个软件系统是使

6、用这样 4 个概念设计和实现的,则我们认为这个软件系统是面向对象的。,20,对象,对象是面向对象开发模式的基本成份。 每个对象可用它本身的一组属性和它可以执行的一组操作来定义。 属性一般只能通过执行对象的操作来改变。 操作又称为方法或服务,它描述了对象执行的功能,若通过消息传递,还可以为其它对象使用。,21,消息(Message),消息是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的规格说明。 一个对象接收到消息则调用消息中指定的方法,并将形式参数与参数表中相应的值结合起来。,22,类,类是一组具有相同数据结构和相同操作的对象的集合。 类的定义包括一组数据属性和在数据上

7、的一组合法操作。 类定义可以视为一个具有类似特性与共同行为的对象的模板,可用来产生对象。,23,同一个类的每个对象都是类的实例 (Instance),它们都可使用类中提供的函数。 对象的状态则包含在它的实例变量,即实例的属性中。,24,继承 (Inheritance),继承是使用已存在的定义做为基础建立新定义的技术。 新类的定义是基础类所声明的数据和新类所增加的声明的组合。新类复用既存的定义,而不要求修改既存类。 既存类可当做基类来引用,则新类相应地可当做派生类来引用。,25,面向对象方法学,面向对象分析OOA 面向对象设计OOD 面向对象实现OOP,26,面向对象技术回顾,面向对象技术是许多

8、人历经多年研究积累的产物。 类的概念,是面向对象的重要组成部分。 Smalltalk,提出许多面向对象技术的核心概念,如:消息和继承。 Dijkstra的软件正确性理念,提出了用抽象层构造软件的观点。 Ada语言,提出了一般性和包两个概念。 C+语言,最广泛使用的面向对象的语言。 Java语言,健壮的、可移植的、流行的面向对象语言。,27,UML的产生,1988年到1992年是面向对象方法学蓬勃发展的时期,人们从各自的经历和软件开发的经验提出了各种面向对象的开发方法,代表的有: Sally Shlaer 和 Steve Mellor以信息模型化方法作为基础,并为目标系统增设了状态模型和过程模型

9、; Peter Coad 和 Ed Yourdon则在信息模型化、面向对象的程序设计语言和基于知识的系统的基础上,建立了他们的OOA和OOD,主要工具是类与对象图、对象状态图和服务图; HP公司的Fusion开发方法。,28,Jim Rumbaugh,Grady Booch,Ivar Jacobson,29,OOA和OOD是面向对象方法学中重要的部分,UML是具体的方法 OOP涉及到具体的编程语言,C+ 开发要使用合适的工具IDE:Visual C,面向对象的特点,30,封装(Encapsulation) 通过定义类实现 继承(Inheritance) 通过派生新类实现 多态性(Morphis

10、m) 虚拟函数实现,XO(X?-Oriented) SO(Service-Oriented) OO(对象、类) PO(过程、函数、变量),OO之后是什么?,32,第二部分 C+语法概要,第一章 C+基础,33,1.1 C+的起源和特点,C语言1972年,由Dennis Ritchie设计,可以认为是最优影响力的发明之一。 为改进C语言,“带类的C”,1983命名为C+ 对C的类型系统改进和扩充(更安全) 支持面向对象 C+保持与C兼容(快速普及) C+不是纯粹的面向对象的语言,34,1.2 程序的编译过程,35,1.3 C+的词法记号,关键字 各种常量 操作符 标识符 分隔符,36,1.4 C

11、+程序的结构,37,注释 输入和输出 函数 变量(对象) 符号常量 表达式 语句,38,1.5C+的基本数据类型,39,1.7对象声明,基本语法如下: 数据类型 标识符1,标识符2,。标识符n; 初始化 数据类型 标识符1(初始值1),标识符2(初始值2),。标识符n(初始值n); 数据类型 标识符1=初始值1,标识符2=初始值2,。标识符n=初始值n; 赋值 I=10;,40,1.6常量,整数常量 浮点常量 字符常量 字符串常量 布尔常量,41,1.8枚举类型,定义: 通过枚举一个类型的值域来定义一个数据类型,值域是通过在枚举声明时所指定的一组文字量(又称枚举常量)指定的。 语法形式: en

12、um 标识符 标识符1,标识符2,标识符3,。标识符n;,42,1.9表达式,表达式由操作数和操作符组成,操作符分: 算术操作符:+、-、*、/、%、+、- 关系操作符:、=、=、!= 逻辑操作符: void Move(int x=5,int y=5); void ValueX(int x); int ValueX(); void ValueY(int y); int ValueY(); private: void Set(int x,int y); int X,Y; ;,68,4.5带缺省参数值的成员函数和成员函数重载,Location:Location(int x,int y) Set(x

13、,y); void Location:Move(int x,int y) Set(x,y); void Location:ValueX(int val) X=val; int Location:ValueX() return X; void Location:ValueY(int val) Y=val; int Location:ValueY() return Y; void Location:Set(int x,int y) X=x;Y=y;,69,4.5带缺省参数值的成员函数和成员函数重载,int main() Location A,B; /Location A(0,0),B(0,0) A

14、.Move(); /A.X和A.Y被设为5 A.ValueX(15); /A.X=15 coutA.ValueX()A.ValueY()endl; B.Move(6,2); /B.X=6,B.Y=2 B.ValueY(4); coutB.ValueX()B.ValueY()endl; return 0; ,70,第五章 作用域、生存期和可见性,71,5.1作用域及可见性,一个标识符的有效区域。 分为:函数原型作用域、块作用域、类作用域、文件作用域。,72,函数原型作用域,函数原型中所作的参数声明在该作用域,始于左括号,结束于右括号。,73,块作用域,块作用域由一对花括号定义。(局部作用域),7

15、4,块作用域,75,类作用域,76,文件作用域,77,可见性,标识符是否可以引用。 在嵌套作用域中,内层作用域的标识符优先于外层作用域的标识符。 C+中,标识符必须先声明后引用,在同一作用域中不能声明同样的标识符。,78,可见性举例,79,5.2对象的生存期,静态生存期 与程序的运行期相同。这种对象的存储单元相对位置在整个程序的运行期间不变 文件作用域或用static指定。 若未显式指定初始值,为零。 动态生存期 在函数内部(块作用域)声明的对象是动态生存期。 若未显式指定初始值,为任意值。,80,对象的生存期举例,81,5.3静态成员函数和静态数据成员,82,数据共享的方法,数据存储在局部对

16、象中,通过参数传递机制实现函数间的数据共享。 数据存储在全局对象中,通过全局对象进行数据交换。 封装在类中 全局对象存在的问题 可见性无限制 不能保证操作的合法性 解决上述问题的方法是类及其封装技术,相应提出静态数据成员和静态成员函数。,83,举例,84,举例,85,举例,86,举例,87,举例,88,第六章 对象与指针,89,6.1指针,指针:对象的地址 指针对象:存放指针的对象 声明指针对象的语法: T *标识符; int *pointer; 一个指针对象被赋值为一个对象的地址后,称指针指向对象。,90,为指针对象引入的两种操作, 数组元素也可以用指针引用,96,数组和指针,通过指针引用数

17、组元素 定义指针对象 数组的地址赋值给指针对象。 指针引用数组元素的方法 *(pointer + n) pointern,97,对象数组,没有为数组指定显式初始值时,数组元素使用缺省值初始化,当定义对象数组时,类中必须定义一个缺省的构造函数。,98,举例,99,6.3引用,是标识对象的一种机制(是对象的一个别名) 一般用作参数类型、函数返回类型。 一般语法如下: 基本类型 删除语法如下: delete ptr; 数组对象的创建 int* ptr=new int10; 数组对象的删除 delete ptr;,103,104,105,106,6.4指针数组,数组元素的类型是指针,这样的数组称指针数

18、组。 语法: T* 标识符元素个数;,107,多维数组与指针,多维数组可以解释为其元素是多维数组的一维数组。,108,6.5this指针,一个成员函数被调用时,被自动传递一个隐含的参数,该参数是一个指向正被该函数操作的对象的指针,在程序中可以用this引用它,因此称其为this指针。,109,6.6具有子对象的类类型,用内部包含子对象的类实现复杂的类 子对象的初始化,110,111,112,113,第七章 操作符重载,当使用操作符来表达对对象的某个操作时,可以将操作符函数声明为类的成员函数或类的友员函数。 操作符的参数个数、优先级、结合性和使用语法是由C+规定的,不能被改变。 重载操作符的形参

19、不能具有缺省值。 重载操作符的返回值类型任意,但最好不是void 。,114,7.1重载为类的成员函数,115,重载为类的成员函数,116,重载为类的成员函数,117,重载为类的成员函数,118,7.2重载为类的友元函数,119,重载为类的友元函数,120,重载为类的友元函数,121,重载为类的友元函数,122,7.3两种方法的比较,一元函数最好重载为成员函数 二元函数一般重载为友元函数 27.5+x 赋值操作符只能重载为成员函数 27.5=x +和-操作符有两种形式,一般被重载为成员函数 其中后缀操作重载后带有一个整型参数。,123,两种方法的比较,下标操作符只能被重载为成员函数 函数调用操

20、作符可以看作是下标操作符的扩展,124,第八章 继承与多态性,通过已有的类进行扩展产生新类的过程 产生的新类称派生类 产生派生类的类称基类或父类。 从一个基类派生称单基继承,从多个基类派生称多基继承。,125,Mouse,Screen,Device,Keyboard,Tree,AppleTree,Fruit,126,8.1继承,127,访问控制,访问控制用于控制基类中声明的名字在多大的范围内能够被派生类的用户访问 访问控制有三种public,protected,private,基类模块,派生类模块,间接派生类模块,其他程序模块,128,129,公有继承,130,私有继承,131,在派生类中访问

21、基类成员,132,保护的成员,对V模块是public 对H模块是private,133,多继承,可以将其视为单继承来考察,每个基类与派生类的关系可以当做单基继承。,134,8.2构造函数和析构函数,派生类的数据成员由属于基类的部分和属于自己的部分组成,属于基类的部分初始化应由基类的构造函数完成。 构造函数不被继承,派生类必须调用基类的构造函数来初始化属于基类的部分数据成员。 一般形式如下: C:C(参数表0):C1(参数表1),C2(参数表2),Cn(参数表n) ,135,构造函数和析构函数,如果冒号右边的某个基类的构造函数参数表为空,则可以省略该项。 构造对象时,先执行基类的构造函数,然后执

22、行派生类的构造函数。析构时则相反。 多基继承时基类构造函数的执行顺序由继承时的顺序决定(从左向右),与初始化列表中的顺序无关。,136,构造函数和析构函数,137,构造函数和析构函数,138,构造函数和析构函数,139,8.3二义性,如果派生类的一个表达式引用基类中不止一个成员,则存在二义性。 解决二义性的办法是加类限定符。,140,二义性,141,二义性,如果一个派生类是从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中声明的标识符进行访问时可能产生二义性。,142,二义性,Bb,B1b1,Cf(),d,Bb,B2b2,143,二义性,144,虚基类,为避免一个基类在多条继承路径上

23、造成在派生类中产生多个基类子对象,可以采用虚基类技术。 语法如下 class B1:virtual public B class B2:virtual public B class C:public B1,public B2,特殊成员函数讨论,拷贝构造函数 赋值,145,拷贝构造函数,用一个对象初始化一个正在建立的同类对象。 拷贝构造函数的参数是引用参数。 每个类都有一个拷贝初始化构造函数 如未定义,则编译器自动生成一个。 功能: 用作为初始值的对象的每个数据成员初始化正建立对象的对应的数据成员。,146,用途,以值调用方式传递参数时 函数返回对象时,147,赋值,当需要进行对象之间的赋值操作

24、时,必须定义赋值操作。 为与习惯一致,一般用作为=赋值操作符 当使用操作符作为函数名时,必须与关键字operator合用。 赋值操作的参数最好用引用方式。,148,赋值操作的参数最好采用引用方式。 赋值操作的最好返回对被赋值对象的引用。 一般形式: X,149,编译器产生的拷贝初始化和赋值操作的缺陷,当类中声明有指针数据成员时,将产生问题。,150,派生类的赋值和初始化,如未定义拷贝构造函数和赋值操作,则编译器提供。 如自定义,则应在实现中调用基类的拷贝构造函数和赋值操作。,151,152,8.4 虚函数与多态性,如果类型S是从类型T共有继承的,则称类型S是类型T的子类型。 类型S的指针或引用

25、可以适用于类型T的指针或引用的场合。,153,动态绑定与虚函数,由于在基类和派生类中,相同的名字执行的操作可能不同,所以基类的成员函数在派生类中经常有不同的实现。 用virtual关键字可以实现动态绑定。 动态绑定只适用于虚函数的参数是指针或引用的情况。,154,动态绑定与虚函数,155,动态绑定与虚函数,156,动态绑定与虚函数,157,动态绑定与虚函数,在一个成员函数内调用虚函数时,对该虚函数的调用进行动态绑定。 派生类中虚函数必须满足下列条件: 与基类的函数有相同个数的参数 参数类型相同 返回类型或者与基类相同或者返回指针或引用,且返回的指针或引用的基类型是基类中对应函数所返回的指针或引用的基类型的子类型。 在一个成员函数内调用虚函数时,对该虚函数的调用进行静态绑定。,158,纯虚函数与抽象类,当定义基类时某个虚函数不能给出确定的实现时,可以定义其为纯虚函数。 语法如下 virtual 类型 函数名(参数列表)=0; 具有纯虚函数的类称为抽象类, 抽象类只能用来派生类而不能定义具体的对象。,159,纯虚函数与抽象类,

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!