1、C+程序设计目录目录1234面向对象程序设计概述面向对象程序设计概述5C+基础知识基础知识类和对象类和对象继承与组合继承与组合多态性与虚函数多态性与虚函数目录目录6789面向对象的妥协面向对象的妥协10运算符重载运算符重载模板模板输入输出流输入输出流异常处理异常处理第第1章章 面向对象程序设计概述面向对象程序设计概述本章从一个小型的学生信息管理系统的面向过程程序设计出发,讨论了传统的面向过程程序设计方法的不足,进而引出面向对象程序设计方法,介绍面向对象程序设计的编程思想,面向对象程序设计的基本概念,面向对象程序设计的优点。最后简单介绍面向对象的软件开发。本章内容简介本章内容简介第第1章章 面向
2、对象程序设计面向对象程序设计本章学习目标本章学习目标1.了解传统的面向过程程序设计方法的不足2.掌握面向对象程序设计的编程思想3.理解并掌握面向对象程序设计的基本概念4.领会面向对象程序设计的优点5.了解面向对象的软件开发工程第第1章章 面向对象程序设计面向对象程序设计v面向过程程序设计的基本思想:面向过程程序设计的基本思想:功能分解功能分解、逐步求精逐步求精、模块化模块化、结构化结构化。1.1 面向过程程序设计面向过程程序设计第第1章章 面向对象程序设计面向对象程序设计v【例例1-1】运用面向过程程序设计方法设计一个小型运用面向过程程序设计方法设计一个小型的学生信息管理系统。该系统要管理的学
3、生信息包的学生信息管理系统。该系统要管理的学生信息包括:学号括:学号(Num)、姓名、姓名(Name)、性别、性别(Sex)、出生、出生日期日期(Birthday)、三门课成绩、三门课成绩英语英语(English)、数、数据结构据结构(DataStructure)、C+程序设计程序设计(CPlusPlus)、总成绩、总成绩(Sum)、平均成绩、平均成绩(Average),学生信,学生信息表如表息表如表1-1所示。所示。1.1 面向过程程序设计面向过程程序设计第第1章章 面向对象程序设计面向对象程序设计学号学号姓名姓名性性别别出生出生日期日期英语英语成绩成绩数据结数据结构成绩构成绩C+C+成绩成
4、绩总成绩总成绩平均成绩平均成绩2007020200120070202001邓光辉邓光辉男男89-02-0589-02-0587878888909026526588.388.32007020200220070202002杜丽丽杜丽丽女女90-09-2090-09-2079798080757523423478.078.02007020200320070202003姜志远姜志远男男90-11-0890-11-0868688484707022222274.074.02007020200420070202004张大伟张大伟男男88-08-0588-08-0570706767828221921973.07
5、3.0表表1-1 1-1 学生信息表学生信息表 第第1章章 面向对象程序设计面向对象程序设计v该学生信息管理系统要具有如下功能该学生信息管理系统要具有如下功能:(1)显示学生信息显示学生信息:显示全部学生的信息。:显示全部学生的信息。(2)查询学生信息查询学生信息:按学号或姓名查询学生信息,:按学号或姓名查询学生信息,查询结果直接显示在屏幕上。查询结果直接显示在屏幕上。(3)添加学生信息添加学生信息:对学生信息进行添加。:对学生信息进行添加。(4)修改学生信息修改学生信息:按学号修改学生信息。:按学号修改学生信息。1.1 面向过程程序设计(续)面向过程程序设计(续)第第1章章 面向对象程序设计
6、面向对象程序设计v该学生信息管理系统要具有如下功能该学生信息管理系统要具有如下功能:(续)(续)(5)删除学生信息删除学生信息:按学号删除学生信息。:按学号删除学生信息。(6)统计学生成绩统计学生成绩:统计每个学生的总成绩和平均成:统计每个学生的总成绩和平均成绩,或统计所有学生某一门课的总成绩和平均成绩。绩,或统计所有学生某一门课的总成绩和平均成绩。(7)学生信息排序学生信息排序:按学号、总成绩或某一门课成绩:按学号、总成绩或某一门课成绩排序。排序。(8)备份学生信息备份学生信息:把所有学生信息备份一份。:把所有学生信息备份一份。1.1 面向过程程序设计(续)面向过程程序设计(续)实现该系统的
7、实现该系统的C程序框架程序框架/*学生信息管理系统C语言源代码student.c*/#include /*包含输入/输出头文件*/#include /*包含字符串处理头文件*/typedef struct /*用于存放生日信息的结构体*/int year;int month;int day;Date;实现该系统的实现该系统的C程序框架程序框架(续续)typedef struct /*用于存放学生信息的结构体*/char Num15;char Name10;char Sex;float English;/*英语课成绩*/float DataStructure;/*数据结构课成绩*/float C
8、PlusPlus;/*C+课成绩*/float Sum,Average;/*总成绩、平均成绩*/Student;实现该系统的实现该系统的C程序框架程序框架(续续)/*用于存放读入内存中的所有学生信息的全局数组*/Student stud100;int count=0;/*存放实际学生人数的全局变量*/*各自定义函数原型声明*/void ReadData();/*读取学生信息到全局数组stud中*/void Display();/*显示学生信息*/void Search();/*查询学生信息*/void SearchNum();/*按学号查询学生信息*/void SearchName();/*按
9、姓名查询学生信息*/void BackupData();/*备份学生信息*/实现该系统的实现该系统的C程序框架程序框架(续续)void main()/*系统功能以菜单的形式提供给用户*/char choice;ReadData();for(;)/*显示系统功能菜单*/printf(*学生信息管理系统*n);printf(*n);printf(“*1显示学生信息 *n);printf(*2查询学生信息 *n);实现该系统的实现该系统的C程序框架程序框架(续续)printf(*8备份学生信息 *n);printf(“*0退出系统 *n);printf(*n);printf(请选择要执行的操作(08
10、):_ n);scanf(%c,&choice);switch(choice)case 1:Display();break;case 2:Search();break;case 0:return;default:printf(选择错误!请重新选择。n);/*switch结束*/实现该系统的实现该系统的C程序框架程序框架(续续)/*for结束*/*main函数结束*/*各自定义函数实现代码*/void ReadData()void Display()void Search()第第1章章 面向对象程序设计面向对象程序设计v从上述学生信息管理系统的从上述学生信息管理系统的C程序框架可以看出,运程序框
11、架可以看出,运用面向过程程序设计方法所设计出来的程序,用面向过程程序设计方法所设计出来的程序,数据和数据和操作数据的函数是分离的。操作数据的函数是分离的。所有数据都是公用的,一所有数据都是公用的,一个函数可以使用任何一组数据,而一组数据又能被多个函数可以使用任何一组数据,而一组数据又能被多个函数所使用。个函数所使用。用面向过程程序设计方法所设计出来用面向过程程序设计方法所设计出来的程序模型如图的程序模型如图1-1所示。所示。1.1 面向过程程序设计(续)面向过程程序设计(续)图1-1 面向过程程序设计的程序模型第第1章章 面向对象程序设计面向对象程序设计v面向过程的结构化程序设计在面向过程的结
12、构化程序设计在20世纪世纪60年代末、年代末、70年代初从一定程度上缓解了当时的年代初从一定程度上缓解了当时的“软件危机软件危机”,它,它在处理较小规模的程序时比较有效。但是,随着人们在处理较小规模的程序时比较有效。但是,随着人们对大规模软件需求的增长,面向过程的结构化程序设对大规模软件需求的增长,面向过程的结构化程序设计逐渐显示出它的不足,具体表现在:计逐渐显示出它的不足,具体表现在:1.1 面向过程程序设计(续)面向过程程序设计(续)第第1章章 面向对象程序设计面向对象程序设计面向过程的结构化程序设计的不足面向过程的结构化程序设计的不足:v1程序设计困难,生产率低下程序设计困难,生产率低下
13、v2数据不安全数据不安全v3程序修改困难程序修改困难v4代码重用程度低代码重用程度低1.1 面向过程程序设计(续)面向过程程序设计(续)第第1章章 面向对象程序设计面向对象程序设计1.2.1 面向对象的编程思想面向对象的编程思想 具体地讲,面向对象编程的基本思想如下:具体地讲,面向对象编程的基本思想如下:v 1.客观世界中的事物都是对象(客观世界中的事物都是对象(object),对象),对象之间存在一定的关系。之间存在一定的关系。v 2用对象的属性(用对象的属性(attribute)描述事物的静态特)描述事物的静态特征,用对象的操作(征,用对象的操作(operation)描述事物的行为)描述事
14、物的行为(动态特征)。(动态特征)。1.2 面向对象程序设计面向对象程序设计第第1章章 面向对象程序设计面向对象程序设计1.2.1 面向对象的编程思想面向对象的编程思想(续)(续)v3对象的属性和操作结合为一体,形成一个相对独对象的属性和操作结合为一体,形成一个相对独立、不可分的实体。对象对外屏蔽其内部细节,只留立、不可分的实体。对象对外屏蔽其内部细节,只留下少量接口,以便与外界联系。下少量接口,以便与外界联系。v4通过抽象对对象进行分类,把具有相同属性和相通过抽象对对象进行分类,把具有相同属性和相同操作的对象归为一类,类是这些对象的抽象描述,同操作的对象归为一类,类是这些对象的抽象描述,每个
15、对象是其所属类的一个实例。每个对象是其所属类的一个实例。第第1章章 面向对象程序设计面向对象程序设计1.2.1 面向对象的编程思想面向对象的编程思想(续)(续)v5复杂的对象可以用简单的对象作为其构成部分。复杂的对象可以用简单的对象作为其构成部分。v6通过在不同程度上运用抽象的原则,可以得到一通过在不同程度上运用抽象的原则,可以得到一般类和特殊类。特殊类继承一般类的属性与操作,从般类和特殊类。特殊类继承一般类的属性与操作,从而简化系统的构造过程。而简化系统的构造过程。v7对象之间通过传递消息进行通信,以实现对象之对象之间通过传递消息进行通信,以实现对象之间的动态联系。间的动态联系。v8通过关联
16、表达类之间的静态关系。通过关联表达类之间的静态关系。第第1章章 面向对象程序设计面向对象程序设计1.2.2 面向对象的基本概念面向对象的基本概念(续)(续)1对象对象 可以从两个角度来理解对象。一个角度是现实世界,可以从两个角度来理解对象。一个角度是现实世界,另一个角度是我们所建立的软件系统。另一个角度是我们所建立的软件系统。第第1章章 面向对象程序设计面向对象程序设计1.2.2 面向对象的基本概念面向对象的基本概念(续)(续)1对象对象v现实世界中客观存在的任何一个事物都可以看成一个现实世界中客观存在的任何一个事物都可以看成一个对象对象(object)。或者说,现实世界是由千千万万个对。或者
17、说,现实世界是由千千万万个对象组成的。象组成的。v对象可以是有形的对象可以是有形的,如汽车、房屋、张三等,如汽车、房屋、张三等,也可以也可以是无形的是无形的,如社会生活中的一种逻辑结构:学校、军,如社会生活中的一种逻辑结构:学校、军队,甚至一篇文章、一个图形、一项计划等都可视作队,甚至一篇文章、一个图形、一项计划等都可视作对象。对象。第第1章章 面向对象程序设计面向对象程序设计1.2.2 面向对象的基本概念面向对象的基本概念(续)(续)1对象对象v对象可大可小对象可大可小。例如学校是一个对象,一个班级也是。例如学校是一个对象,一个班级也是一个对象,一个学生也是一个对象。同样,军队中的一个对象,
18、一个学生也是一个对象。同样,军队中的一个师,一个团,一个连,一个班都是对象。一个师,一个团,一个连,一个班都是对象。第第1章章 面向对象程序设计面向对象程序设计1.2.2 面向对象的基本概念面向对象的基本概念(续)(续)1对象对象v任何一个对象都具有两个要素:属性和行为任何一个对象都具有两个要素:属性和行为v属性属性用于描述客观事物的静态特征用于描述客观事物的静态特征v行为行为用于描述事物的动态特征。用于描述事物的动态特征。v例如,一个人是一个对象,他有姓名、性别、身高、例如,一个人是一个对象,他有姓名、性别、身高、体重等属性,有走路、讲话、打手势、学习和工作等体重等属性,有走路、讲话、打手势
19、、学习和工作等行为。行为。第第1章章 面向对象程序设计面向对象程序设计1.2.2 面向对象的基本概念面向对象的基本概念(续)(续)1对象对象v在一个系统中的多个对象之间通过一定的渠道相互联在一个系统中的多个对象之间通过一定的渠道相互联系,如图系,如图1-2所示。所示。图1-2 现实世界系统对象模型 属性属性行为行为对象对象1 属性属性行为行为对象对象2 属性属性行为行为对象对象3消息消息 消息消息 消息消息 要使某一个对象实现要使某一个对象实现某一个行为,应当向某一个行为,应当向它传递相应的消息。它传递相应的消息。第第1章章 面向对象程序设计面向对象程序设计1.2.2 面向对象的基本概念面向对
20、象的基本概念(续)(续)1对象对象v在面向对象的软件系统中,在面向对象的软件系统中,对象是用来描述客观事物对象是用来描述客观事物的一个相对独立体,是构成系统的一个基本单位。的一个相对独立体,是构成系统的一个基本单位。v一个对象由一组属性一个对象由一组属性和对这组属性进行操纵的和对这组属性进行操纵的一组操一组操作作组成。组成。v属性属性是用来描述对象静态特征的一个数据项,是用来描述对象静态特征的一个数据项,操作操作是是用来描述对象行为的一个动作序列。用来描述对象行为的一个动作序列。第第1章章 面向对象程序设计面向对象程序设计1.2.2 面向对象的基本概念(续)面向对象的基本概念(续)1对象对象v
21、在开发软件系统时,首先要对现实世界中的对象进行在开发软件系统时,首先要对现实世界中的对象进行分析和归纳,以此为基础来定义软件系统中的对象。分析和归纳,以此为基础来定义软件系统中的对象。v软件系统中的一部分对象是对现实世界中的对象的抽软件系统中的一部分对象是对现实世界中的对象的抽象,但其内容不是全盘照搬,这些对象只包含与所解象,但其内容不是全盘照搬,这些对象只包含与所解决的现实问题有关的那些内容;系统中的另一部分对决的现实问题有关的那些内容;系统中的另一部分对象是为了构建系统而设立的。象是为了构建系统而设立的。第第1章章 面向对象程序设计面向对象程序设计1.2.2 面向对象的基本概念(续)面向对
22、象的基本概念(续)2类类v类是对客观世界中具有相同属性和行为的一组对象的类是对客观世界中具有相同属性和行为的一组对象的抽象,它为属于该类的全部对象提供了统一的抽象描抽象,它为属于该类的全部对象提供了统一的抽象描述,其内容包括属性和操作。述,其内容包括属性和操作。第第1章章 面向对象程序设计面向对象程序设计1.2.2 面向对象的基本概念面向对象的基本概念(续)(续)2类类v在寻找类时,要用到一个概念:在寻找类时,要用到一个概念:抽象抽象。v所谓抽象,所谓抽象,是指忽略事物的非本质特征,只注意那些是指忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,与当前目标有关的本质
23、特征,从而找出事物的共性,把具有共性的事物划分为一类,得出一个抽象的概念。把具有共性的事物划分为一类,得出一个抽象的概念。例如,人可以作为一个类,它是世界上所有实体人如例如,人可以作为一个类,它是世界上所有实体人如张三、李四、王五等的抽象,而实体人张三、李四、张三、李四、王五等的抽象,而实体人张三、李四、王五等则是人这个类的具体实例。王五等则是人这个类的具体实例。第第1章章 面向对象程序设计面向对象程序设计1.2.2 面向对象的基本概念(续)面向对象的基本概念(续)2类类v类和对象的关系可表述为:类和对象的关系可表述为:类是对象的抽象,而对象则是类的实例,或者说是类类是对象的抽象,而对象则是类
24、的实例,或者说是类的具体表现形式。的具体表现形式。第第1章章 面向对象程序设计面向对象程序设计1.2.2 面向对象的基本概念(续)面向对象的基本概念(续)3封装封装v在面向对象方法中,在面向对象方法中,所谓所谓“封装封装”,指两方面的含义:,指两方面的含义:一是用对象把属性和操纵这些属性的操作包装起来,一是用对象把属性和操纵这些属性的操作包装起来,形成一个基本单位,各个对象之间相对独立,互不干形成一个基本单位,各个对象之间相对独立,互不干扰。二是将对象中某些部分对外隐蔽,即隐藏其内部扰。二是将对象中某些部分对外隐蔽,即隐藏其内部细节,只留下少量接口,以便与外界联系,接收外界细节,只留下少量接口
25、,以便与外界联系,接收外界的消息。这种对外界隐蔽的做法称为信息隐蔽的消息。这种对外界隐蔽的做法称为信息隐蔽(information hiding)。第第1章章 面向对象程序设计面向对象程序设计1.2.2 面向对象的基本概念(续)面向对象的基本概念(续)4继承继承v所谓所谓“继承继承”,是指特殊类自动地拥有或隐含地复制,是指特殊类自动地拥有或隐含地复制其一般类的全部属性与操作。其一般类的全部属性与操作。继承具有继承具有“是一种是一种”的含义。的含义。汽车汽车卡车卡车轿车轿车图1-3 继承示例 一般类(也称为一般类(也称为基类、父类)基类、父类)特殊类(也称为特殊类(也称为派生类、子类)派生类、子
26、类)图1-4 继承的层次与抽象原则的运用汽车汽车卡车卡车轿车轿车火车火车车辆车辆轮船轮船飞机飞机运输工具运输工具 较多地忽较多地忽 略事物之略事物之 间的差别间的差别,得到较一得到较一 般的类般的类 较多地注较多地注 意事物之意事物之 间的差别间的差别,得到较特得到较特 殊的类殊的类有时一个类要同时继承两个或两个以上一般类中的属有时一个类要同时继承两个或两个以上一般类中的属性和操作,把这种性和操作,把这种允许一个特殊类具有一个以上一般允许一个特殊类具有一个以上一般类的继承模式称作多继承类的继承模式称作多继承。图1-5 多重继承示例 销售经理销售经理管理人员管理人员兼职技术人员兼职技术人员销售人
27、员销售人员雇员雇员第第1章章 面向对象程序设计面向对象程序设计1.2.2 面向对象的基本概念(续)面向对象的基本概念(续)5消息消息v在面向对象方法中,把在面向对象方法中,把向对象发出的操作请求称为消向对象发出的操作请求称为消息息(message)。)。v对象之间通过消息进行通信,实现了对象之间的动态对象之间通过消息进行通信,实现了对象之间的动态联系。至于消息的具体用途,它们有很多种,例如,联系。至于消息的具体用途,它们有很多种,例如,读取或设置对象本身的某个(些)属性的值,请求其读取或设置对象本身的某个(些)属性的值,请求其他对象的操作。他对象的操作。v在在C+中,消息其实就是函数调用。中,
28、消息其实就是函数调用。第第1章章 面向对象程序设计面向对象程序设计1.2.2 面向对象的基本概念(续)面向对象的基本概念(续)6关联关联v关联(关联(association)是两个或多个类之间的一种静)是两个或多个类之间的一种静态关系。态关系。教师教师指导毕业论文指导毕业论文学生学生1图1-6 关联示例 第第1章章 面向对象程序设计面向对象程序设计1.2.2 面向对象的基本概念(续)面向对象的基本概念(续)7组合组合v组合描述的是类与类之间的整体与部分的关系。组合描述的是类与类之间的整体与部分的关系。例如,例如,汽车与发动机之间的关系,计算机与主板间的关系。汽车与发动机之间的关系,计算机与主板
29、间的关系。v组合是具有组合是具有“整体整体部分部分”关系语义的关联,也就关系语义的关联,也就是说,组合是关联的一种,只是它还具有明显的是说,组合是关联的一种,只是它还具有明显的“整整体体部分部分”含义。含义。第第1章章 面向对象程序设计面向对象程序设计1.2.2 面向对象的基本概念(续)面向对象的基本概念(续)8多态性多态性v如果有几个相似而不完全相同的对象,有时人们要求如果有几个相似而不完全相同的对象,有时人们要求在向它们发出同一个消息时,它们的反应各不相同,在向它们发出同一个消息时,它们的反应各不相同,分别执行不同的操作,这种情况就是多态现象。分别执行不同的操作,这种情况就是多态现象。v在
30、面向对象方法中,所谓多态性在面向对象方法中,所谓多态性(polymorphism)是是指由继承而产生的相关而不同的类,其对象对同一消指由继承而产生的相关而不同的类,其对象对同一消息会作出不同的响应。多态性是面向对象程序设计的息会作出不同的响应。多态性是面向对象程序设计的一个重要特征,使用它能增加程序的灵活性。一个重要特征,使用它能增加程序的灵活性。第第1章章 面向对象程序设计面向对象程序设计1.2.3 面向对象程序设计的优点面向对象程序设计的优点v1从认识论的角度看,面向对象程序设计改变了软从认识论的角度看,面向对象程序设计改变了软件开发的方式件开发的方式 面向对象程序设计强调从对象出发认识问
31、题域面向对象程序设计强调从对象出发认识问题域,对,对象对应着问题域中的事物,其属性和操作分别刻画了象对应着问题域中的事物,其属性和操作分别刻画了事物的静态特征和动态行为,对象之间的继承、组合、事物的静态特征和动态行为,对象之间的继承、组合、关联和依赖关系如实地表达了问题域中事物实际存在关联和依赖关系如实地表达了问题域中事物实际存在的各种关系。的各种关系。第第1章章 面向对象程序设计面向对象程序设计1.2.3 面向对象程序设计的优点(续)面向对象程序设计的优点(续)因此,无论是软件系统的构成成分,还是通过这些因此,无论是软件系统的构成成分,还是通过这些成分之间的关系而体现的软件系统结构,都可直接
32、地成分之间的关系而体现的软件系统结构,都可直接地映射到问题域。软件开发人员能够利用人类认识事物映射到问题域。软件开发人员能够利用人类认识事物所采用的一般思维方式来进行软件开发。所采用的一般思维方式来进行软件开发。数据成员数据成员成员函数成员函数对象对象1 对象对象2 对象对象3 消息消息 消息消息 消息消息 数据成员数据成员成员函数成员函数数据成员数据成员成员函数成员函数图1-7 面向对象的软件系统分析模型 1.2.3 面向对象程序设计面向对象程序设计 的优点(续)的优点(续)第第1章章 面向对象程序设计面向对象程序设计1.2.3 面向对象程序设计的优点(续)面向对象程序设计的优点(续)在面向
33、过程的结构化程序设计中,人们常使用这样在面向过程的结构化程序设计中,人们常使用这样的公式来表述程序:的公式来表述程序:程序程序=算法算法+数据结构数据结构 而面向对象程序设计则把算法和数据结构封装在对而面向对象程序设计则把算法和数据结构封装在对象中。在面向对象程序设计,我们可以这样来表述程象中。在面向对象程序设计,我们可以这样来表述程序:序:对象对象=算法算法+数据结构数据结构 程序程序=(对象(对象+对象对象+对象对象+)+消息消息 或或 程序程序=对象对象s+消息消息第第1章章 面向对象程序设计面向对象程序设计1.2.3 面向对象程序设计的优点(续)面向对象程序设计的优点(续)v2面向对象
34、程序中的数据的安全性高面向对象程序中的数据的安全性高 面向对象程序中的数据及对数据的操作捆绑在一起,面向对象程序中的数据及对数据的操作捆绑在一起,被封装在不同的对象中。对象对外隐蔽其内部细节,被封装在不同的对象中。对象对外隐蔽其内部细节,只留下少量的接口,以便与外界联系。外界只能通过只留下少量的接口,以便与外界联系。外界只能通过对象提供的对外接口操作对象中的数据,这可以有效对象提供的对外接口操作对象中的数据,这可以有效保护数据的安全。保护数据的安全。第第1章章 面向对象程序设计面向对象程序设计1.2.3 面向对象程序设计的优点(续)面向对象程序设计的优点(续)v3面向对象程序设计有助于软件的维
35、护与复用面向对象程序设计有助于软件的维护与复用 某类对象数据结构的改变只会引起该类对象操作代某类对象数据结构的改变只会引起该类对象操作代码的改变,只要其对外提供的接口不发生变化,程序码的改变,只要其对外提供的接口不发生变化,程序的其余部分就不需要做任何改动,从而把程序代码的的其余部分就不需要做任何改动,从而把程序代码的修改维护局限在一个很小的范围内。这就对用户需求修改维护局限在一个很小的范围内。这就对用户需求的变化有较强的适应性。的变化有较强的适应性。第第1章章 面向对象程序设计面向对象程序设计1.2.3 面向对象程序设计的优点(续)面向对象程序设计的优点(续)v3面向对象程序设计有助于软件的
36、维护与复用面向对象程序设计有助于软件的维护与复用 面向对象程序设计中类的继承机制有效解决了代码复面向对象程序设计中类的继承机制有效解决了代码复用的问题。在设计新类时,可通过继承引用已有类的用的问题。在设计新类时,可通过继承引用已有类的属性和操作,并可在已有类的基础上增加新的数据结属性和操作,并可在已有类的基础上增加新的数据结构和操作,延伸和扩充已有类的功能,这种延伸和扩构和操作,延伸和扩充已有类的功能,这种延伸和扩充一点不影响原有类的使用。人们可以像使用集成电充一点不影响原有类的使用。人们可以像使用集成电路(路(IC)构造计算机硬件那样,比较方便地重用对象)构造计算机硬件那样,比较方便地重用对
37、象类来构造软件系统。类来构造软件系统。第第1章章 面向对象程序设计面向对象程序设计v面向对象的软件工程包括以下几个阶段:面向对象的软件工程包括以下几个阶段:1面向对象分析(面向对象分析(object oriented analysis,OOA)2面向对象设计(面向对象设计(object oriented design,OOD)3面向对象编程(面向对象编程(object oriented programming,OOP)4面向对象测试(面向对象测试(object oriented test,OOT)5面向对象维护(面向对象维护(object oriented soft maintenance,O
38、OSM)1.3 面向对象的软件开发面向对象的软件开发第第1章章 面向对象程序设计面向对象程序设计v1面向对象分析面向对象分析 对系统进行面向对象分析,识别出系统中的对象,对系统进行面向对象分析,识别出系统中的对象,定义对象的属性和操作,并抽象出对象类。定义对象的属性和操作,并抽象出对象类。1.4 学生信息管理系统的面向对象分析与设计学生信息管理系统的面向对象分析与设计第第1章章 面向对象程序设计面向对象程序设计(1)学生对象与学生类)学生对象与学生类 考虑问题域,识别系统中的对象与类。考虑问题域,识别系统中的对象与类。该系统是一个学生信息管理系统,每一个被管理的该系统是一个学生信息管理系统,每
39、一个被管理的学生都是该系统中的一个对象,所有学生对象都具有学生都是该系统中的一个对象,所有学生对象都具有相同的属性:学号、姓名、性别、出生日期、英语成相同的属性:学号、姓名、性别、出生日期、英语成绩、数据结构成绩、绩、数据结构成绩、C+程序设计成绩、总成绩、平程序设计成绩、总成绩、平均成绩,相同的操作:计算总成绩、计算平均成绩。均成绩,相同的操作:计算总成绩、计算平均成绩。对所有学生对象的抽象,形成一个学生类。对所有学生对象的抽象,形成一个学生类。第第1章章 面向对象程序设计面向对象程序设计+计算总成绩计算总成绩+计算平均成绩计算平均成绩-学号学号-姓名姓名-平均成绩平均成绩 学生类学生类 +
40、显示学生信息显示学生信息+按学号查询学生信息按学号查询学生信息+按姓名查询学生信息按姓名查询学生信息 +打开文件打开文件+写文件写文件+新建文件新建文件“顺序表顺序表”容器类容器类1-学生数组学生数组-学生总人数学生总人数图1-8 学生信息管理系统的类图第第1章章 面向对象程序设计面向对象程序设计(2)顺序表对象与顺序表类顺序表对象与顺序表类 考虑系统责任,把系统责任所要求的每一项功能都落考虑系统责任,把系统责任所要求的每一项功能都落实到某个或某些对象上。该系统要实现对所有需要管实到某个或某些对象上。该系统要实现对所有需要管理的学生对象信息的输入(从键盘输入)、输出(输理的学生对象信息的输入(
41、从键盘输入)、输出(输出到屏幕)、存储(存储到外存)、读取(从外存读出到屏幕)、存储(存储到外存)、读取(从外存读取)、增加、删除、修改、查询、排序、统计等操作。取)、增加、删除、修改、查询、排序、统计等操作。假定学生对象信息在外存中以文件的形式存放,在内假定学生对象信息在外存中以文件的形式存放,在内存中以顺序表的形式存放。我们把顺序表看作系统中存中以顺序表的形式存放。我们把顺序表看作系统中的一个对象,并形象地称它为的一个对象,并形象地称它为“容器容器”。第第1章章 面向对象程序设计面向对象程序设计(2)顺序表对象与顺序表类顺序表对象与顺序表类 顺序表对象作为用来存储学生对象的容器,其数据顺序
42、表对象作为用来存储学生对象的容器,其数据结构可以选择最简单的数组,因此,顺序表对象应该结构可以选择最简单的数组,因此,顺序表对象应该具有的属性:以学生对象为元素的对象数组、学生总具有的属性:以学生对象为元素的对象数组、学生总人数。人数。第第1章章 面向对象程序设计面向对象程序设计(2)顺序表对象与顺序表类顺序表对象与顺序表类 要对学生信息进行管理,实现系统功能,顺序表对象要对学生信息进行管理,实现系统功能,顺序表对象需要设计较丰富的操作,可以想到的有:显示全部学需要设计较丰富的操作,可以想到的有:显示全部学生信息、按学号查询学生信息、按姓名查询学生信息、生信息、按学号查询学生信息、按姓名查询学
43、生信息、添加学生信息、修改学生信息、删除学生信息、统计添加学生信息、修改学生信息、删除学生信息、统计每个学生的总成绩和平均成绩、统计某一门课的总成每个学生的总成绩和平均成绩、统计某一门课的总成绩和平均成绩、学生信息排序、打开文件读取数据、绩和平均成绩、学生信息排序、打开文件读取数据、将顺序表中的数据写入文件、新建文件等。将顺序表中的数据写入文件、新建文件等。对顺序表对象的抽象形成一个顺序表类。对顺序表对象的抽象形成一个顺序表类。第第1章章 面向对象程序设计面向对象程序设计v2面向对象面向对象设计设计 根据面向对象分析的结果,主要解决与实现有关的根据面向对象分析的结果,主要解决与实现有关的问题。
44、问题。首先,我们把分析阶段所抽象出来的类,按实现条首先,我们把分析阶段所抽象出来的类,按实现条件进行补充和调整。件进行补充和调整。1.4 学生信息管理系统的面向对象分析与设计学生信息管理系统的面向对象分析与设计第第1章章 面向对象程序设计面向对象程序设计v2面向对象面向对象设计设计 假如我们选择假如我们选择C+作为该系统的编程语言,由于作为该系统的编程语言,由于C+没没有提供日期数据类型,所以每个学生的出生日期看作有提供日期数据类型,所以每个学生的出生日期看作一个日期对象,所有日期对象具有相同的属性:年、一个日期对象,所有日期对象具有相同的属性:年、月、日,相同的操作:设置日期、显示日期、获取
45、年月、日,相同的操作:设置日期、显示日期、获取年份、获取月份、获取日期。对所有日期对象的抽象,份、获取月份、获取日期。对所有日期对象的抽象,形成一个日期类。该类与学生类的关系为组合关系。形成一个日期类。该类与学生类的关系为组合关系。1.4 学生信息管理系统的面向对象分析与设计学生信息管理系统的面向对象分析与设计第第1章章 面向对象程序设计面向对象程序设计v2面向对象面向对象设计设计对于学生类,增加描述类对象自身行为的操作:初始化对于学生类,增加描述类对象自身行为的操作:初始化属性值、设置属性值(设置属性学号、姓名、性别、属性值、设置属性值(设置属性学号、姓名、性别、出生日期、英语成绩、数据结构
46、成绩、出生日期、英语成绩、数据结构成绩、C+程序设计程序设计成绩的值)、显示属性值(显示所有属性的值)、获成绩的值)、显示属性值(显示所有属性的值)、获取学号、获取姓名、获取英语成绩、获取数据结构成取学号、获取姓名、获取英语成绩、获取数据结构成绩、获取绩、获取C+成绩、获取总成绩、获取平均成绩。成绩、获取总成绩、获取平均成绩。1.4 学生信息管理系统的面向对象分析与设计学生信息管理系统的面向对象分析与设计第第1章章 面向对象程序设计面向对象程序设计v2面向对象面向对象设计设计对于人机界面的设计,由于我们不借助于可视化编程环对于人机界面的设计,由于我们不借助于可视化编程环境(境(Visial C+)的支持,我们需要设计一个主菜单)的支持,我们需要设计一个主菜单类,负责系统功能主菜单的显示。每项系统子功能设类,负责系统功能主菜单的显示。每项系统子功能设计一个子菜单类,负责系统子功能菜单的显示与实现。计一个子菜单类,负责系统子功能菜单的显示与实现。主菜单类与子菜单类是继承关系,这样可以在类间使主菜单类与子菜单类是继承关系,这样可以在类间使用多态性机制,从而创建一个易于扩展的系统。用多态性机制,从而创建一个易于扩展的系统。1.4 学生信息管理系统的面向对象分析与设计学生信息管理系统的面向对象分析与设计
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。