面向对象程序设计主讲人:武云中国地质大学计算机学院《面向对象技术与VisualC++》--第1章2(1)掌握面向对象程序设计一般方法和特点。(2)熟练掌握C++语言的语法(3)掌握Windows程序设计的特点。(4)能够开发一般的基于API、MFC的Windows程序。(5)学会VC程序调试的一般方法。教学目标《面向对象技术与VisualC++》--第1章3上课认真听讲,下课认真复习多编程,勤实践联机帮助MSDN多看参考书籍、资料、别人代码学习方法《面向对象技术与VisualC++》--第1章4教材:《VC++面向对象程序设计》戴光明,李向编著高等教育出版社、中山大学出版社2005参考教材:1.甘玲邱劲主编《面向对象技术与VisualC++》清华大学出版社2.黄维通主编《VisualC++面向对象与可视化程序设计》清华大学出版社《面向对象技术与VisualC++》--第1章5学时:讲课:28上机:20考试形式:平时上课和上机情况:30%闭卷考试:70%《面向对象技术与VisualC++》--第1章6第1章面向对象技术概述计算机程序语言的发展程序设计方法发展历程面向对象技术的基本概念:对象,类,消息和事件面向对象技术的基本特征:抽象性,封装性,继承性,多态性Windows程序设计的特点常用面向对象语言简介《面向对象技术与VisualC++》--第1章71.1程序设计语言计算机程序设计语言(从低级语言到高级语言的发展过程)第一代:机器语言第二代:汇编语言第三代:算法语言,又称高级语言FORTRAN:科学计算、向量处理、并行处理ALGOL:通用算法语言COBOL(CommonBusiness-OrientedLanguage):商用数据处理BASIC、Pascal、C面向对象语言如:Simula、Eiffel、C++《面向对象技术与VisualC++》--第1章8机器语言和汇编语言由计算机硬件系统可以识别的二进制指令组成的语言称为机器语言。计算机发展的初期,软件工程师们只能用机器语言来编写程序。这一阶段,在人类的自然语言和计算机编程语言之间存在着巨大的鸿沟。汇编语言将机器指令映射为一些可以被人读懂的助记符,如ADD、SUB等。此时编程语言与人类自然语言间的鸿沟略有缩小,但仍与人类的思维相差甚远。因为它的抽象层次太低,程序员需要考虑大量的机器细节。《面向对象技术与VisualC++》--第1章9高级语言高级语言屏蔽了机器的细节,提高了语言的抽象层次,程序中可以采用具有一定含义的数据命名和容易理解的执行语句。这使得在书写程序时可以联系到程序所描述的具体事物。《面向对象技术与VisualC++》--第1章10面向对象语言出发点:更直接地描述客观世界中存在的事物(对象)以及它们之间的关系。特点:是高级语言。将客观事物看作具有属性和行为的对象。通过抽象找出同一类对象的共同属性和行为,形成类。通过类的继承与多态实现代码重用《面向对象技术与VisualC++》--第1章11优点:使程序能够比较直接地反映问题域的本来面目,软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发。《面向对象技术与VisualC++》--第1章12面向对象语言发展历程:•雏形阶段(六七十年代)–先驱:Simula语言:对象、类,支持继承–Ada:美国国防部,嵌入式实时系统–早期的Smalltalk•完善阶段(八十年代初期)–Smalltalk-80:大部分的面向对象概念•繁荣阶段(八十年代末以来)大批OO语言产生•纯OO语言:Smalltalk、Eiffel、Object-C–混合语言:C++、ObjectPascal•转向OOD和OOA(九十年代初期以来)–出现大量的OOA(面向对象的分析)、OOD(面向对象的设计)方法《面向对象技术与VisualC++》--第1章131.2程序设计方法的发展历程一、面向过程的结构化程序设计方法20世纪60年代诞生、七八十年代广泛使用的程序设计方法,语言工具有:PASCAL、C等。设计思路:自顶向下,逐步求精;程序结构按功能划分为若干个基本模块,这些模块形成一个树型结构;各模块间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、选择、循环三种基本结构组成;其模块化实现的具体方法是使用子程序。《面向对象技术与VisualC++》--第1章14优点:有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。存在问题:①是一种面向过程的程序设计方法,而“过程”和“操作”又是不稳定和多变的,因此不能直接反映人求解问题的思路。②维护程序的一致性困难。数据和过程相互独立,存在着用正确的程序模块调用错误的数据,或用错误的程序模块调用正确的数据的可能。因此,程序员必须时刻注意需要处理的数据格式。③程序代码可重用性差。程序中除少数标准库函数外,每设计一个程序时,程序员几乎从零做起。即使重用代码,通常也是通过拷贝或编辑重新生成一份。《面向对象技术与VisualC++》--第1章15二.面向对象程序设计方法(OOP,Object-OrientedProgramming)①面向对象程序设计是一种以对象为基础,以事件或消息来驱动对象执行处理的程序设计技术。②将数据及对数据的操作放在一起,作为相互依存、不可分割的整体来考虑,它采用数据抽象和信息隐藏技术,将对象和对对象的操作抽象成一种新的数据类型─类。《面向对象技术与VisualC++》--第1章16③这种方法集抽象性、封装性、继承性和多态性于一体,易于实现模块化、可重用、易维护、易扩充等功能。优点:程序模块间的关系更为简单,程序模块的独立性、数据的安全性就有了良好的保障。通过继承与多态性,可以大大提高程序的可重用性,使得软件的开发和维护都更为方便。《面向对象技术与VisualC++》--第1章17结构化程序设计的方法是把程序看作是工作在数据上的一系列过程或函数的集合。程序的定律是:程序=(算法)+(数据结构)面向对象方法把程序看作是互相协作而又彼此独立的对象的集合。对象间通过发送消息而相互作用。程序的定律是:对象=(算法+数据结构)程序=(对象+对象+……)《面向对象技术与VisualC++》--第1章18《面向对象技术与VisualC++》--第1章19实例:栈是一种由若干个按线性次序排列的元素所构成的复合数据,对栈能实施两种操作:进栈(增加一个元素)和退栈(删除一个元素),并且这两个操作必须在栈的同一端(栈顶)进行。后进先出(LIFO)是栈的一个重要性质。1)结构化方案#includeiostream.h#defineSTACK_SIZE100structStack//栈的结构体{inttop;intbuffer[STACK_SIZE];};voidinit(Stack&s)//对栈初始化的函数{s.top=-1;}《面向对象技术与VisualC++》--第1章20boolpush(Stack&s,inti)//进栈操作{if(s.top==STACK_SIZE-1){printf(“Stackisoverflow.\n”);returnfalse;}else{s.top++;s.buffer[s.top]=i;returntrue;}}《面向对象技术与VisualC++》--第1章21boolpop(Stack&s,int&i)//出栈操作{if(s.top==-1){printf(“Stackisempty.\n”);returnfalse;}else{i=s.buffer[s.top];s.top--;returntrue;}}《面向对象技术与VisualC++》--第1章22对栈的使用可由两种方式:(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--;《面向对象技术与VisualC++》--第1章232)面向对象方案#includeiostream.h#defineSTACK_SIZE100classStack//定义stack类,将数据和操作放在一起{private:inttop;intbuffer[STACK_SIZE];public:Stack(){top=-1;}//构造函数,对栈进行初始化boolpush(inti);//进栈函数{if(top==STACK_SIZE-1){printf(“Stackisoverflow.\n”);returnfalse;}else{top++;buffer[top]=i;returntrue;}}《面向对象技术与VisualC++》--第1章24boolpop(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;//error《面向对象技术与VisualC++》--第1章251.3面向对象的基本概念对象(Object)一般意义上的对象:是现实世界中一个实际存在的事物。可以是有形的(比如一辆汽车),也可以是无形的(比如一项计划)。是构成世界的一个独立单位,具有:静态特征:可以用某种数据来描述动态特征:对象所表现的行为或具有的功能《面向对象技术与VisualC++》--第1章26面向对象方法中的对象:是系统中用来描述客观事物的一个实体,它是用来构成系统的一个基本单位。对象由一组属性和一组行为构成。属性:用来描述对象静态特征的数据项。行为:用来描述对象动态特征的操作序列。《面向对象技术与VisualC++》--第1章27例如有一个人名叫小明,性别男,身高1.80m,体重68kg,可以修电器,可以教计算机课,下面来描述这个对象对象的功能(可做的操作):回答身高回答体重均属于自身所承受的操作回答性别修理电器属于施加与其他对象的操作教计算机课对象名:小明对象的状态:性别:男身高:1.80m体重:68kg《面向对象技术与VisualC++》--第1章28类(class)类是具有相同属性和行为的一组对象的集合,它为属于它的全部对象提供了统一的抽象描述,其内部包括属性和行为两个主要部分。类是对象集合的再抽象。类与实例的关系:组成类的对象均为此类的实例(Instance)。类是多个实例的综合抽象,实例是类的个体实物。《面向对象技术与VisualC++》--第1章29人类的定义:classHUMANKIND{char*name;doubleweight;public:voideat();voidwear();voidsleep();voidtravel();};人类的实例:HUMANKINDXiaoMing;特征、属性、数据成员行为、操作、函数成员《面向对象技术与VisualC++》--第1章30消息和事件消息(Message)是描述事件发生的信息,它是对象之间发出的行为请求。多个消息构成一个事件。消息具有三个性质:(1)同一对象可接收不同形式的多个消息,产生不同的响应;(2)相同形式的消息可以送给不同的对象,所作出的响应可以是截然不同的;(3)消息的发送可以不考虑具体的接收者,对象可以响应消息,也可以对消息不予理会,对消息的响应并不是必须的。《面向对象技术与VisualC++》--第1章311.4面向对象技术的基本特征抽象性(Abstract)抽象就是忽略事物中与当前目标无关的非本质特征,更充分地注意与当前目标有关的本质特征。《面向对象技术与V