面向对象程序设计(2)_第1页
面向对象程序设计(2)_第2页
面向对象程序设计(2)_第3页
面向对象程序设计(2)_第4页
面向对象程序设计(2)_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

面向对象程序设计主讲人:武云中国地质大学计算机学院1《面向对象技术与VisualC++》--第1章(1)掌握面向对象程序设计一般方法和特点。(2)熟练掌握C++语言的语法(3)掌握Windows程序设计的特点。(4)能够开发一般的基于API、MFC的Windows程序。(5)学会VC程序调试的一般方法。教学目标0d58b4b8符皇/read/8/8973/2《面向对象技术与VisualC++》--第1章上课认真听讲,下课认真复习多编程,勤实践联机帮助MSDN多看参考书籍、资料、别人代码学习方法3《面向对象技术与VisualC++》--第1章教材:《VC++面向对象程序设计》戴光明,李向编著高等教育出版社、中山大学出版社2005参考教材:1.甘玲邱劲主编《面向对象技术与VisualC++》清华大学出版社2.黄维通主编《VisualC++面向对象与可视化程序设计》清华大学出版社4《面向对象技术与VisualC++》--第1章学时:讲课:40上机:16考试形式:平时上课和上机情况:30%闭卷考试:70%5《面向对象技术与VisualC++》--第1章第1章面向对象技术概述计算机程序语言的发展程序设计方法发展历程面向对象技术的基本概念:对象,类,消息和事件面向对象技术的基本特征:抽象性,封装性,继承性,多态性Windows程序设计的特点常用面向对象语言简介6《面向对象技术与VisualC++》--第1章1.1程序设计语言计算机程序设计语言(从低级语言到高级语言的发展过程)第一代:机器语言

第二代:汇编语言第三代:算法语言,又称高级语言FORTRAN:科学计算、向量处理、并行处理ALGOL:通用算法语言COBOL(CommonBusiness-OrientedLanguage):商用数据处理BASIC、Pascal、C面向对象语言如:Simula、Eiffel、C++7《面向对象技术与VisualC++》--第1章机器语言和汇编语言由计算机硬件系统可以识别的二进制指令组成的语言称为机器语言。计算机发展的初期,软件工程师们只能用机器语言来编写程序。这一阶段,在人类的自然语言和计算机编程语言之间存在着巨大的鸿沟。汇编语言将机器指令映射为一些可以被人读懂的助记符,如ADD、SUB等。此时编程语言与人类自然语言间的鸿沟略有缩小,但仍与人类的思维相差甚远。因为它的抽象层次太低,程序员需要考虑大量的机器细节。8《面向对象技术与VisualC++》--第1章高级语言

高级语言屏蔽了机器的细节,提高了语言的抽象层次,程序中可以采用具有一定含义的数据命名和容易理解的执行语句。这使得在书写程序时可以联系到程序所描述的具体事物。9《面向对象技术与VisualC++》--第1章面向对象语言出发点:更直接地描述客观世界中存在的事物(对象)以及它们之间的关系。特点:是高级语言。将客观事物看作具有属性和行为的对象。通过抽象找出同一类对象的共同属性和行为,形成类。通过类的继承与多态实现代码重用10《面向对象技术与VisualC++》--第1章

优点:使程序能够比较直接地反映问题域的本来面目,软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发。11《面向对象技术与VisualC++》--第1章面向对象语言发展历程:雏形阶段(六七十年代)

先驱:Simula语言:对象、类,支持继承Ada:美国国防部,嵌入式实时系统早期的Smalltalk完善阶段(八十年代初期)

Smalltalk-80:大部分的面向对象概念繁荣阶段(八十年代末以来)大批OO语言产生纯OO语言:Smalltalk、Eiffel、Object-C混合语言:C++、ObjectPascal转向OOD和OOA(九十年代初期以来)

出现大量的OOA(面向对象的分析)、OOD(面向对象的设计)方法12《面向对象技术与VisualC++》--第1章1.2程序设计方法的发展历程一、面向过程的结构化程序设计方法20世纪60年代诞生、七八十年代广泛使用的程序设计方法,语言工具有:PASCAL、C等。设计思路:自顶向下,逐步求精;程序结构按功能划分为若干个基本模块,这些模块形成一个树型结构;各模块间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、选择、循环三种基本结构组成;其模块化实现的具体方法是使用子程序。13《面向对象技术与VisualC++》--第1章优点:有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。存在问题:①是一种面向过程的程序设计方法,而“过程”和“操作”又是不稳定和多变的,因此不能直接反映人求解问题的思路。②维护程序的一致性困难。数据和过程相互独立,存在着用正确的程序模块调用错误的数据,或用错误的程序模块调用正确的数据的可能。因此,程序员必须时刻注意需要处理的数据格式。③程序代码可重用性差。程序中除少数标准库函数外,每设计一个程序时,程序员几乎从零做起。即使重用代码,通常也是通过拷贝或编辑重新生成一份。14《面向对象技术与VisualC++》--第1章二.面向对象程序设计方法(OOP,Object-OrientedProgramming)

面向对象程序设计是一种以对象为基础,以事件或消息来驱动对象执行处理的程序设计技术。②将数据及对数据的操作放在一起,作为相互依存、不可分割的整体来考虑,它采用数据抽象和信息隐藏技术,将对象和对对象的操作抽象成一种新的数据类型─类。15《面向对象技术与VisualC++》--第1章

③这种方法集抽象性、封装性、继承性和多态性于一体,易于实现模块化、可重用、易维护、易扩充等功能。优点:程序模块间的关系更为简单,程序模块的独立性、数据的安全性就有了良好的保障。通过继承与多态性,可以大大提高程序的可重用性,使得软件的开发和维护都更为方便。16《面向对象技术与VisualC++》--第1章

结构化程序设计的方法是把程序看作是工作在数据上的一系列过程或函数的集合。程序的定律是:

程序=(算法)+(数据结构)

面向对象方法把程序看作是互相协作而又彼此独立的对象的集合。对象间通过发送消息而相互作用。程序的定律是:

对象=(算法+数据结构)程序=(对象+对象+……)

17《面向对象技术与VisualC++》--第1章18《面向对象技术与VisualC++》--第1章实例:栈是一种由若干个按线性次序排列的元素所构成的复合数据,对栈能实施两种操作:进栈(增加一个元素)和退栈(删除一个元素),并且这两个操作必须在栈的同一端(栈顶)进行。后进先出(LIFO)是栈的一个重要性质。

1)结构化方案#include<iostream.h>#defineSTACK_SIZE100structStack//栈的结构体{inttop;

intbuffer[STACK_SIZE];};voidinit(Stack&s)//对栈初始化的函数{s.top=-1;}19《面向对象技术与VisualC++》--第1章bool

push(Stack&s,inti)//进栈操作{if(s.top==STACK_SIZE-1){printf(“Stackisoverflow.\n”);returnfalse;}else{s.top++;s.buffer[s.top]=i;returntrue;}}20《面向对象技术与VisualC++》--第1章bool

pop(Stack&s,int&i)//出栈操作{if(s.top==-1){printf(“Stackisempty.\n”);returnfalse;}else{i=s.buffer[s.top];s.top--;returntrue;}}21《面向对象技术与VisualC++》--第1章对栈的使用可由两种方式:(1)可以通过提供的函数来实现,Stackst;intx;init(st);push(st,12);pop(st,x);(2)也可以直接在栈的数据表示上直接进行

st.top=-1;st.top++;st.buffer[st.top]=12;x=st.buffer[st.top];st.top--;22《面向对象技术与VisualC++》--第1章2)面向对象方案#include<iostream.h>#defineSTACK_SIZE100classStack//定义stack类,将数据和操作放在一起{private:

inttop;

intbuffer[STACK_SIZE];

public: Stack(){top=-1;}//构造函数,对栈进行初始化

bool

push(inti);//进栈函数 {if(top==STACK_SIZE-1){printf(“Stackisoverflow.\n”); returnfalse;} else {top++;buffer[top]=i; returntrue; }}23《面向对象技术与VisualC++》--第1章bool

pop(int&i);{if(top==-1){printf(“Stackisempty.\n”); returnfalse;}else{i=buffer[top];top--; returntrue;}}};Stackst;intx;st.push(12);st.pop(x);

st.top=-1;//errorst.top++;//errorst.buffer[st.top]=12;//error24《面向对象技术与VisualC++》--第1章1.3面向对象的基本概念对象(Object)一般意义上的对象:是现实世界中一个实际存在的事物。可以是有形的(比如一辆汽车),也可以是无形的(比如一项计划)。是构成世界的一个独立单位,具有:静态特征:可以用某种数据来描述动态特征:对象所表现的行为或具有的功能25《面向对象技术与VisualC++》--第1章

面向对象方法中的对象:是系统中用来描述客观事物的一个实体,它是用来构成系统的一个基本单位。对象由一组属性和一组行为构成。属性:用来描述对象静态特征的数据项。行为:用来描述对象动态特征的操作序列。26《面向对象技术与VisualC++》--第1章例如有一个人名叫小明,性别男,身高1.80m,体重68kg,可以修电器,可以教计算机课,下面来描述这个对象对象的功能(可做的操作):回答身高回答体重均属于自身所承受的操作回答性别修理电器属于施加与其他对象的操作教计算机课对象名:小明对象的状态:性别:男身高:1.80m体重:68kg27《面向对象技术与VisualC++》--第1章类(class)类是具有相同属性和行为的一组对象的集合,它为属于它的全部对象提供了统一的抽象描述,其内部包括属性和行为两个主要部分。类是对象集合的再抽象。类与实例的关系:

组成类的对象均为此类的实例(Instance)。

类是多个实例的综合抽象,实例是类的个体实物。28《面向对象技术与VisualC++》--第1章人类的定义:

classHUMANKIND{ char*name; doubleweight; public: voideat(); void wear(); void sleep(); void travel();};人类的实例:HUMANKINDXiaoMing;特征、属性、数据成员行为、操作、函数成员29《面向对象技术与VisualC++》--第1章消息和事件消息(Message)是描述事件发生的信息,它是对象之间发出的行为请求。多个消息构成一个事件。

消息具有三个性质:(1)同一对象可接收不同形式的多个消息,产生不同的响应;

(2)相同形式的消息可以送给不同的对象,所作出的响应可以是截然不同的;(3)消息的发送可以不考虑具体的接收者,对象可以响应消息,也可以对消息不予理会,对消息的响应并不是必须的。

30《面向对象技术与VisualC++》--第1章1.4面向对象技术的基本特征

抽象性(Abstract)抽象就是忽略事物中与当前目标无关的非本质特征,更充分地注意与当前目标有关的本质特征。31《面向对象技术与VisualC++》--第1章封装性(Encapsulation)封装就是把对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节。其有两个含义:一是封装性,另一个是“信息隐蔽”。一是把对象的全部属性和行为结合在一起,形成一个不可分割的独立单位。尽可能隐蔽对象的内部细节,对外形成一道屏障,与外部的联系只能通过外部接口实现。

32《面向对象技术与VisualC++》--第1章继承性(Inheritance)继承是一种联结类与类的层次模型。继承性是指特殊类的对象拥有其一般类的属性和行为的特性。继承意味着“自动地拥有”,即特殊类中不必重新定义已在一般类中定义过的属性和行为,而它却自动地、隐含地拥有其一般类的属性与行为。车洒水车父类/基类子类/派生类继承33《面向对象技术与VisualC++》--第1章继承的分类:1.按继承源划分:单继承:每个派生类只直接继承了一个基类的特征多继承:指多个基类派生出一个派生类的继承关系,多继承的派生类直接继承了不止一个基类的特征。ABCBA34《面向对象技术与VisualC++》--第1章2.按继承内容划分:取代继承:派生类对象完整地继承了基类的所有“属性”和“操作”,且没有修改或增加新的“属性”和“操作”。包含继承:派生类对象完整地继承了所有基类的所有“属性”和“操作”,并增加了新的“属性”和“操作”。受限继承:派生类对象部分地继承了基类的“属性”和“操作”,并且没有增加新的“属性”和“操作”。特化继承:派生类对象继承了基类的“属性”和“操作”,并对原有“属性”和“操作”进行了修改。35《面向对象技术与VisualC++》--第1章多态性(Polymorphism)多态性是指类中同一函数名对应多个具有相似功能的不同函数,可以使用相同的调用方式来调用这些具有不同功能的同名函数的特性。

C++支持两种多态性:编译时的多态性和运行时的多态性。

重载:多个函数具有相同的名字但具有不同的作用。 函数重载操作符重载虚函数:虚函数使用户在一个类等级中可以使用相同函数的多个版本。

36《面向对象技术与VisualC++》--第1章1.5Windows程序设计的特点

(1)事件驱动的程序设计

(2)消息循环与输入

(3)图形输出

(4)用户界面对象

(5)资源共享

(6)Windows应用程序组成

(7)

Windows应用程序生成37《面向对象技术与VisualC++》--第1章(1)驱动程序设计的特点A.过程驱动——不是面向用户的,交互性差,用户界面不够友好,用户按程序顺序设计B.事件驱动——是一种“被动”式程序设计方法,程序开始运行时,处于等待用户输入事件状态,然后取得事件并作出相应反应,处理完毕又返回并处于等待事件状态38《面向对象技术与VisualC++》--第1章

A.过程驱动模型

39《面向对象技术与VisualC++》--第1章B.事件驱动程序模型

40《面向对象技术与VisualC++》--第1章(2)消息循环与输入

Windows应用程序的消息来源有以下四种:(1)输入消息:包括键盘和鼠标的输入。(2)控制消息:用来与Windows的控制对象,如列表框、按钮、检查框等进行双向通信。(3)系统消息:对程序化的事件或系统时钟中断作出反应。(4)用户消息:这是程序员自己定义并在应用程序中主动发出的,一般由应用程序的某一部分内部处理。41《面向对象技术与VisualC++》--第1章GDI(图形设备接口):实现与设备无关的图形操作功能。屏幕上绘制像素、打印输出,绘制用户界面包括窗口、菜单、对话框等。内核KERNEL支持与操作系统的功能:如进程加载、文件I/O,以及内存、线程等。USER为用户界面对象提供支持,它用于接收和管理所有输入消息、系统消息并把它们发给相应的窗口的消息队列(一个系统定义的内存块,用于临时存储消息)或是把消息直接发给窗口过程。每个窗口维护自己的消息队列,并从中取出消息,利用窗口函数进行处理。Windows操作系统包括三个内核基本元件:GDI,KERNEL,USER。42《面向对象技术与VisualC++》--第1章43《面向对象技术与VisualC++》--第1章(3)图形输出1.DOS程序独占整个显示屏幕,win程序控制一部分屏幕,通过Windows管理。2.Windows程序的所有输出都是图形。Windows提供了丰富的图形函数用于图形输出,这对输出图形是相当方便的。

3.Windows下的输出是设备无关,应用程序是使用图形设备接口(GDI-graphicsdeviceinterface)来进行图形输出。44《面向对象技术与VisualC++》--第1章(4)用户界面对象Windows支持丰富的用户接口对象,包括:窗口、图标、菜单、对话框等等。程序员只需简单的几十行代码,就可以设计出一个非常漂亮的图形用户界面。而在DOS环境下,则需要大量的代码来完成同样的工作,而且效果也没有Windows提供的那么好。45《面向对象技术与VisualC++》--第1章(5)资源共享

占用资源形式对于DOS(单任务)程序来说,它运行时独占系统的全部资源,包括显示器、内存等,在程序结束时才释放资源。

Windows是一个多任务的操作系统,各个应用程序共享系统提供的资源,常见的资源包括:设备上下文,画刷,画笔,字体,对话框控制,对话框,图标,定时器,插入符号,通信端口,电话线等。

46《面向对象技术与VisualC++》--第1章Windows应用程序要求资源基本模式

1.向Windows系统请求资源

2.使用该资源;

3.释放该资源给Windows以供别的程序使用访问资源形式

Windows应用程序一般不能直接访问内存或其他硬件设备,如键盘、鼠标、计数器、屏幕或串口、并口等。Windows系统要求绝对控制这些资源,以保证向所有的应用程序提供公平的不中断的运行。

如果确实要访问串并口,应当使用通过Windows提供的函数来安全的访问。47《面向对象技术与VisualC++》--第1章(6)Windows应用程序组成

1.C,CPP源程序文件:源程序文件包含了应用程序的数据、类、功能逻辑模块的定义。

2.H,HPP头文件:头文件包含了CPP、C源文件中所有数据、模块、类的声明。当一个CPP、C源文件要调用另一个CPP、C中所定义的模块功能时,需要包含那个CPP、C文件对应的头文件。

3.资源文件:包含了应用程序所使用的全部资源定义,通常以.RC为后缀名。48《面向对象技术与VisualC++》--第1章(7)应用程序生成过程

49《面向对象技术与VisualC++》--第1章1.6常用面向对象程序设计语言简介

混合型面向对象程序设计语言C++纯面向对象程序设计语言Java可视化程序设计语言VisualBasic50《面向对象技术与VisualC++》--第1章1.混合型面向对象程序设计语言C++

C++作为一种面向对象程序设计语言,具有对象、类、消息等概念,同时支持面向对象技术的抽象性、封装性、继承性和多态性。特点:C语言超集,代码质量高、速度快、可移植性好;强类型语言,编译阶段就能发现程序潜在错误,不会将错误带到运行阶段;表达能力强,C++的多继承是JAVA,C#等语言所没有的;支持运算符重载,对象的运算更易表达且表达更加自然;51《面向对象技术与VisualC++》--第1章抽象能力强,函数模板和类模板提供更高级别的抽象;内存管理高效,C++提供自动和人工回收两种方式;异常处理加强,支持对象类型的异常;支持名字空间,更加有利于大型软件工程项目;非纯面向对象的语言,同时支持对象和模块描述程序结构。52《面向对象技术与VisualC++》--第1章2.纯面向对象程序设计语言JAVA

Java是由SUN公司20世纪90年代初开发的一种纯面向对象程序设计语言。Java作为一种解释型程序设计语言,具有简单性、面向对象性、平台无关性、可移植性、安全性、动态性和健壮性,不依赖于机器结构,并且提供了并发的机制,具有很高的性能;它最大限度地利用了网络,Java的应用程序(Applet)可在网络上传输,可以说是网络世界的通用语言;另外,Java还提供了丰富类库,使程序设计者可以方便地建立自己的系统。53《面向对象技术与VisualC++》--第1章Java与C及C++的区别不再有#include和#define等预处理功能不再有structure,union及typedef不再有指针、不再有多重继承不再有操作符重载(OperatiorOverloading)取消自动类型转换,要求强制转换54《面向对象技术与VisualC++》--第1章3.可视化程序设计语言VisualBasic

1991年Microsoft公司推出了基于BASIC

温馨提示

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

评论

0/150

提交评论