面向对象程序设计.ppt

上传人:本田雅阁 文档编号:3227767 上传时间:2019-08-02 格式:PPT 页数:58 大小:296.04KB
返回 下载 相关 举报
面向对象程序设计.ppt_第1页
第1页 / 共58页
面向对象程序设计.ppt_第2页
第2页 / 共58页
面向对象程序设计.ppt_第3页
第3页 / 共58页
面向对象程序设计.ppt_第4页
第4页 / 共58页
面向对象程序设计.ppt_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《面向对象程序设计.ppt》由会员分享,可在线阅读,更多相关《面向对象程序设计.ppt(58页珍藏版)》请在三一文库上搜索。

1、面向对象程序设计,主讲人:武云 中国地质大学计算机学院,面向对象技术与Visual C+-第1章,2,(1)掌握面向对象程序设计一般方法和特点。 (2)熟练掌握C+语言的语法 (3)掌握Windows程序设计的特点。 (4)能够开发一般的基于API、MFC的Windows程序。 (5)学会VC程序调试的一般方法。,教学目标,面向对象技术与Visual C+-第1章,3,上课认真听讲,下课认真复习 多编程,勤实践 联机帮助MSDN 多看参考书籍、资料、别人代码,学习方法,面向对象技术与Visual C+-第1章,4,教材: VC+面向对象程序设计 戴光明,李向 编著 高等教育出版社、中山大学出版

2、社 2005,参考教材: 1.甘玲 邱劲 主编 面向对象技术与Visual C+ 清华大学出版社 2.黄维通 主编 Visual C+面向对象与可视化程序设计清华大学出版社,面向对象技术与Visual C+-第1章,5,学时: 讲课:40 上机:16 考试形式: 平时上课和上机情况:30% 闭卷考试:70%,面向对象技术与Visual C+-第1章,6,第1章 面向对象技术概述,计算机程序语言的发展 程序设计方法发展历程 面向对象技术的基本概念 :对象,类,消息和事件 面向对象技术的基本特征:抽象性,封装性,继承性,多态性 Windows程序设计的特点 常用面向对象语言简介,面向对象技术与Vi

3、sual C+-第1章,7,1.1程序设计语言 计算机程序设计语言 (从低级语言到高级语言的发展过程) 第一代:机器语言 第二代:汇编语言 第三代:算法语言,又称高级语言 FORTRAN:科学计算、向量处理、并行处理 ALGOL:通用算法语言 COBOL(Common Business-Oriented Language):商用数据处理 BASIC、Pascal、C 面向对象语言如:Simula、Eiffel、C+,面向对象技术与Visual C+-第1章,8,机器语言和汇编语言,由计算机硬件系统可以识别的二进制指令组成的语言称为机器语言。 计算机发展的初期,软件工程师们只能用机器语言来编写程

4、序。这一阶段,在人类的自然语言和计算机编程语言之间存在着巨大的鸿沟。 汇编语言将机器指令映射为一些可以被人读懂的助记符,如ADD、SUB等。 此时编程语言与人类自然语言间的鸿沟略有缩小,但仍与人类的思维相差甚远。因为它的抽象层次太低,程序员需要考虑大量的机器细节。,面向对象技术与Visual C+-第1章,9,高级语言,高级语言屏蔽了机器的细节,提高了语言的抽象层次,程序中可以采用具有一定含义的数据命名和容易理解的执行语句。这使得在书写程序时可以联系到程序所描述的具体事物。,面向对象技术与Visual C+-第1章,10,面向对象语言,出发点: 更直接地描述客观世界中存在的事物(对象)以及它们

5、之间的关系。 特点: 是高级语言。 将客观事物看作具有属性和行为的对象。 通过抽象找出同一类对象的共同属性和行为,形成类。 通过类的继承与多态实现代码重用,面向对象技术与Visual C+-第1章,11,优点: 使程序能够比较直接地反映问题域的本来面目,软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发。,面向对象技术与Visual C+-第1章,12,面向对象语言发展历程: 雏形阶段(六七十年代) 先驱:Simula语言:对象、类,支持继承 Ada:美国国防部,嵌入式实时系统 早期的Smalltalk 完善阶段(八十年代初期) Smalltalk-80:大部分的面向对象概念

6、繁荣阶段(八十年代末以来)大批OO语言产生 纯OO语言:Smalltalk、Eiffel、 Object-C 混合语言:C+、Object Pascal 转向OOD和OOA(九十年代初期以来) 出现大量的OOA(面向对象的分析)、OOD(面向对象的设计)方法,面向对象技术与Visual C+-第1章,13,1.2程序设计方法的发展历程,一、面向过程的结构化程序设计方法,20世纪60年代诞生、七八十年代广泛使用的程序设计方法,语言工具有:PASCAL、C 等。 设计思路:自顶向下,逐步求精;程序结构按功能划分为若干个基本模块,这些模块形成一个树型结构;各模块间的关系尽可能简单,在功能上相对独立;

7、每一模块内部均是由顺序、选择、循环三种基本结构组成;其模块化实现的具体方法是使用子程序。,面向对象技术与Visual C+-第1章,14,优点: 有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。,存在问题: 是一种面向过程的程序设计方法,而“过程”和“操作”又是不稳定和多变的,因此不能直接反映人求解问题的思路。 维护程序的一致性困难。数据和过程相互独立,存在着用正确的程序模块调用错误的数据,或用错误的程序模块调用正确的数据的可能。因此,程序员必须时刻注意需要处理的数据格式。 程序代码可重用性差。程序中除少数标准库函数外,每设计一个程序时,程序员几乎从零做起

8、。即使重用代码,通常也是通过拷贝或编辑重新生成一份。,面向对象技术与Visual C+-第1章,15,二.面向对象程序设计方法 (OOP,Object-Oriented Programming), 面向对象程序设计是一种以对象为基础,以事件或消息来驱动对象执行处理的程序设计技术。 将数据及对数据的操作放在一起,作为相互依存、不可分割的整体来考虑,它采用数据抽象和信息隐藏技术,将对象和对对象的操作抽象成一种新的数据类型类。,面向对象技术与Visual C+-第1章,16,这种方法集抽象性、封装性、继承性和多态性于一体,易于实现模块化、可重用、易维护、易扩充等功能。,优点: 程序模块间的关系更为简

9、单,程序模块的独立性、数据的安全性就有了良好的保障。 通过继承与多态性,可以大大提高程序的可重用性,使得软件的开发和维护都更为方便。,面向对象技术与Visual C+-第1章,17,结构化程序设计的方法是把程序看作是工作在数据上的一系列过程或函数的集合。 程序的定律是: 程序=(算法)+(数据结构) 面向对象方法把程序看作是互相协作而又彼此独立的对象的集合。对象间通过发送消息而相互作用。 程序的定律是: 对象=(算法+数据结构) 程序=(对象+对象+),面向对象技术与Visual C+-第1章,18,面向对象技术与Visual C+-第1章,19,实例:栈是一种由若干个按线性次序排列的元素所构

10、成的复合数据,对栈能实施两种操作:进栈(增加一个元素)和退栈(删除一个元素),并且这两个操作必须在栈的同一端(栈顶)进行。后进先出(LIFO)是栈的一个重要性质。,1) 结构化方案 #include #define STACK_SIZE 100 struct Stack /栈的结构体 int top; int bufferSTACK_SIZE; ; void init(Stack ,面向对象技术与Visual C+-第1章,20,bool push(Stack ,面向对象技术与Visual C+-第1章,21,bool pop(Stack ,面向对象技术与Visual C+-第1章,22,对栈

11、的使用可由两种方式: (1)可以通过提供的函数 来实现, Stack st; int x; init(st); push(st,12); pop(st,x);,(2)也可以直接在栈的数据表示上直接进行,st.top = -1; st.top+; st.bufferst.top = 12; x = st.bufferst.top; st.top-;,面向对象技术与Visual C+-第1章,23,2) 面向对象方案 #include #define STACK_SIZE 100 class Stack /定义stack类,将数据和操作放在一起 private: int top; int buff

12、erSTACK_SIZE; public: Stack() top = -1; /构造函数,对栈进行初始化 bool push(int i); /进栈函数 if (top = STACK_SIZE-1) printf( “Stack is overflow.n”); return false; else top+; buffertop = i; return true; ,面向对象技术与Visual C+-第1章,24,bool pop(int ,Stack st; int x; st.push(12); st.pop(x); st.top = -1; /error st.top+; /err

13、or st.bufferst.top = 12; /error,面向对象技术与Visual C+-第1章,25,1.3面向对象的基本概念,对象(Object) 一般意义上的对象: 是现实世界中一个实际存在的事物。 可以是有形的(比如一辆汽车),也可以是无形的(比如一项计划)。 是构成世界的一个独立单位,具有: 静态特征:可以用某种数据来描述 动态特征:对象所表现的行为或具有的功能,面向对象技术与Visual C+-第1章,26,面向对象方法中的对象: 是系统中用来描述客观事物的一个实体,它是用来构成系统的一个基本单位。对象由一组属性和一组行为构成。 属性:用来描述对象静态特征的数据项。 行为:

14、用来描述对象动态特征的操作序列。,面向对象技术与Visual C+-第1章,27,例如有一个人名叫小明,性别男,身高1.80m,体重68kg,可以修电器,可以教计算机课,下面来描述这个对象,对象的功能(可做的操作): 回答身高 回答体重 均属于自身所承受的操作 回答性别 修理电器 属于施加与其他对象的操作 教计算机课,对象名:小明 对象的状态: 性别:男 身高:1.80m 体重:68kg,面向对象技术与Visual C+-第1章,28,类(class) 类是具有相同属性和行为的一组对象的集合,它为属于它的全部对象提供了统一的抽象描述,其内部包括属性和行为两个主要部分。类是对象集合的再抽象。,类

15、与实例的关系: 组成类的对象均为此类的实例(Instance)。 类是多个实例的综合抽象,实例是类的个体实物。,面向对象技术与Visual C+-第1章,29,人类的定义: class HUMANKIND char *name; double weight; public: void eat( ); void wear( ); void sleep( ); void travel( ); ; 人类的实例:HUMANKIND XiaoMing ;,面向对象技术与Visual C+-第1章,30,消息和事件,消息(Message)是描述事件发生的信息,它是对象之间发出的行为请求。 多个消息构成一个

16、事件。,消息具有三个性质: (1)同一对象可接收不同形式的多个消息,产生不同的响应; (2)相同形式的消息可以送给不同的对象,所作出的响应可以是截然不同的; (3)消息的发送可以不考虑具体的接收者,对象可以响应消息,也可以对消息不予理会,对消息的响应并不是必须的。,面向对象技术与Visual C+-第1章,31,1.4面向对象技术的基本特征,抽象性(Abstract) 抽象就是忽略事物中与当前目标无关的非本质特征,更充分地注意与当前目标有关的本质特征。,面向对象技术与Visual C+-第1章,32,封装性(Encapsulation) 封装就是把对象的属性和行为结合成一个独立的单位,并尽可能

17、隐蔽对象的内部细节。 其有两个含义:一是封装性,另一个是“信息隐蔽”。 一是把对象的全部属性和行为结合在一起,形成一个不可分割的独立单位。 尽可能隐蔽对象的内部细节,对外形成一道屏障,与外部的联系只能通过外部接口实现。,面向对象技术与Visual C+-第1章,33,继承性(Inheritance) 继承是一种联结类与类的层次模型。继承性是指特殊类的对象拥有其一般类的属性和行为的特性。 继承意味着“自动地拥有”,即特殊类中不必重新定义已在一般类中定义过的属性和行为,而它却自动地、隐含地拥有其一般类的属性与行为。,继承,面向对象技术与Visual C+-第1章,34,继承的分类: 1.按继承源划

18、分: 单继承 :每个派生类只直接继承了一个基类的特征 多继承:指多个基类派生出一个派生类的继承关系,多继承的派生类直接继承了不止一个基类的特征。,面向对象技术与Visual C+-第1章,35,2.按继承内容划分: 取代继承:派生类对象完整地继承了基类的所有“属性”和“操作”,且没有修改或增加新的“属性”和“操作”。 包含继承:派生类对象完整地继承了所有基类的所有“属性”和“操作”,并增加了新的“属性”和“操作”。 受限继承:派生类对象部分地继承了基类的“属性”和“操作”,并且没有增加新的“属性”和“操作”。 特化继承:派生类对象继承了基类的“属性”和“操作”,并对原有“属性”和“操作”进行了

19、修改。,面向对象技术与Visual C+-第1章,36,多态性(Polymorphism) 多态性是指类中同一函数名对应多个具有相似功能的不同函数,可以使用相同的调用方式来调用这些具有不同功能的同名函数的特性。,C+支持两种多态性:编译时的多态性和运行时的多态性。,重载:多个函数具有相同的名字但具有不同的作用。 函数重载 操作符重载 虚函数:虚函数使用户在一个类等级中可以使用相同 函数的多个版本。,面向对象技术与Visual C+-第1章,37,1.5 Windows程序设计的特点,(1)事件驱动的程序设计 (2)消息循环与输入 (3)图形输出 (4)用户界面对象 (5)资源共享 (6)Win

20、dows应用程序组成 (7) Windows应用程序生成,面向对象技术与Visual C+-第1章,38,(1)驱动程序设计的特点,A. 过程驱动不是面向用户的,交互性差,用户界面不够友好 ,用户按程序顺序设计 B. 事件驱动是一种“被动”式程序设计方法,程序开始运行时,处于等待用户输入事件状态,然后取得事件并作出相应反应,处理完毕又返回并处于等待事件状态,面向对象技术与Visual C+-第1章,39,A.过程驱动模型,面向对象技术与Visual C+-第1章,40,B.事件驱动程序模型,面向对象技术与Visual C+-第1章,41,(2)消息循环与输入,Windows应用程序的消息来源有

21、以下四种: (1)输入消息:包括键盘和鼠标的输入。 (2)控制消息:用来与Windows的控制对象,如列表框、按钮、检查框等进行双向通信。 (3)系统消息:对程序化的事件或系统时钟中断作出反应。 (4)用户消息:这是程序员自己定义并在应用程序中主动发出的,一般由应用程序的某一部分内部处理。,面向对象技术与Visual C+-第1章,42,GDI(图形设备接口):实现与设备无关的图形操作功能。 屏幕上绘制像素、打印输出,绘制用户界面包括窗口、菜单、对话框等。 内核KERNEL支持与操作系统的功能:如进程加载、文件I/O,以及内存、线程等。 USER为用户界面对象提供支持,它用于接收和管理所有输入

22、消息、系统消息并把它们发给相应的窗口的消息队列(一个系统定义的内存块,用于临时存储消息)或是把消息直接发给窗口过程。 每个窗口维护自己的消息队列,并从中取出消息,利用窗口函数进行处理。,Windows操作系统包括三个内核基本元件:GDI, KERNEL ,USER。,面向对象技术与Visual C+-第1章,43,面向对象技术与Visual C+-第1章,44,(3)图形输出,1.DOS程序独占整个显示屏幕,win程序控制一部分屏幕,通过Windows管理。 2. Windows程序的所有输出都是图形。Windows提供了丰富的图形函数用于图形输出,这对输出图形是相当方便的。 3.Window

23、s下的输出是设备无关, 应用程序是使用图形设备接口(GDI-graphics device interface)来进行图形输出 。,面向对象技术与Visual C+-第1章,45,(4)用户界面对象,Windows支持丰富的用户接口对象,包括:窗口、图标、菜单、对话框等等。程序员只需简单的几十行代码,就可以设计出一个非常漂亮的图形用户界面。而在DOS环境下,则需要大量的代码来完成同样的工作,而且效果也没有Windows提供的那么好。,面向对象技术与Visual C+-第1章,46,(5)资源共享,占用资源形式 对于DOS(单任务)程序来说,它运行时独占系统的全部资源,包括显示器、内存等,在程序

24、结束时才释放资源。 Windows是一个多任务的操作系统,各个应用程序共享系统提供的资源,常见的资源包括:设备上下文,画刷,画笔,字体,对话框控制,对话框,图标,定时器,插入符号,通信端口,电话线等。,面向对象技术与Visual C+-第1章,47,Windows应用程序要求资源基本模式 1.向Windows系统请求资源 2.使用该资源; 3.释放该资源给Windows以供别的程序使用 访问资源形式 Windows应用程序一般不能直接访问内存或其他硬件设备,如键盘、鼠标、计数器、屏幕或串口、并口等。Windows系统要求绝对控制这些资源,以保证向所有的应用程序提供公平的不中断的运行。 如果确实

25、要访问串并口,应当使用通过Windows提供的函数来安全的访问。,面向对象技术与Visual C+-第1章,48,(6)Windows应用程序组成,1.C,CPP源程序文件:源程序文件包含了应用程序的数据、类、功能逻辑模块的定义。 2.H,HPP头文件:头文件包含了CPP、C源文件中所有数据、模块、类的声明。当一个CPP、C源文件要调用另一个CPP、C中所定义的模块功能时,需要包含那个CPP、C文件对应的头文件。 3.资源文件:包含了应用程序所使用的全部资源定义,通常以.RC为后缀名。,面向对象技术与Visual C+-第1章,49,(7)应用程序生成过程,面向对象技术与Visual C+-第

26、1章,50,1.6常用面向对象程序设计语言简介,混合型面向对象程序设计语言C+ 纯面向对象程序设计语言Java 可视化程序设计语言Visual Basic,面向对象技术与Visual C+-第1章,51,1.混合型面向对象程序设计语言C+,C+作为一种面向对象程序设计语言,具有对象、类、消息等概念,同时支持面向对象技术的抽象性、封装性、继承性和多态性 。 特点: 语言超集,代码质量高、速度快、可移植性好; 强类型语言,编译阶段就能发现程序潜在错误,不会将错误带到运行阶段; 表达能力强,+的多继承是JAVA, C#等语言所没有的; 支持运算符重载,对象的运算更易表达且表达更加自然;,面向对象技术

27、与Visual C+-第1章,52,抽象能力强,函数模板和类模板提供更高级别的抽象; 内存管理高效,C+提供自动和人工回收两种方式; 异常处理加强,支持对象类型的异常; 支持名字空间,更加有利于大型软件工程项目; 非纯面向对象的语言,同时支持对象和模块描述程序结构。,面向对象技术与Visual C+-第1章,53,2.纯面向对象程序设计语言JAVA,Java是由SUN公司20世纪90年代初开发的一种纯面向对象程序设计语言。 Java作为一种解释型程序设计语言,具有简单性、面向对象性、平台无关性、可移植性、安全性、动态性和健壮性,不依赖于机器结构,并且提供了并发的机制,具有很高的性能; 它最大限

28、度地利用了网络,Java的应用程序(Applet)可在网络上传输,可以说是网络世界的通用语言;另外,Java还提供了丰富类库,使程序设计者可以方便地建立自己的系统。,面向对象技术与Visual C+-第1章,54,Java与C及C+的区别 不再有#include 和#define 等预处理功能 不再有structure,union及typedef 不再有指针、不再有多重继承 不再有操作符重载(Operatior Overloading) 取消自动类型转换,要求强制转换,面向对象技术与Visual C+-第1章,55,3.可视化程序设计语言Visual Basic,1991年Microsoft公

29、司推出了基于BASIC语言的可视化面向对象开发工具Visual Basic。 继承了BASIC语言所具有的语法简单、容易学习、容易使用、数据处理能力强的特点,又引入了面向对象、事件驱动的编程机制和可视化程序设计方法,大大降低了开发Windows应用程序的难度,有效地提高了应用程序开发的效率 ,还兼顾了高级编程技术 。 Visual Basic存在语法不严格、开发出的系统稳定性较低的缺点。相对Visual C+语言来说,Visual Basic面向系统底层的编程能力有限 。,面向对象技术与Visual C+-第1章,56,Visual C+ 6.0,特点 (1) 开发环境 由一套集成工具组成:文

30、本编辑器、资源编辑器项目建立工具、 优化编译器、源代码浏览器等 (2) 使用向导来简化应用程序的开发 各种向导 (Wizard),MFC类库,活动模板库 (3) 最快的集成数据库访问 ODBC,DAO (4) 强有力的Internet支持 WinInet,ActiveX,新增Internet类,面向对象技术与Visual C+-第1章,57,Visual C+.NET,Visual C+.net是Microsoft的新一代Visual C+.2000年6月22日推出。 .NET框架是构建并运行应用程序的平台。它的主要组件包括公共语言运行库(CLR)和.NET框架类库(FCL) 特点: (1).

31、NET框架提供了一个高端的语言互操作性。不同语言写成的程序都被编译成中间语言(Microsoft Intermediate Language,MSIL ),不同部分也能合并成为独立而统一的程序。 (2).NET框架的另一个好处是CLR的执行管理特性。CLR管理内存,安全性和其他特性,从而减轻了程序员在这方面的压力。 (3).NET框架还向程序员提供了丰富类库。编写.NET框架应用程序时,不必考虑Windows API、MFC、ATL、COM等技术,只需要使用FCL,面向对象技术与Visual C+-第1章,58,C#是在C,C+的基础上发展起来的,是一种有网络风格,面向对象的跨语言平台的程序设计语言。 C#没有了C+的一些特性:没有宏,模板,多重继承,指针及许多重载的操作符,当然还没有全局函数,全局变量,常量。每一样东西都得放在一个类中。,C#(C sharp),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1