![课件软工oop14-1面向对象程序设计_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-5/4/5426b597-c7f8-4c3e-99c7-dbcc49ef846e/5426b597-c7f8-4c3e-99c7-dbcc49ef846e1.gif)
![课件软工oop14-1面向对象程序设计_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-5/4/5426b597-c7f8-4c3e-99c7-dbcc49ef846e/5426b597-c7f8-4c3e-99c7-dbcc49ef846e2.gif)
![课件软工oop14-1面向对象程序设计_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-5/4/5426b597-c7f8-4c3e-99c7-dbcc49ef846e/5426b597-c7f8-4c3e-99c7-dbcc49ef846e3.gif)
![课件软工oop14-1面向对象程序设计_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-5/4/5426b597-c7f8-4c3e-99c7-dbcc49ef846e/5426b597-c7f8-4c3e-99c7-dbcc49ef846e4.gif)
![课件软工oop14-1面向对象程序设计_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-5/4/5426b597-c7f8-4c3e-99c7-dbcc49ef846e/5426b597-c7f8-4c3e-99c7-dbcc49ef846e5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、面向对象程序设计(面向对象程序设计(C+)北京工业大学软件学院北京工业大学软件学院廖湖声廖湖声 教案网址:教案网址:172.21.14.55/liao参考书:陈维兴编著:参考书:陈维兴编著:C+面向对面向对象程序设计(第三版)清华大学出象程序设计(第三版)清华大学出版社版社一一. 引言引言软件发展的现状:软件发展的现状:大规模,复杂性,用户友好性,大规模,复杂性,用户友好性, 可维护性,可重用性可维护性,可重用性程序设计方法的发展:程序设计方法的发展:过程型程序设计过程型程序设计结构化程序设计结构化程序设计面向对象程序设计面向对象程序设计过程型程序设计特征逐步顺序执行的指令序列支持语言(早期
2、FORTRAN、BASIC) IF(FFCOM.EQ.0.0) GO TO 5030 IF(REGENT.EQ.0.0) GO TO 40 WRITE(6,1150) RGWFR GO TO 5040 RGWFR=0.0 WRITE(6,1160) RGWFR50 WRITE(6,1170)结构化程序结构三种控制结构三种控制结构顺序顺序选择(选择(if else)循环(循环(while)程序结构模块化程序结构模块化单入口单出口单入口单出口C语言等支持语言等支持结构化程序设计方法功能分解,逐步求精功能分解,逐步求精从系统到子系统、到模块、到函数从系统到子系统、到模块、到函数模块化、局部化模块化、
3、局部化例:学生管理信息系统例:学生管理信息系统学籍管理学籍管理入学、毕业。入学、毕业。课程管理课程管理选课、成绩。选课、成绩。面向对象方法基本观点基本观点各种对象组成系统(客观世界)各种对象组成系统(客观世界)各种对象有内部状态和运动规律各种对象有内部状态和运动规律系统工作就是对象的相互作用系统工作就是对象的相互作用课堂教学(系统)课堂教学(系统)教师、学生、投影仪、计算机、白教师、学生、投影仪、计算机、白板。板。什么是对象独立的实体、事物、组织。独立的实体、事物、组织。具有特定的属性和行为具有特定的属性和行为例:学生例:学生属性:姓名、学号、出生年月日。属性:姓名、学号、出生年月日。行为:上
4、课、运动、用餐。行为:上课、运动、用餐。例:选举例:选举属性:候选人、参选人、票数属性:候选人、参选人、票数行为:投票、公布结果行为:投票、公布结果软件系统(信息系统)软件系统(信息系统)对象:抽象的实体、事物对象:抽象的实体、事物属性:数据信息属性:数据信息行为:操作方法(函数过程)行为:操作方法(函数过程)主要特征主要特征对象的属性和行为是相关关联的,不可对象的属性和行为是相关关联的,不可分割分割例:学生的学号和上课是相关关联例:学生的学号和上课是相关关联例:字典中的单词和查找功能是相关的例:字典中的单词和查找功能是相关的例:电视机的屏幕和播放功能是相关的例:电视机的屏幕和播放功能是相关的
5、例:浏览器的操作按钮和导航功能相关例:浏览器的操作按钮和导航功能相关程序设计语言的支持程序设计语言的支持C语言语言结构体可表示对象的多个属性结构体可表示对象的多个属性函数是独立的,不属于任何结构体函数是独立的,不属于任何结构体面向对象程序设计语言(面向对象程序设计语言(C+、Java)将对象作为一个整体来描述将对象作为一个整体来描述对象类:描述某种对象的属性和行为对象类:描述某种对象的属性和行为对象属性:用成员变量表示对象属性:用成员变量表示对象行为:用成员函数表示对象行为:用成员函数表示对象:用变量表示对象:用变量表示C+的对象表示例有理数对象类:有理数对象类:描述有理数的属性和运算行为描述
6、有理数的属性和运算行为class CRational / 有理数类有理数类 int numr; / 分子分子 int deno; / 分母分母public: CRational( int n, int d );/ 构构造函数造函数 void Assign( int n, int d );/ 赋赋值方法值方法 int Equal( CRational r );/ 比比较方法较方法;C+程序例#include using namespace std;#include “CRational.h”main( )int a, b;cin a b;/输入输入2整数整数/构造构造2个有理数个有理数 3/5和
7、和a/bCRational r1(3, 5), r2(a,b);/如果如果3/5 = a/b 则则if( r1.Equal( r2 ) )r1.Assign(5,9); / 将将5/9赋值给赋值给r1C+C+语言现象语言现象对象类是一种类型对象类是一种类型声明变量(对象实例)声明变量(对象实例)CRational r1(3, 5) ;用构造函数初始化(传递参数)用构造函数初始化(传递参数)成员函数的调用成员函数的调用r1.Equal( r2 );r1.Assign( 5, 9 );向有理数对象向有理数对象r1发送消息(传递参数)发送消息(传递参数)程序设计程序设计 = 类设计类设计 + mai
8、n函数设计函数设计 + 类成员函数设类成员函数设计计学习内容和方法学习内容和方法A) 内容内容 C+ 语言对语言对 C 语言的扩充语言的扩充 对象特征:封装性、继承性和多态性对象特征:封装性、继承性和多态性 软件的设计方法软件的设计方法 课程设计课程设计B) 方法方法 实例教学实例教学-语言功能语言功能, 编程技巧编程技巧 上机实习上机实习-理解内容理解内容, 运用能力运用能力 编程总结编程总结-设计方法设计方法, 抽象能力抽象能力 应用设计应用设计-软件设计软件设计, 综合能力综合能力二、对象与类的设计二、对象与类的设计C语言是语言是C+语言的子集语言的子集支持结构化程序设计支持结构化程序设
9、计支持面向对象程序设计支持面向对象程序设计功能繁杂、需要掌握重点功能繁杂、需要掌握重点四种对象类四种对象类实体型:有理数、窗口、学生、车辆实体型:有理数、窗口、学生、车辆管理型:订单管理、成绩管理管理型:订单管理、成绩管理加工型:查询过程、计算过程加工型:查询过程、计算过程事务型:投标过程、监控过程、游戏控事务型:投标过程、监控过程、游戏控制制C+程序组织结构C+程序程序 = main函数函数 + 若干类若干类推荐的组织结构推荐的组织结构main函数(函数(1个个.cpp文件)文件)负责输入输出、测试逻辑负责输入输出、测试逻辑类定义类定义class每个类定义配置每个类定义配置1个个.h文件文件
10、类实现(每个成员函数的实现代码)类实现(每个成员函数的实现代码)每个类的程序实现配置每个类的程序实现配置1个个.cpp文件文件2.1 实体型对象实体型对象典型的实体典型的实体有理数、矩阵、一元二次方法有理数、矩阵、一元二次方法窗口、滚动条、菜单窗口、滚动条、菜单学生信息、图书信息、航班信息、驾驶学生信息、图书信息、航班信息、驾驶证证属性:属性:数据、状态、特征数据、状态、特征方法:方法:设置属性(设置属性(Set)、获得属性()、获得属性(Get)特定的计算特定的计算例例2-1:有理数计算程序有理数计算程序设计思想设计思想设置有理数类设置有理数类 CRational自身独立性(计算规则)自身独
11、立性(计算规则)提供给使用者(被共享)提供给使用者(被共享)类设计类设计内部:数据结构、计算逻辑内部:数据结构、计算逻辑外部:使用需求外部:使用需求C+提供的封装性(不允许直接访问内提供的封装性(不允许直接访问内部)部)有理数类有理数类(CRational.h)class CRational / 有理数类有理数类private: int numr, deno; / 分子分母分子分母 void simplfy( );/ 约分计算约分计算public: CRational( int n, int d );/ 构造函数构造函数 void Assign( int n, int d );/ 赋值方法赋值
12、方法 int Equal( CRational &r );/ 比较方法比较方法 void Result( int &n, int &d );/ 取结果取结果;类设计的基本方法类设计的基本方法按照外部需求设置公有成员按照外部需求设置公有成员(public)有理数的构造、赋值、比较计算需求有理数的构造、赋值、比较计算需求对于其他计算,可增设成员函数对于其他计算,可增设成员函数根据计算需求,设置输入输出类型根据计算需求,设置输入输出类型完备的外部接口完备的外部接口保证类的独立性保证类的独立性不包含输入输出(单独设置取结果函数不包含输入输出(单独设置取结果函数)外部使用者是外部使用者是main函数,或
13、其他类函数,或其他类类设计的基本方法(续)类设计的基本方法(续)按照内部需求设置私有成员按照内部需求设置私有成员(private)数据保存需求,分子分母数据保存需求,分子分母内部计算需求,约分计算(自身责任)内部计算需求,约分计算(自身责任)封装性的体现(封装性的体现(C+编译保证)编译保证)不允许外部计算访问内部数据和计算不允许外部计算访问内部数据和计算其他语言现象其他语言现象参数的引用类型参数的引用类型int &n,CRational &r代替变量实例(作为别名)代替变量实例(作为别名)可双向传递(作为函数的输入输出)可双向传递(作为函数的输入输出)有理数类的实现CRational.cpp
14、# include # include “CRational.h”CRational:CRational( int n, int d ) /构造函数构造函数Assign( n, d );/调用本类函数调用本类函数/ 变量声明后的初始化变量声明后的初始化void CRational:Assign( int n, int d ) numr = n;deno = d;simplfy( );/赋值后约分赋值后约分/可访问私有部分可访问私有部分指定函数所属的类名指定函数所属的类名有理数类的实现(续)有理数类的实现(续)int CRational:Equal( CRational &r ) return
15、numr=r.numr & deno=r.deno;void CRational:Result( int &n, int &d ) n = numr;/ 返回分子返回分子 d = deno;/ 返回分母返回分母/引用类型可用于返回数据引用类型可用于返回数据/C+程序设计尽量用引用代替指针(高效安全)程序设计尽量用引用代替指针(高效安全)本类私有成员的引用本类私有成员的引用最大公约数的算法gcd(n,d)=gcd(d%n,n)1.设设 d n2.while n不能整除不能整除d do 3. d n4. n d除以除以n的余数的余数5.end of while6.gcd n 约分计算void CR
16、ational:Simplify( void ) / 约分约分 int n = abs(numr);/ 绝对值绝对值 int d = abs(deno); if( n d )/ 交换交换 int t = n; n = d; d = t; / 保证保证 n = d while( d %n != 0 ) / 求最大公约数求最大公约数n int d1 = d; d = n; / gcd(n,d)=gcd(d%n,n) n = d1 % n; numr /= n;deno /= n;应用案例应用案例需求说明需求说明输入有理数输入有理数a/b,如果如果a/b等于等于3/5,则计算,则计算(a+2)/(b
17、-2)并输并输出出否则输出否则输出a/b责任分析责任分析main负责输入、控制逻辑、输出负责输入、控制逻辑、输出CRational负责有理数的计算负责有理数的计算程序实现(test2_1.cpp)# include / 输入输出流输入输出流# include CRational.husing namespace std;/ 命名空间命名空间main( )int a, b;cin a b;CRational r1(3, 5), r2(a, b);if( r1.Equal( r2 ) )r2.Assign(a+2, b-2);r2.Result( a, b );cout result = a /
18、(各种类型数据)(各种类型数据)输出流类和标准输出流对象(控制台)输出流类和标准输出流对象(控制台)OStream cout;输出运算符输出运算符 =size),需扩展空间(算法),需扩展空间(算法)申请申请 size + 16 个整数的空间个整数的空间将原空间数据复制到新空间将原空间数据复制到新空间释放原空间释放原空间调整调整 size 和和 elems 的取值的取值添加元素的函数实现添加元素的函数实现CIntSet:Add( int x ) if( Member(x) return; if( used = size ) int *tmp = new int size += 16 ; / 申
19、请申请memcpy(tmp, elems, size*sizeof(int) ); delete elems;/ 释放数组空间释放数组空间elems = tmp;/ 保持首元素地址保持首元素地址 elems used+ = x;/ 添加元素添加元素C+功能点功能点1.构造函数构造函数2.与类同名,用于初始化与类同名,用于初始化3.生成对象实例时被调用(变量声明生成对象实例时被调用(变量声明/new)4.析构函数析构函数5.类名前加类名前加6.撤销对象实例时被调用(撤销对象实例时被调用(delete、出作用域、出作用域)7.空间的动态生成空间的动态生成8.new 类名类名/类型名类型名( 初值)
20、初值)9.new 类名类名/类型名类型名数组大小数组大小10.空间的动态释放空间的动态释放11.delete 空间首地址空间首地址12.delete 数组空间首地址数组空间首地址C) 整数集合的应用例整数集合的应用例应用需求应用需求输入两组整数输入两组整数, 求它们的交集求它们的交集格式输入:逗号分割整数格式输入:逗号分割整数, 分号分割组分号分割组算法算法读入一组整数读入一组整数 集合集合 set1依次读入下一组整数依次读入下一组整数 x如果如果 x 是是 set1 成员,则保存在集合成员,则保存在集合set2否则,继续处理下一整数否则,继续处理下一整数输出集合输出集合set2程序实现#in
21、clude #include “CIntSet.h“using namespace std;main( ) char c; CIntSet set1; do / 第一组第一组 - set1 int x; cin x c; set1.Add(x); while( c = , ); CIntSet *set2 = new CIntSet; do int x; cin x c; if( set1.Member(x) ) set2-Add( x ); while( c = , ); for( int i=0; iNumber( ); i+ )cout GetAt( i ) 成员函数名(参数表)成员函数
22、名(参数表)12.成员变量的引用成员变量的引用13.和结构元素的描述方法相同和结构元素的描述方法相同设计方法小结设计方法小结1.类型和类的关系类型和类的关系2.数据类型是一种对象类,行为是规定好的数据类型是一种对象类,行为是规定好的3.类是一种类型,可以自定义行为类是一种类型,可以自定义行为4.对象类的设计对象类的设计5.面向使用者,满足外部使用的需求面向使用者,满足外部使用的需求6.表现为完备的公有函数的接口设计表现为完备的公有函数的接口设计7.无法满足时无法满足时, 设计新的成员函数设计新的成员函数8.对象类的实现对象类的实现9.数据结构描述内部数据组织数据结构描述内部数据组织10.按照实
23、现需求,设计数据结构和算法按照实现需求,设计数据结构和算法11.按照算法,编制程序代码按照算法,编制程序代码程序设计练习题(程序设计练习题(2.2)1.改造程序例改造程序例 2.22.补充整数集合类的方法补充整数集合类的方法menber和和Equal3.改造应用程序,求改造应用程序,求3个集合的交集个集合的交集4.设计设计1个双精度数的动态数组个双精度数的动态数组5.支持按照下标的数组元素访问支持按照下标的数组元素访问6.提供数组大小自动扩展功能提供数组大小自动扩展功能7.提供数据求和、求个数的功能提供数据求和、求个数的功能8.设计设计1个应用程序,输入个应用程序,输入2组双精度数,组双精度数
24、,完成元素之间的乘法,输出结果矩阵完成元素之间的乘法,输出结果矩阵9.要求上机编码、调试和运行要求上机编码、调试和运行2.3 运算符重载C+语言的特殊功能语言的特殊功能提供扩展运算符定义的功能提供扩展运算符定义的功能C+的运算符的运算符四则运算、关系运算、逻辑运算四则运算、关系运算、逻辑运算赋值、自反、赋值、自反、 、( )定义方法定义方法作为类的成员函数作为类的成员函数作为全局函数作为全局函数例2-3 捐款统计表捐款程序的需求捐款程序的需求接受实名的捐款接受实名的捐款提供登记、查询、统计、打印功能提供登记、查询、统计、打印功能同一人可能多次捐款同一人可能多次捐款设计思路设计思路捐款管理功能包
25、括登记、统计、查询;捐款管理功能包括登记、统计、查询;是管理型对象(捐款统计表)是管理型对象(捐款统计表)主程序负责输入、输出(打印)主程序负责输入、输出(打印)捐款统计表类的外部接口捐款统计表类的外部接口class Table / 满足所有的使用需求满足所有的使用需求public:Table( void );Tabal( void );void Add( string name, int num ); / 添加添加int Sum( void );int Lookup( string name ); / 查找查找void Output( ostream &out );/ 将表格输出到输出流将表
26、格输出到输出流out Table的内部组织的内部组织数据维护需求:适应人数不定的情况数据维护需求:适应人数不定的情况class Table struct node /采用链表采用链表string name;int number;node *next; *head;/表头指针表头指针 public:;方法的实现方法的实现# include # include # include “Table.h“using namespace std;Table:Table( void ) head = NULL;Table:Table( void ) while( head != NULL ) node *q
27、 = head;head = head-next;delete q;/ 释放所有节点释放所有节点Add的实现void Table:Add( string name, int number ) node *p; for( p=head; p!=NULL; p=p-next ) if( p-name = name ) / 再次捐款处理再次捐款处理 p-number += number;return; p = new node;/在表头添加新节点在表头添加新节点 p-next = head; head = p; head-name = name; head-number = number;主程序的算
28、法设计主程序的算法设计while( 1 ) name 读入捐款人姓名读入捐款人姓名 if name=endbreak;number 捐款数量捐款数量将将name和和number登记到统计表登记到统计表tablewhile( 1 ) name 读入姓名读入姓名If name=sumthen统计捐款额输出,并输出整个表格统计捐款额输出,并输出整个表格return从从table找出他的捐款数量,并输出找出他的捐款数量,并输出主程序的实现主程序的实现#include #include #include “Table.h”using namespace std;main( ) Table table;/
29、 统计表统计表 string name;int number; while( 1 ) cin name;/ 姓名姓名if( name=end )break; cin number; / 捐款数量捐款数量table.add( name, number ); 主程序(续)主程序(续)while( 1 ) cin name;if(name=“sum“) cout table.sum( ) n;table.Output(cout);/改为改为 cout table; else cout table.Lookup( name );/cout table name ;/利用运算符重载可简化程序的描述利用运算符重载可简化程序的描述重载重载 重载重载使用运算符重载的Tableclass Table / 满足所有的使用需求满足所有的使用需求public: Table( void ); Tabal( void ); void Add( string name, int num ); / 添加添加 int Sum(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年软件销售中介服务合同样本
- 2025年大型购物中心加盟合同模板
- 2025年防腐施工及后续保修合同示范文本
- 阀门产品购销申请协议2025
- 2025年个人贷款购房合同
- 2025年网络及通信协议处理软件项目规划申请报告模范
- 2025年特种用途钢丝及钢丝绳项目规划申请报告
- 2025年搅拌车采购合同样本
- 2025年角质溶解药项目规划申请报告模板
- 2025年矿业物探仪器项目提案报告
- 监理专题安全例会纪要(3篇)
- GB/T 17374-2024食用植物油销售包装
- 高级烟草制品购销员(三级)职业资格鉴定理论考试题及答案
- 河道清淤疏浚投标方案(技术方案)
- 护理部工作总结
- 2017年湖北省黄冈市中考语文(有解析)
- 幼儿园数学《比较物体的大小》课件
- 中国水利水电第十二工程局有限公司招聘笔试真题2023
- DB37-T3953-2020医疗卫生机构安全风险分级管控体系实施指南
- 工业机器人系统运维员(中级)课件全套 宋永昌 项目1-3 机械系统检查与诊断-工业机器人运行维护与保养
- T-CSPSTC 111-2022 表层混凝土低渗透高密实化施工技术规程
评论
0/150
提交评论