【文档说明】面向对象概述课件.ppt,共(33)页,495.500 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44884.html
以下为本文档部分文字说明:
01-面向对象概述NITSpring2007,LiuqiyuObject-OrientedProgramming2课程目标与要求学习目标掌握用C++进行面向对象编程的思想与方法;培养良好的编程风格和习惯;掌握Visua
lC++编程环境(IDE)的使用。教学要求平时作业和大作业不允许抄袭,否则记成0分;考勤和作业记入平时成绩。考核综合成绩=期末成绩×50%+平时成绩×20%+实验成绩×30%平时成绩=考勤(迟到、早退、旷课)+态度(课堂纪律)注:旷课一次扣4分,迟到一次扣2
分(若不够从总成绩扣)实验成绩=程序×50%+文档×10%+答辩×40%NITSpring2007,LiuqiyuObject-OrientedProgramming3面向对象的产生背景软件危机与程序设计
方法两种流行的程序设计方法面向过程的程序设计面向对象的程序设计(Object-OrientedProgramming)NITSpring2007,LiuqiyuObject-OrientedProgramming4面向过程的程序设计始于20世
纪70年代的结构化分析设计(StructuredAnalysisandDesign,SAD)方法。把一个系统看作是功能的集合,可以进行分解。程序=数据结构+算法软件程序由很多模块组成,这些模块就是过程,C语言中称为函数。在面向对象的程序设计语言中,这样的函数称为方法(Method)。int
getMax(intnum1,intnum2){if(num1>num2)returnnum1;elsereturnnum2;}NITSpring2007,LiuqiyuObject-OrientedProgramming5面向过程的程序设计自顶向下的设计方法把解决
的问题同一个过程关联,自顶向下功能分解,直到子问题足够简单,可以在相应的子过程中解决。结构化程序设计的结果是一个程序最终由若干过程组成,每一过程完成一个明确的功能。MainProblemBuildAPartBuildBPart…BuildFPartmain()Bu
ildA(…)BuildB(…)…BuildF(…)问题过程NITSpring2007,LiuqiyuObject-OrientedProgramming6面向过程的程序设计存在的缺陷:数据与过程分离靠直觉和顺序化,难以把复杂事物表达清楚;系统测试、调试
和升级维护困难。后果数据结构变化→处理该数据的算法修改(重写)过程的修改→子过程修改→波及到分解层……最痛苦的事情不是开始的编程,而是在以后修改它。NITSpring2007,LiuqiyuObje
ct-OrientedProgramming7面向对象的程序设计(OOP)发源于20世纪60年代,Simula语言中引入了类(Class)的概念;真正的面向对象程序设计是Smalltalk语言奠定基础的,“面向对象”一词也是Smalltalk
首先采用的;C++的问世促进面向对象技术的发展,也使之成为标准化的面向对象程序设计(ObjectOrientedProgramming)语言。OOP使程序能够比较直接地反问题域的本来面目,软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发。面向对象的程序设计和问
题求解力求符合人们日常自然的思维习惯,降低分解问题的难度和复杂性,提高整个求解过程的可控制性,可监测性和可维护性。NITSpring2007,LiuqiyuObject-OrientedProgramming8面向对象的程序设计
面向对象程序的基本元素为对象(Object)。程序结构一般由类的定义和类的使用两部分组成。程序中的一切操作都是通过向对象发送相应的消息来实现:对象接收到消息后,启动有关的方法完成相应的操作。Coad和Yourdon给出
了一个定义:面向对象=对象+类+继承+通信如果一个软件系统是使用这些概念设计和实现的,则我们认为这个软件系统是面向对象的。在面向过程软件开发中优先考虑的是过程抽象,在面向对象软件开发中优先考虑的是实体(问题论域的
对象)。NITSpring2007,LiuqiyuObject-OrientedProgramming9面向对象的程序设计优点对象的封装性彻底消除了传统结构方法中数据与操作分离所带来的种种问题,提高了程序的可复用性和可维护性;直观性
;可增加程序的模块性(Modularity)可提高程序的可复用性(Reusability)增加可扩展性(Extendibility)可改善程序的可维护性(Maintainability;可控制程序的复杂性可改进质量,降低成本NITSpring200
7,LiuqiyuObject-OrientedProgramming10面向对象的程序设计需要注意的地方面向对象需要完全改变每个人的思想以及开发文化;面向对象不仅仅是编程;面向对象需要更关注于需求、分析和设计;开发人员必须和用户紧密合作;面向对象的许多优点要经过较
长的时间才能显示出来;面向对象技术不能保证你能构建出正确的系统。面向对象语言:C++(混合型)Java(纯粹的面向对象语言)NITSpring2007,LiuqiyuObject-OrientedProgramm
ing11面向对象的基本概念对象对象是问题域中事物的抽象(对现实事物的逻辑描述)对象不能完全代表事物,只是对于现实事物的逻辑表达,或者可看作是一个符号。在面向对象程序设计中,对象是属性及其操作的封装体。对象的特性:⑴唯一标识名,区别其他对象;⑵属性(域),成员变量,静态特征;⑶
方法(操作、服务),描述对象执行的功能,动态特征。对象的成员仍然可以是一个对象,对象之间通过消息传递进行通信。NITSpring2007,LiuqiyuObject-OrientedProgramming12面向对象的基本概念对象现实生活中的
对象计算机中的对象的原型classCar{private:intcolor_number;intdoor_number;intspeed;public:voidbrake(){…}voidspeedU
p(){…};voidslowDown(){…}}NITSpring2007,LiuqiyuObject-OrientedProgramming13面向对象的基本概念类类(class)是对对象(object)的抽象和归纳,是一组具有相同数据结构和相
同操作的对象的集合。对象是类的实例,类是创建对象的模板。类的成员:⑴属性(域):封装在类中的变量;⑵方法(操作):函数成员;⑶构造函数:与类名相同,用来在创建对象时初始化。NITSpring2007,LiuqiyuObject-OrientedProgramming14面向对象的基本概
念类类成员:同类本身相关;用static修饰;可用类直接调用,无须实例化。实例成员:同特定实例相关;没有static修饰;构造函数总是实例成员。Personpp;//声明一个对象pp.setName(“zhang”);//通过方法改变对象的属性pp.setAge(20);
cout<<“Ageis”<<pp.getAge()<<endl;cout<<“Nameis”<<pp.getName()<<endl;cout<<“Heis”<<Person.nation<<endl;NITSpring2007,L
iuqiyuObject-OrientedProgramming15类的客户大部分应用中一个类往往是为其他类提供服务的,这些类被称为该类的“客户”。注意:这里的客户不是现实中的关系如:客户这个类A可以不是服务提供商这个类B的客户,而服务提供商这个类B是客户这个类A的客
户,原因:B这个类的方法需要客户类A提供处理的数据。虽然类可相互服务,但应该尽最大努力避免这种情况,否则会在代码管理与系统稳定性中造成问题。NITSpring2007,LiuqiyuObject-OrientedProgramming16面向对象的基本概念
消息客户/服务器模型:提供服务的类及实例是服务器,在接口中公布其提供的服务,隐藏实现细节,使用服务的程序是客户。消息:一个对象请求另一个对象服务的要求。消息内容:接受者名、调用方法名、必要参数。stringstr=“HelloWo
rld”;//新建一个string对象intlen=str.length();//通过调用str的length()方法,传递消息str=str.substr(0,11);//直观的方法名if(str==“Hello”){……}NITSpring2007,Liuqiy
uObject-OrientedProgramming17面向对象的基本概念封装封装是一种信息隐藏机制,制利用抽象数据类型将数据和基于数据的操作封装在一起,组成一个不可分割的独立实体。外界要改变一个对象的状态,也就是对它所包含的数据进行操作,只能向该对象
发出请求消息,然后由该对象的对应方法来改变其自身的状态。面向对象系统的封装单位是对象。类概念本身也具有封装意义,因为对象的特征由它所属的类说明来描述,但对象的封装比类的封装更具体化。封装的结果:隐
藏了复杂性,提高了易维护性,有利于代码复用和信息隐藏。NITSpring2007,LiuqiyuObject-OrientedProgramming18面向对象的基本概念信息隐藏(Informationhiding)如
果一个类想获取另一个类的信息,必须先征得同意,而不是直接拿来就用;意味着类模块中除了向外界提供的接口以外,还有大量不为外界所知的用以支持这些接口实现的属性和方法。NITSpring2007,LiuqiyuObje
ct-OrientedProgramming19面向对象的基本概念继承通过继承机制,派生类(子类)可以继承基类(父类)的数据和操作,实现代码重用。子类可从父类继承所有非private成员。子类中可添加特有的属性和方法,也可重写父类的行为和修改状态,以体现其个性。继承关系是传递的。即如
果有类C继承B,B(间接)继承A,则C(间接)继承A。一个类实际上继承了层次结构中在其上面的所有类的全部描述。单继承:一个父类多继承:多个父类NITSpring2007,LiuqiyuObject-Oriented
Programming20面向对象的基本概念继承C++支持多继承,Java只支持单继承,单Java通过接口来实现多继承的功能。AB1B2B3C1C2NITSpring2007,LiuqiyuObj
ect-OrientedProgramming21面向对象的基本概念多态相同的消息,产生不同的行为方式。同一个方法名的操作不仅仅定义一种行为,因此有比较强的表达能力和更多的用途。多态为描述客观事物提供了极大的能动性。重载(Overload):同一类中有多个同名的方法,但这些方法的
参数表不同(个数、类型)覆盖(Override)形式:子类中重新定义父类中具有相同署名(名字、参数)的方法。例…NITSpring2007,LiuqiyuObject-OrientedProgramming22面向对象的基本概念不同人对play()请求
的响应NITSpring2007,LiuqiyuObject-OrientedProgramming23面向对象的基本概念多态classAlpha{public:intprint(Strings){……
}intprint(charc){……}}重载classAlpha{public:intprint(Strings){……}}classBeta:publicAlpha{public:intprint(Strin
gs){……//实现的具体内容可能不一样}}覆盖NITSpring2007,LiuqiyuObject-OrientedProgramming24面向对象的软件工程面向对象的软件工程是面向对象方法在软件工程领域的全面应用。它包括:面向对象的分析(OOA)面向对象的设计
(OOD)面向对象的编程(OOP)面向对象的测试(OOT)面向对象的软件维护(OOSM)NITSpring2007,LiuqiyuObject-OrientedProgramming25面向对象的软件工程系统分析系统分析阶段应该扼要精
确地抽象出系统必须做什么,但是不关心如何去实现。面向对象的系统分析,直接用问题域中客观存在的事物建立模型中的对象,对单个事物及事物之间的关系,都保留他们的原貌,不做转换,也不打破原有界限而重新组合,因此能够很好地映射客观事物。设计针对系统的一个具体实现
运用面向对象的方法。其中包括两方面的工作:把OOA模型直接搬到OOD,作为OOD的一部分针对具体实现中的人机界面、数据存储、任务管理等因素补充一些与实现有关的部分。NITSpring2007,LiuqiyuObject-Orient
edProgramming26面向对象的软件工程编程OOP工作就是用一种面向对象的编程语言把OOD模型中的每个成分书写出来,是面向对象的软件开发最终落实的重要阶段。测试测试的任务是发现软件中的错误。在面向对象的软件测试中继续运用面向对象的概念与原则来
组织测试,以对象的类作为基本测试单位,可以更准确的发现程序错误并提高测试效率。维护将软件交付使用后,工作并没有完结,还要根据软件的运行情况和用户的需求,不断改进系统。使用面向对象的方法开发的软件,其程序与问题
域是一致的,因此,在维护阶段运用面向对象的方法可以大大提高软件维护的效率。面向对象概述C++HelloWorldNITSpring2007,LiuqiyuObject-OrientedProgramming28C++语言概述C++是由C发展成为
的以面向对象为主要特征的语言。作为C语言的超集,C++继承了C的所有优点,又对数据类型做了扩充,使得编译系统可以检查出更多类型错误。C++支持面向对象程序设计,通过类和对象的概念把数据和对数据的操作封装在一
起,通过派生、继承、重载和多态性等特征实现了软件重用和程序自动生成,使得大型复杂软件的构造和维护变得更加有效和容易。兼容性:C++与C完全兼容,很多用C编写的库函数和应用程序都可以为C++所用。但正是由于与C兼容,使得C++不是纯正的面向对象的语言,它既支持
面向对象程序设计,也支持面向过程设计。但我们应当注意用面向对象的思想进行设计,以发挥出C++的优势。NITSpring2007,LiuqiyuObject-OrientedProgramming29程序的开发过程编辑将源程序输入到计算机中,生成后
缀为cpp的磁盘文件。编译预处理过程:执行源程序中的预处理命令,如:include<….>将头文件加入到源程序中。编译:进行词法和语法分析,生成目标代码文件(.obj文件)。连接将多个源程序文件以及库中的某些文件连在一起,生成一个后缀为exe的可执行文件。运行调试NITSprin
g2007,LiuqiyuObject-OrientedProgramming30C++HelloWorld//2_1.cpp#include<iostream>usingnamespacestd;intmain(){cout<<"Hello!\n";cout<<"Welcometoc++
!\n";}运行结果:Hello!Welcometoc++!NITSpring2007,LiuqiyuObject-OrientedProgramming31一个C++程序实例#include<iostream.h>intmax(inti,intj){//Aif(i>=j)retur
ni;elsereturnj;}intmain(void){//Bcout<<″输入i,j:″;//显示提示信息inti,j;//说明变量cin>>i>>j;//从键盘上输入变量值cout<<″maxnumberis:″<<max(i,j)<<′\n′;//输出提示和结果re
turn0;}程序组成:注释编译预处理指令程序体由若干函数组成,其中有且仅有一个主函数main(),这是程序的执行入口。在Windows编程中定义为winmain()。NITSpring2007,Li
uqiyuObject-OrientedProgramming32上机实践谢谢大家请批评指正!