1、2023-11-121 1v 课程性质课程性质:专业基础课(考试课):专业基础课(考试课)v 学时数学时数:6464学时学时(上课上课4040学时,上机学时,上机2424学时学时)v 学分数学分数:4 4学分学分 2023-11-122 2v 所用教材所用教材:C+C+面向对象程序设计(第面向对象程序设计(第2 2版)版)v 参考资料参考资料:C+C+面向对象程序设计习题解答与上机指导(第面向对象程序设计习题解答与上机指导(第2 2版)版)2023-11-123 3v成绩评定成绩评定:总成绩总成绩 =平时平时(20%)+(20%)+期中期中(10%)+(10%)+项目作品项目作品(20%)(2
2、0%)+期末期末(50%)(50%)平时成绩:平时成绩:上课(上课(10%10%)+作业(作业(10%10%)2023-11-124 4C+C+C对对C语言语言功能的增强功能的增强增加了面对增加了面对对象的机制对象的机制程序设计程序设计方法方法面对对象面对对象程序设计程序设计面向过程面向过程程序设计程序设计2023-11-125 5目录目录1234面向对象程序设计概述面向对象程序设计概述5面向过程程序设计概述面向过程程序设计概述类和对象类和对象继承与派生继承与派生多态性与虚函数多态性与虚函数2023-11-126 6目录目录6789友元与静态成员友元与静态成员10运算符重载运算符重载函数模板与
3、类模板函数模板与类模板输入输出输入输出异常处理异常处理STL简介简介112023-11-127 7本课程学习目标本课程学习目标理解面向对象编程的基本思想掌握面向对象编程的基本方法掌握C+面向对象编程技术,学会利用C+语言进行一般面向对象程序的设计,解决一般应用问题,并为后续专业课程(VC+、Java)的学习奠定程序设计基础。2023-11-128 8第第1章章 面向对象程序设计概述面向对象程序设计概述本章从一个简单的商品库存管理系统的面向过程程序设计出发,讨论了传统的面向过程程序设计方法的不足,进而引出面向对象程序设计方法,介绍面向对象程序设计的编程思想、基本概念,面向对象程序设计的优点,面向
4、对象的软件开发过程。最后对贯穿全书的综合性项目图书馆图书借阅管理系统进行了面向对象的分析与设计。本章内容简介本章内容简介2023-11-129 9第第1章章 面向对象程序设计概述面向对象程序设计概述本章学习目标本章学习目标1.了解传统的面向过程程序设计方法的不足2.理解面向对象程序设计的编程思想3.领会面向对象程序设计的基本概念4.领会面向对象程序设计的优点5.了解面向对象的软件开发过程2023-11-121010第第1章章 面向对象程序设计概述面向对象程序设计概述v实现实现一个简单的商品库存管理系统一个简单的商品库存管理系统的面的面向过程的向过程的C程序框架。程序框架。教材教材P1-31.1
5、 面向过程程序设计面向过程程序设计2023-11-121111实现该系统的实现该系统的C程序框架程序框架/*实现一个简单的商品库存管理系统的面向过程的C程序框架*/#include /*标准输入/输出函数库头文件*/#include /*标准函数库头文件*/#include /*字符串函数库头文件*/2023-11-121212实现该系统的实现该系统的C程序框架程序框架/*定义宏*/*商品结构体数组的大小,可自行设置*/#define MAXSIZE 100/*商品结构体的长度*/#define PRODUCT_LEN sizeof(struct product)/*商品信息输出格式控制串*/
6、#define FORMAT%-8d%-15s%-15s%-15s%-12.1lf%-8dn/*按格式输出商品的各项数据*/#define DATA productsi.id,productsi.name,productsi.producer,productsi.date,productsi.price,productsi.amount(其他宏定义略)2023-11-121313实现该系统的实现该系统的C程序框架程序框架/*定义商品结构体*/typedef struct product/*标记为product*/int id;/*商品编号*/char name15;/*商品名称,最多14个字符
7、*/char producer15;/*商品生产商,最多14个字符*/char date15;/*商品生产日期,最多14个字符*/double price;/*商品价格*/int amount;/*商品数量*/Product;2023-11-121414实现该系统的实现该系统的C程序框架程序框架/*定义全局变量*/Product productsMAXSIZE;/*定义商品结构体数组*/(其他全局变量定义略)2023-11-121515实现该系统的实现该系统的C程序框架程序框架/*自定义函数原型声明*/void showMenu();/*显示系统功能菜单*/void inputProduct(
8、);/*商品入库*/void outputProduct();/*商品出库*/void deleteProduct();/*删除商品*/void modifyProduct();/*修改商品*/void searchProduct();/*查询商品*/void showProduct();/*浏览商品*/void totalProduct();/*商品统计*/void sortProduct();/*商品排序*/(其他自定义函数原型声明略)2023-11-12燕京理工学院1616实现该系统的实现该系统的C程序框架程序框架int main()int choice;/*存储用户对系统功能菜单的选择
9、结果*/system(color F0);/*设置程序运行窗口的背景为亮白色,前景为黑色*/showMenu();/*显示系统功能菜单*/scanf(%d,&choice);while(choice)/*choice为0时退出while循环*/switch(choice)/*根据用户的选择,执行相应的操作*/case 1:inputProduct();system(pause);break;case 2:outputProduct();system(pause);break;case 3:deleteProduct();system(pause);break;case 4:modifyProd
10、uct();system(pause);break;case 5:searchProduct();system(pause);break;case 6:showProduct();system(pause);break;case 7:totalProduct();system(pause);break;case 8:sortProduct();system(pause);break;default:printf(选择有误!);system(pause);/*错误输入*/2023-11-12燕京理工学院1717实现该系统的实现该系统的C程序框架程序框架/*为了避免下次输入出错,需要清除键盘缓冲区
11、*/while(getchar()!=n);showMenu();scanf(%d,&choice);printf(您选择了退出系统!n);printf(谢谢使用本系统,再见!n);printf(按任意键退出);getch();/*让屏幕暂停*/return 0;/*main函数结束*/2023-11-12燕京理工学院1818实现该系统的实现该系统的C程序框架程序框架/*定义自定义函数*/void showMenu()/*显示系统功能菜单*/system(cls);/*调用DOS命令,清屏,与clrscr()功能相同*/*-显示系统功能菜单-*/printf(n*);printf(n*);pr
12、intf(n*#*);printf(n*#欢迎使用商品库存管理系统#*);printf(n*#*);printf(n*);printf(n*1.inputProduct()(商品入库)*);printf(n*2.outputProduct()(商品出库)*);printf(“n*3.deleteProduct()(删除商品)*);printf(n*4.modifyProduct()(修改商品)*);printf(n*5.searchProduct()(查询商品)*);2023-11-12燕京理工学院1919实现该系统的实现该系统的C程序框架程序框架/*定义自定义函数*/void showMen
13、u()/*显示系统功能菜单*/printf(n*6.showProduct()(浏览商品)*);printf(n*7.totalProduct()(商品统计)*);printf(n*8.sortProduct()(商品排序)*);printf(n*0.exit (退出程序)*);printf(n*);printf(“n*);printf(“n*);printf(n);printf(请选择要执行的操作(08):);2023-11-122020实现该系统的实现该系统的C程序框架程序框架/*定义自定义函数*/void inputProduct()(函数体代码略)(其他自定义函数实现代码略)2023-
14、11-122121第第1章章 面向对象程序设计概述面向对象程序设计概述v 由上述由上述商品库存商品库存管理的面向过程的管理的面向过程的C程序框架可以看出,面向程序框架可以看出,面向过程的过程的C程序的基本组成单位是函数,系统的每一项功能对应程序的基本组成单位是函数,系统的每一项功能对应一个一个C函数,如果某项功能较复杂,可以对其进行功能分解,函数,如果某项功能较复杂,可以对其进行功能分解,分解为多项子功能,子功能可以继续进行分解,直到每项子分解为多项子功能,子功能可以继续进行分解,直到每项子功能都足够简单,不需要再分解为止,每项子功能对应一个功能都足够简单,不需要再分解为止,每项子功能对应一个
15、C函数,并由其上层功能所对应的函数,并由其上层功能所对应的C函数调用。函数调用。main函数负责函数负责调用顶层功能所对应的调用顶层功能所对应的C函数。运用面向过程程序设计方法所函数。运用面向过程程序设计方法所设计出来的设计出来的C程序模型如图程序模型如图1-1所示。所示。1.1 面向过程程序设计面向过程程序设计2023-11-122222图1-1 面向过程程序设计的程序模型2023-11-122323第第1章章 面向对象程序设计概述面向对象程序设计概述v运用面向过程程序设计方法所设计出来的程序,运用面向过程程序设计方法所设计出来的程序,数据数据和操作数据的函数是分离的。和操作数据的函数是分离
16、的。所有数据都是公用的,所有数据都是公用的,一个函数可以使用任何一组数据,而一组数据又能被一个函数可以使用任何一组数据,而一组数据又能被多个函数所使用。多个函数所使用。1.1 面向过程程序设计面向过程程序设计2023-11-122424第第1章章 面向对象程序设计概述面向对象程序设计概述v面向过程程序设计的基本思想:面向过程程序设计的基本思想:功能分解功能分解、逐步求精逐步求精、模块化模块化、结构化结构化。1.1 面向过程程序设计面向过程程序设计2023-11-122525第第1章章 面向对象程序设计概述面向对象程序设计概述v面向过程的结构化程序设计在面向过程的结构化程序设计在20世纪世纪60
17、年代末、年代末、70年代初从一定程度上缓解了当时的年代初从一定程度上缓解了当时的“软件危机软件危机”,它,它在处理较小规模的程序时比较有效。但是,随着人们在处理较小规模的程序时比较有效。但是,随着人们对大规模软件需求的增长,面向过程的结构化程序设对大规模软件需求的增长,面向过程的结构化程序设计逐渐显示出它的不足,具体表现在:计逐渐显示出它的不足,具体表现在:1.1 面向过程程序设计面向过程程序设计2023-11-122626第第1章章 面向对象程序设计概述面向对象程序设计概述面向过程的结构化程序设计的不足面向过程的结构化程序设计的不足:v1程序设计困难,生产率低下程序设计困难,生产率低下v2数
18、据不安全数据不安全v3程序修改困难程序修改困难v4代码重用程度低代码重用程度低1.1 面向过程程序设计面向过程程序设计2023-11-122727第第1章章 面向对象程序设计概述面向对象程序设计概述1.2.1 面向对象程序设计的思想面向对象程序设计的思想 具体地讲,面向对象程序设计的基本思想如下:具体地讲,面向对象程序设计的基本思想如下:v(1)客观世界中的事物都是对象(客观世界中的事物都是对象(object),对),对象之间存在一定的关系。象之间存在一定的关系。v(2)用对象的属性(用对象的属性(attribute)描述事物的静态)描述事物的静态特征,用对象的操作(特征,用对象的操作(ope
19、ration)描述事物的行)描述事物的行为(动态特征)。为(动态特征)。1.2 面向对象程序设计面向对象程序设计2023-11-122828第第1章章 面向对象程序设计概述面向对象程序设计概述1.2.1 面向对象的编程思想面向对象的编程思想 v(3)对象的属性和操作结合为一体,形成一个相对对象的属性和操作结合为一体,形成一个相对独立、不可分的实体。对象对外屏蔽其内部细节,只独立、不可分的实体。对象对外屏蔽其内部细节,只留下少量接口,以便与外界联系。留下少量接口,以便与外界联系。v(4)通过抽象对对象进行分类,把具有相同属性和通过抽象对对象进行分类,把具有相同属性和相同操作的对象归为一类,类是这
20、些对象的抽象描述,相同操作的对象归为一类,类是这些对象的抽象描述,每个对象是其所属类的一个实例。每个对象是其所属类的一个实例。2023-11-122929第第1章章 面向对象程序设计概述面向对象程序设计概述1.2.1 面向对象的编程思想面向对象的编程思想v(5)复杂的对象可以用简单的对象作为其构成部分。复杂的对象可以用简单的对象作为其构成部分。v(6)通过在不同程度上运用抽象的原则,可以得到通过在不同程度上运用抽象的原则,可以得到一般类和特殊类。特殊类继承一般类的属性与操作,一般类和特殊类。特殊类继承一般类的属性与操作,从而简化系统的构造过程。从而简化系统的构造过程。v(7)通过关联表达类之间
21、的静态关系。通过关联表达类之间的静态关系。v(8)对象之间通过传递消息进行通信,以实现对象对象之间通过传递消息进行通信,以实现对象之间的动态联系。之间的动态联系。2023-11-123030第第1章章 面向对象程序设计概述面向对象程序设计概述1.2.2 面向对象的基本概念面向对象的基本概念 1对象对象 可以可以从两个角度从两个角度来理解来理解对象对象。一个角度是现实世界,。一个角度是现实世界,另一个角度是我们所建立的软件系统。另一个角度是我们所建立的软件系统。2023-11-123131第第1章章 面向对象程序设计概述面向对象程序设计概述1.2.2 面向对象的基本概念面向对象的基本概念 1对象
22、对象v现实世界中客观存在的任何一个事物都可以看成一个现实世界中客观存在的任何一个事物都可以看成一个对象对象(object)。或者说,现实世界是由千千万万个对。或者说,现实世界是由千千万万个对象组成的。象组成的。v对象可以是有形的对象可以是有形的,如汽车、房屋、张三等,如汽车、房屋、张三等,也可以也可以是无形的是无形的,如社会生活中的一种逻辑结构:学校、军,如社会生活中的一种逻辑结构:学校、军队,甚至一篇文章、一个图形、一项计划等都可视作队,甚至一篇文章、一个图形、一项计划等都可视作对象。对象。2023-11-123232第第1章章 面向对象程序设计概述面向对象程序设计概述1.2.2 面向对象的
23、基本概念面向对象的基本概念 1对象对象v对象可大可小对象可大可小。例如学校是一个对象,一个班级也是。例如学校是一个对象,一个班级也是一个对象,一个学生也是一个对象。同样,军队中的一个对象,一个学生也是一个对象。同样,军队中的一个师,一个团,一个连,一个班都是对象。一个师,一个团,一个连,一个班都是对象。2023-11-123333第第1章章 面向对象程序设计概述面向对象程序设计概述1.2.2 面向对象的基本概念面向对象的基本概念 1对象对象v任何一个对象都具有两个要素:属性和行为任何一个对象都具有两个要素:属性和行为v属性:属性:用于描述客观事物的静态特征用于描述客观事物的静态特征v行为:行为
24、:用于描述事物的动态特征。用于描述事物的动态特征。v例如,一个人是一个对象,他有姓名、性别、身高、例如,一个人是一个对象,他有姓名、性别、身高、体重等属性,有走路、讲话、打手势、学习和工作等体重等属性,有走路、讲话、打手势、学习和工作等行为。行为。2023-11-123434第第1章章 面向对象程序设计概述面向对象程序设计概述1.2.2 面向对象的基本概念面向对象的基本概念 1对象对象v在一个系统中的多个对象之间通过一定的渠道相互联在一个系统中的多个对象之间通过一定的渠道相互联系,如图系,如图1-2所示。所示。2023-11-123535图1-2 现实世界中的对象模型 第第1章章 面向对象程序
25、设计概述面向对象程序设计概述属性行为行为行为行为属性行为行为行为行为属性行为行为行为行为对象对象对象对象对象对象消息消息消息消息消息消息2023-11-123636图1-7 面向对象程序设计的程序模型 第第1章章 面向对象程序设计概述面向对象程序设计概述要使某一个对象实现要使某一个对象实现某一个行为,应当向某一个行为,应当向它传递相应的消息。它传递相应的消息。数据成员函数成员函数成员函数成员函数数据成员函数成员函数成员函数成员函数数据成员函数成员函数成员函数成员函数对象对象对象对象对象对象消息消息消息消息消息消息属性行为行为行为行为对象对象2023-11-123737第第1章章 面向对象程序设
26、计概述面向对象程序设计概述1.2.2 面向对象的基本概念面向对象的基本概念 1对象对象v在面向对象的软件在面向对象的软件分析分析系统中,系统中,对象是用来描述客观对象是用来描述客观事物的一个相对独立体,是构成系统的一个基本单位。事物的一个相对独立体,是构成系统的一个基本单位。v一个对象由一组属性一个对象由一组属性和对这组属性进行操纵的和对这组属性进行操纵的一组操一组操作作组成。组成。v属性属性是用来描述对象静态特征的一个数据项,是用来描述对象静态特征的一个数据项,操作操作是是用来描述对象行为的一个动作序列。用来描述对象行为的一个动作序列。2023-11-123838第第1章章 面向对象程序设计
27、概述面向对象程序设计概述1.2.2 面向对象的基本概念面向对象的基本概念 1对象对象v在开发软件系统时,首先要对现实世界中的对象进行在开发软件系统时,首先要对现实世界中的对象进行分析和归纳,以此为基础来定义软件系统中的对象。分析和归纳,以此为基础来定义软件系统中的对象。特别提醒:特别提醒:软件系统中的一部分对象是对现实世界中的软件系统中的一部分对象是对现实世界中的对象的抽象,但其内容不是全盘照搬,这些对象只包对象的抽象,但其内容不是全盘照搬,这些对象只包含与所解决的现实问题有关的那些内容;系统中的另含与所解决的现实问题有关的那些内容;系统中的另一部分对象是为了构建系统而设立的。一部分对象是为了
28、构建系统而设立的。2023-11-123939第第1章章 面向对象程序设计概述面向对象程序设计概述1.2.2 面向对象的基本概念面向对象的基本概念 2类类v类是对客观世界中具有相同属性和行为的一组对象的类是对客观世界中具有相同属性和行为的一组对象的抽象,它为属于该类的全部对象提供了统一的抽象描抽象,它为属于该类的全部对象提供了统一的抽象描述,其内容包括属性和操作。例如,人可以作为一个述,其内容包括属性和操作。例如,人可以作为一个类,它是世界上所有实体人如张三、李四、王五等的类,它是世界上所有实体人如张三、李四、王五等的抽象,而实体人张三、李四、王五等则是人这个类的抽象,而实体人张三、李四、王五
29、等则是人这个类的具体实例。具体实例。2023-11-124040第第1章章 面向对象程序设计概述面向对象程序设计概述1.2.2 面向对象的基本概念面向对象的基本概念 2类类v类和对象的关系类和对象的关系可表述为:可表述为:类是对象的抽象,而对类是对象的抽象,而对象则是类的实例,或者说是类的具体表现形式象则是类的实例,或者说是类的具体表现形式。更形。更形象一点说,类和对象的关系如同一个模具和用这个模象一点说,类和对象的关系如同一个模具和用这个模具铸造出来的铸件之间的关系。具铸造出来的铸件之间的关系。2023-11-124141第第1章章 面向对象程序设计概述面向对象程序设计概述1.2.2 面向对
30、象的基本概念面向对象的基本概念 3抽象抽象v在寻找类时,要用到一个概念:在寻找类时,要用到一个概念:抽象抽象。v所谓抽象,所谓抽象,是指忽略事物的非本质特征,只注意那些是指忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,与当前目标有关的本质特征,从而找出事物的共性,把具有共性的事物划分为一类,得出一个抽象的概念。把具有共性的事物划分为一类,得出一个抽象的概念。2023-11-124242第第1章章 面向对象程序设计概述面向对象程序设计概述1.2.2 面向对象的基本概念面向对象的基本概念 4封装封装v在面向对象方法中,在面向对象方法中,所谓所谓“封装封装”,指两方面
31、的含义:指两方面的含义:一是一是用对象把属性和操纵这些属性的操作包装起来,用对象把属性和操纵这些属性的操作包装起来,形成一个基本单位,各个对象之间相对独立,互不干形成一个基本单位,各个对象之间相对独立,互不干扰。扰。二是二是将对象中某些部分对外隐蔽,即隐藏其内部将对象中某些部分对外隐蔽,即隐藏其内部细节,只留下少量接口,以便与外界联系,接收外界细节,只留下少量接口,以便与外界联系,接收外界的消息。这种对外界隐蔽的做法称为信息隐蔽。的消息。这种对外界隐蔽的做法称为信息隐蔽。(information hiding)。2023-11-124343第第1章章 面向对象程序设计概述面向对象程序设计概述1
32、.2.2 面向对象的基本概念面向对象的基本概念 5继承继承v所谓所谓“继承继承”,是指特殊类自动地拥有或隐含地复制,是指特殊类自动地拥有或隐含地复制其一般类的全部属性与操作。其一般类的全部属性与操作。2023-11-124444继承具有继承具有“是一种是一种”的含义。的含义。汽车汽车卡车卡车轿车轿车图1-3 继承示例 一般类(也称为一般类(也称为基类、父类)基类、父类)特殊类(也称为特殊类(也称为派生类、子类)派生类、子类)第第1章章 面向对象程序设计概述面向对象程序设计概述2023-11-124545图1-4 继承的层次与抽象原则的运用汽车汽车卡车卡车轿车轿车火车火车车辆车辆轮船轮船飞机飞机
33、运输工具运输工具 较多地忽较多地忽 略事物之略事物之 间的差别间的差别,得到较一得到较一 般的类般的类 较多地注较多地注 意事物之意事物之 间的差别间的差别,得到较特得到较特 殊的类殊的类第第1章章 面向对象程序设计概述面向对象程序设计概述2023-11-124646有时一个类要同时继承两个或两个以上一般类中的属有时一个类要同时继承两个或两个以上一般类中的属性和操作,把这种性和操作,把这种允许一个特殊类具有一个以上一般允许一个特殊类具有一个以上一般类的继承模式称作多继承类的继承模式称作多继承。图1-5 多重继承示例 销售经理销售经理管理人员管理人员兼职技术人员兼职技术人员销售人员销售人员雇员雇
34、员第第1章章 面向对象程序设计概述面向对象程序设计概述2023-11-124747第第1章章 面向对象程序设计概述面向对象程序设计概述1.2.2 面向对象的基本概念面向对象的基本概念 6多态性多态性v如果有几个相似而不完全相同的对象,有时人们要求如果有几个相似而不完全相同的对象,有时人们要求在向它们发出同一个消息时,它们的反应各不相同,在向它们发出同一个消息时,它们的反应各不相同,分别执行不同的操作,这种情况就是多态现象。分别执行不同的操作,这种情况就是多态现象。v在面向对象方法中,所谓在面向对象方法中,所谓多态性多态性(polymorphism)是是指由继承而产生的相关而不同的类,其对象对同
35、一消指由继承而产生的相关而不同的类,其对象对同一消息会作出不同的响应。多态性是面向对象程序设计的息会作出不同的响应。多态性是面向对象程序设计的一个重要特征,使用它能增加程序的灵活性。一个重要特征,使用它能增加程序的灵活性。2023-11-124848第第1章章 面向对象程序设计概述面向对象程序设计概述1.2.2 面向对象的基本概念面向对象的基本概念 7消息与事件消息与事件v在面向对象方法中,把在面向对象方法中,把向对象发出的向对象发出的行为行为请求称为请求称为消消息息(message)。)。v封装使对象成为一个相对独立的实体,而消息机制为封装使对象成为一个相对独立的实体,而消息机制为它们提供了
36、一个相互间动态联系的途径,使它们的行它们提供了一个相互间动态联系的途径,使它们的行为能互相配合,构成一个有机的运行系统。为能互相配合,构成一个有机的运行系统。2023-11-124949第第1章章 面向对象程序设计概述面向对象程序设计概述1.2.2 面向对象的基本概念面向对象的基本概念 7消息与事件消息与事件v对象通过对外提供的行为在系统中发挥自己的作用,对象通过对外提供的行为在系统中发挥自己的作用,当系统中的其他对象或其他系统成分请求这个对象执当系统中的其他对象或其他系统成分请求这个对象执行某个行为时,就向这个对象发送一个消息,这个对行某个行为时,就向这个对象发送一个消息,这个对象就响应这个
37、请求,完成指定的行为。象就响应这个请求,完成指定的行为。v在在C+中中,消息消息其实就是其实就是函数调用函数调用。2023-11-125050第第1章章 面向对象程序设计概述面向对象程序设计概述1.2.2 面向对象的基本概念面向对象的基本概念 7消息与事件消息与事件v面向对象技术是一种以对象为基础,以事件面向对象技术是一种以对象为基础,以事件(由多个消息组成)或消息来驱动对象执行处(由多个消息组成)或消息来驱动对象执行处理的程序设计技术。面向对象程序的控制流程理的程序设计技术。面向对象程序的控制流程由运行时各种事件的实际发生来触发,而不再由运行时各种事件的实际发生来触发,而不再由预定顺序来决定
38、,更符合客观世界的实际。由预定顺序来决定,更符合客观世界的实际。2023-11-125151第第1章章 面向对象程序设计概述面向对象程序设计概述1.2.3 面向对象程序设计的优点面向对象程序设计的优点v1从认识论的角度看,面向对象程序设计改变了软从认识论的角度看,面向对象程序设计改变了软件开发的方式件开发的方式 面向对象程序设计强调从对象出发认识问题域面向对象程序设计强调从对象出发认识问题域,对,对象对应着问题域中的事物,其属性和操作分别刻画了象对应着问题域中的事物,其属性和操作分别刻画了事物的静态特征和动态行为,对象之间的继承、组合、事物的静态特征和动态行为,对象之间的继承、组合、关联和依赖
39、关系如实地表达了问题域中事物实际存在关联和依赖关系如实地表达了问题域中事物实际存在的各种关系。的各种关系。2023-11-125252第第1章章 面向对象程序设计概述面向对象程序设计概述1.2.3 面向对象程序设计的优点面向对象程序设计的优点 因此,无论是软件系统的构成成分,还是通过这些因此,无论是软件系统的构成成分,还是通过这些成分之间的关系而体现的软件系统结构,都可直接地成分之间的关系而体现的软件系统结构,都可直接地映射到问题域。软件开发人员能够利用人类认识事物映射到问题域。软件开发人员能够利用人类认识事物所采用的一般思维方式来进行软件开发。所采用的一般思维方式来进行软件开发。2023-1
40、1-125353图1-2 现实世界中的对象模型 第第1章章 面向对象程序设计概述面向对象程序设计概述属性行为行为行为行为属性行为行为行为行为属性行为行为行为行为对象对象对象对象对象对象消息消息消息消息消息消息2023-11-125454图1-7 面向对象程序设计的程序模型 第第1章章 面向对象程序设计概述面向对象程序设计概述要使某一个对象实现要使某一个对象实现某一个行为,应当向某一个行为,应当向它传递相应的消息。它传递相应的消息。数据成员函数成员函数成员函数成员函数数据成员函数成员函数成员函数成员函数数据成员函数成员函数成员函数成员函数对象对象对象对象对象对象消息消息消息消息消息消息属性行为行
41、为行为行为对象对象2023-11-125555第第1章章 面向对象程序设计概述面向对象程序设计概述 在面向过程的结构化程序设计中,人们常使用这样的公式来表在面向过程的结构化程序设计中,人们常使用这样的公式来表述程序:述程序:程序程序=算法算法+数据结构数据结构 而面向对象程序设计则把算法和数据结构封装在对象中。在面而面向对象程序设计则把算法和数据结构封装在对象中。在面向对象程序设计,我们可以这样来表述程序:向对象程序设计,我们可以这样来表述程序:程序程序=(对象对象+对象对象+对象对象+)+消息消息 或或 程序程序=对象对象s+消息消息 对象对象=算法算法+数据结构数据结构2023-11-12
42、5656第第1章章 面向对象程序设计概述面向对象程序设计概述1.2.3 面向对象程序设计的优点面向对象程序设计的优点v2面向对象程序中的数据的安全性高面向对象程序中的数据的安全性高 面向对象程序中的数据及对数据的操作捆绑在一起,面向对象程序中的数据及对数据的操作捆绑在一起,被封装在不同的对象中。对象对外隐蔽其内部细节,被封装在不同的对象中。对象对外隐蔽其内部细节,只留下少量的接口,以便与外界联系。外界只能通过只留下少量的接口,以便与外界联系。外界只能通过对象提供的对外接口操作对象中的数据,这可以有效对象提供的对外接口操作对象中的数据,这可以有效保护数据的安全。保护数据的安全。2023-11-1
43、25757第第1章章 面向对象程序设计概述面向对象程序设计概述1.2.3 面向对象程序设计的优点面向对象程序设计的优点v3面向对象程序设计有助于软件的维护与复用面向对象程序设计有助于软件的维护与复用 某类对象数据结构的改变只会引起该类对象操作代某类对象数据结构的改变只会引起该类对象操作代码的改变,只要其对外提供的接口不发生变化,程序码的改变,只要其对外提供的接口不发生变化,程序的其余部分就不需要做任何改动,从而把程序代码的的其余部分就不需要做任何改动,从而把程序代码的修改维护局限在一个很小的范围内。这就对用户需求修改维护局限在一个很小的范围内。这就对用户需求的变化有较强的适应性。的变化有较强的
44、适应性。2023-11-125858第第1章章 面向对象程序设计概述面向对象程序设计概述1.2.3 面向对象程序设计的优点面向对象程序设计的优点v3面向对象程序设计有助于软件的维护与复用面向对象程序设计有助于软件的维护与复用 面向对象程序设计中类的继承机制有效解决了代码复面向对象程序设计中类的继承机制有效解决了代码复用的问题。在设计新类时,可通过继承引用已有类的用的问题。在设计新类时,可通过继承引用已有类的属性和操作,并可在已有类的基础上增加新的数据结属性和操作,并可在已有类的基础上增加新的数据结构和操作,延伸和扩充已有类的功能,这种延伸和扩构和操作,延伸和扩充已有类的功能,这种延伸和扩充一点
45、不影响原有类的使用。人们可以像使用集成电充一点不影响原有类的使用。人们可以像使用集成电路(路(IC)构造计算机硬件那样,比较方便地重用对象)构造计算机硬件那样,比较方便地重用对象类来构造软件系统。类来构造软件系统。2023-11-125959第第1章章 面向对象程序设计概述面向对象程序设计概述v面向对象的软件工程包括以下几个阶段:面向对象的软件工程包括以下几个阶段:1面向对象分析(面向对象分析(object oriented analysis,OOA)2面向对象设计(面向对象设计(object oriented design,OOD)3面向对象编程(面向对象编程(object oriented
46、 programming,OOP)4面向对象测试(面向对象测试(object oriented test,OOT)5面向对象维护(面向对象维护(object oriented soft maintenance,OOSM)1.3 面向对象的软件开发面向对象的软件开发2023-11-126060第第1章章 面向对象程序设计概述面向对象程序设计概述v1.4.1面向对象分析面向对象分析 1.考虑问题域,识别系统中的对象与类。考虑问题域,识别系统中的对象与类。1.4 图书馆图书借阅管理系统的面向对象分析与设计图书馆图书借阅管理系统的面向对象分析与设计2023-11-126161第第1章章 面向对象程序设
47、计概述面向对象程序设计概述(1)图书对象图书对象与与图书图书类类在图书馆图书借阅管理系统中,每一本被借阅的图书都是系在图书馆图书借阅管理系统中,每一本被借阅的图书都是系统中的一个对象。所有图书对象都具有相同的属性:图书统中的一个对象。所有图书对象都具有相同的属性:图书条形码、图书名称、图书类型、作者、出版社、出版时间、条形码、图书名称、图书类型、作者、出版社、出版时间、图书价格、是否在架、图书被借次数,相同的操作:初始图书价格、是否在架、图书被借次数,相同的操作:初始化属性值(从键盘)、提供属性值、修改属性值、显示属化属性值(从键盘)、提供属性值、修改属性值、显示属性值(到屏幕)、从图书文件读
48、取属性值、写属性值到图性值(到屏幕)、从图书文件读取属性值、写属性值到图书文件。对所有图书对象的抽象,形成一个图书类。图书书文件。对所有图书对象的抽象,形成一个图书类。图书类的类的UML(Unified Modeling Language,统一建模语言),统一建模语言)表示如图表示如图1-7所示。所示。2023-11-126262第第1章章 面向对象程序设计概述面向对象程序设计概述图1-7图书馆图书借阅管理系统中图书类和“图书顺序表”容器类类图2023-11-126363第第1章章 面向对象程序设计概述面向对象程序设计概述(2)学生对象与学生类学生对象与学生类在图书馆图书借阅管理系统中,每一位
49、可以借阅图书的在图书馆图书借阅管理系统中,每一位可以借阅图书的学生都是该系统中的一个对象。所有学生对象都具有学生都是该系统中的一个对象。所有学生对象都具有相同的属性:登录名、登录密码、学号、姓名、性别、相同的属性:登录名、登录密码、学号、姓名、性别、年龄、所属学院、专业、班级、入学时间、毕业时间、年龄、所属学院、专业、班级、入学时间、毕业时间、借阅时长限制、借阅册数限制、在借册数、联系电话,借阅时长限制、借阅册数限制、在借册数、联系电话,相同的操作:初始化属性值(从键盘)、提供属性值、相同的操作:初始化属性值(从键盘)、提供属性值、修改属性值、显示属性值(到屏幕)、从学生文件读修改属性值、显示
50、属性值(到屏幕)、从学生文件读取属性值、写属性值到学生文件。对所有学生对象的取属性值、写属性值到学生文件。对所有学生对象的抽象,形成一个学生类。抽象,形成一个学生类。2023-11-126464第第1章章 面向对象程序设计概述面向对象程序设计概述(3)教师对象与教师类教师对象与教师类在图书馆图书借阅管理系统中,每一位可以借阅图书的在图书馆图书借阅管理系统中,每一位可以借阅图书的教师都是该系统中的一个对象。所有教师对象都具有教师都是该系统中的一个对象。所有教师对象都具有相同的属性:登录名、登录密码、职工号、姓名、性相同的属性:登录名、登录密码、职工号、姓名、性别、年龄、所在学院、从事学科、入职时