




已阅读5页,还剩45页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,C+程序设计,清华大学,.,课程安排,课程名称:C+程序设计(ProgramminginC+)课程目的:掌握C+程序设计语言和面向对象的软件系统开发方法;树立软件工程的思想,培养良好规范的编程风格;在实践中提高自学能力、动手能力;,.,课程安排,教材:C+程序设计教程,钱能,清华大学出版社,1999年.参考书:C程序设计(第2版),谭浩强,清华大学出版社,1995年.C+Primer(第3版),StanleyBLippman.TheC+ProgrammingLanguage(SpecialEdition),BjarneStroustrup,高等教育出版社,2001年.,.,教学安排(8节课),第一讲本学期课程综述面向对象程序设计第二讲基本数据类型、表达式过程化语句第三讲函数和程序结构数组第四讲指针和引用结构、联合,.,教学安排,第五讲类和对象第六讲继承第七讲重载I/O流第八讲模板异常处理,.,实验,加强实践环节编译环境:VisualC+6.0每堂课后布置实验题,要求大家在一周内独立完成;第4周后布置Project题目,每人选做1题,第9周提交检查。,.,助教,王斌:bwangcsis.hku.hk刘续征:Liu-xz02董未名:dongwm姚海龙:yhl02,.,成绩评定,期末成绩:出勤、平时实验成绩30%期末考试成绩40%Project完成情况30%注意事项:免修要求抄袭0分!,.,第一章概述,计算机的基本结构程序设计语言程序设计方法早期的程序设计方法结构化程序设计方法面向对象程序设计方法程序开发过程,.,计算机基本结构,.,.,程序设计语言,.,程序设计方法,早期的程序设计方法结构化程序设计方法面向对象程序设计方法,.,早期的程序设计方法,没有固定程序设计方法。追求程序的高效率,编程过份依赖技巧,而不注重所编写程序的结构。程序的可读性、可重用性都很差。虽然这种方法存在很多问题,但对于单人完成较为简单的任务,事实上还是经常被采用的。,.,结构化程序设计方法,结构化程序设计采用自顶向下逐步求精的设计方法和单入口单出口的控制结构。1965年由E.W.Dijkstra提出。C.Bohm和G.Jacopini证明:只用3种基本控制结构就能够实现任何单入口单出口的程序。,.,分支结构,顺序结构,循环结构,.,逐步求精,结构化程序设计方法是从程序要实现的功能的角度出发的。一般按照自顶向下、逐步求精的方式,将程序要完成的功能逐级划分成许多小的功能模块,象搭积木一样搭起来。这些小的功能模块最终都可以转化成三种基本控制结构的组合。所谓的功能可以理解为对数据的操作。在程序实现中,特定的功能或功能模块一般用函数来实现,对特定的数据进行操作。,.,实例,从键盘输入一个学生的信息(包括姓名、年龄、性别、学号等)和一个老师的信息(包括姓名、年龄、性别、是否授课等),然后将信息输出到屏幕。,.,分析,把问题划分为两个功能模块:输入模块:负责把信息输入进来,并且保存在变量中;输出模块:负责把存放在这些变量当中的信息显示在屏幕上。具体考虑每个模块如何实现(逐步求精)用C语言实现(参看下面的代码),.,/voidmain()/主函数开始/声明用于存储学生信息的变量charstrStudentName20;/学生姓名intnStudentAge;/学生年龄charcStudentSex;/学生性别intnStudentNumber;/学生学号/声明用于存储老师信息的变量charstrTeacherName20;/老师姓名intnTeacherAge;/老师年龄charcTeacherSex;/老师性别intnIsTeaching;/是否授课/输入模块GetStudentInfo();/输入学生信息GetTeacherInfo();/输入老师信息/输出模块PrintStudentInfo();/输出学生信息PrintStudentInfo();/输出老师信息,描述学生的数据,描述老师的数据,函数,函数,.,/学生结构StudentstructStudentcharstrStudentName20;/学生姓名intnStudentAge;/学生年龄charcStudentSex;/学生性别intnStudentNumber;/学生学号;/老师结构TeacherstructTeachercharstrTeacherName20;/老师姓名intnTeacherAge;/老师年龄charcTeacherSex;/老师性别intnIsTeaching;/是否教书;,.,进一步将属于学生和老师的变量放入结构中。这样可以在一定程度上完成对数据的封装。但在结构化程序设计中,数据与对其进行操作的函数仍是分离的。,.,结构化设计方法的优点,自顶向下逐步求精符合解决复杂问题的普遍规律,可以显著提高开发效率;用先抽象后具体的逐步求精过程开发的程序具有清晰的层次结构;单入口单出口的控制结构,程序的静态结构和动态执行情况比较一致;控制结构有确定的逻辑模式,源程序清晰流畅,易读易懂易测试。,.,数据量增大时,数据与算法的分离使程序越来越难于理解;用计算机解题的逻辑来进行程序设计工作,而并不符合人类习惯的思维模式和解决问题的方法。函数用于完成一定的功能,它们都是针对特定的数据进行操作的。能不能以特定的数据为中心,将数据与对其进行操作的函数封装起来呢?,结构化设计方法的问题,.,面向对象程序设计方法,面向对象程序设计是建立在结构化程序设计基础上的,但它不再是从功能入手,而是从对象(人、地方、事情等)入手。面向对象程序设计以类作为构造程序的基本单位,它具有封装、数据抽象、继承、多态等特点。,.,发展概述,60年代,挪威计算中心的KristenNygaard和Ole-JohanDahl开发了的Simula67语言,首次引入了类、协同程序和子类的概念。70年代中期,XeroxPaloAlto研究中心的研究人员设计了Smalltalk语言。,.,但是,面向对象的推广很慢,例如:Smalltalk。80年代,C成为很受欢迎的程序设计语言,它不仅可用在微机上,还可用在多种结构的系统和环境中。AT/构造函数Student();/析构函数char*GetName();/查询姓名intGetAge();/查询年龄charGetSex();/查询姓名intGetNumber();/查询学号boolSetName(char*n);/设置姓名boolSetAge(intage);/设置年龄boolSetSex(char*s);/设置性别boolSetNumber(intnum);/设置学号protected:/保护成员charm_strName20;/姓名,字符串数组intm_nAge;/年龄,整型charm_cSex;/性别,字符型intm_nNumber;/学号,整型;,例:Student类,成员函数,成员函数,成员变量,.,结构化程序设计方法是一种模块化程序设计方法,它在解决问题时是以功能为中心的,一定的功能模块虽然也作用于特定的数据,但它们并没有被封装在一起。面向对象程序设计方法则是以对象为中心来解决问题的。属于同种对象的属性(数据)和服务(功能)被抽象出来封装到一起。,.,面向对象方法的主要特点,数据抽象封装继承多态动态绑定,.,数据抽象,类是一组相似对象的抽象描述,它抽取了这些对象的共性组成了一个共同的概念。抽象数据类型(AbstractDataType,ADT)是一组相似的类的抽象,而一个类又是ADT的具体实现。,.,封装性(Encapsulation),封装是指软件的组成部分(模块、子程序、方法等)应该互相独立,或者隐藏设计的细节。在传统的方法中,封装通常局限于将功能和数据分开封装;而在面向对象方法中,封装将功能和数据同时装入对象中。,.,classStudent/Student类的声明public:/公有成员Student();/构造函数Student();/析构函数char*GetName();/查询姓名intGetAge();/查询年龄charGetSex();/查询姓名intGetNumber();/查询学号boolSetName(char*n);/设置姓名boolSetAge(intage);/设置年龄boolSetSex(char*s);/设置性别boolSetNumber(intnum);/设置学号protected:/保护成员charm_strName20;/姓名,字符串数组intm_nAge;/年龄,整型charm_cSex;/性别,字符型intm_nNumber;/学号,整型;,例:C+中类的声明Student类,.,继承(Inheritance),如果类与类之间有is-a(是一种)的关系,那么可以采用继承机制来表示。子类可以自动继承父类中的一些属性和行为,而不必再进行定义,从而实现了代码的复用。同时,继承也是产生新类的方法之一。,人,学生,教师,.,classPeople/People类的声明public:/公有成员People();/构造函数People();/析构函数char*GetName();/查询姓名intGetAge();/查询年龄boolSetName(char*n);/设置姓名boolSetAge(intage);/设置年龄private:/私有成员protected:/保护成员charm_strName20;/姓名,字符串数组intm_nAge;/年龄,整型charm_cSex;/性别,字符型;,类的声明举例People类,.,classTeacher:publicPeople/Teacher类的声明public:/公有成员Teacher();/构造函数Teacher();/析构函数boolIsTeaching();/查询是否授课private:/私有成员protected:/保护成员boolm_bIsTeaching/是否授课;,类的声明举例Teacher类,.,classStudent:publicPeoplepublic:Student();/构造函数Student();/析构函数intGetNumber();/查询学号boolSetNumber(intn);/设置学号private:protected:intm_nNumber;/学号;,类的声明举例Student类,.,继承性的优点,共享程序代码和数据结构,减少程序中的冗余信息,提高软件的可重用性;便于软件修改维护;“站在巨人的肩膀上”;,.,多态性(Polymorphism),在程序中同一符号或名字在不同情况下具有不同解释的现象称为多态性。在面向对象程序设计语言中,由程序员设计的多态性由两种基本形式:编译时多态性和运行时多态性。许多程序设计语言都或多或少地支持多态性,但运行时多态性是面向对象程序设计语言的一大特点。,.,编译时多态性是指在程序编译阶段即可确定下来的多态性,主要通过使用重载(Overloading)机制获得,重载机制包括函数重载和运算符重载两大类。例子:intAbs(intx);doubleAbs(doublex);coutAbs(-4)endl;/调用intAbscoutAbs(3.2)endl;/调用doubleAbs,.,运行时多态性是指必须等到程序动态运行时才可确定的多态性,主要通过继承结合动态绑定(DynamicBinding)获得。动态绑定也称晚绑定,它也是面向对象的重要特点之一。动态绑定的使用可以提高程序的可用性和可扩展性。动态绑定是通过虚函数实现的。,.,多态性的优点,增加了面向对象软件系统的灵活性,减少了信息冗余;显著提高了软件的可重用性和可扩展性;,.,面向对象方法的优点,与人类习惯的思维方式比较一致;稳定性好;可重用性好;可维护性好;,.,程序的开发过程,.,一个简单的程序,/*ch1_1.cpp输出Iamastuden
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年在线教育平台教学质量提升中的学习评价工具开发与应用
- 广东省广州第七中学2026届高一化学第一学期期中质量跟踪监视试题含解析
- 2025年消防设施操作员考试模拟试卷:消防设施管理与操作
- 2025年高考语文古诗文阅读专项训练试卷:冲刺押题及错题解析
- 云南省大理市下关第一中学2026届化学高三第一学期期中调研模拟试题含解析
- 测绘工作个人工作总结
- 2026届河南省叶县一高高一化学第一学期期中考试试题含解析
- 王庆伟量化交易培训课件
- 王东升沥青路面课件
- 廉洁文化教育兴廉洁之风树浩然正气57课件
- 变电站工程施工三措
- 2023年苏教版小学四年级上册综合实践活动教案全册
- 2024风电场在役叶片维修全过程质量控制技术要求
- 2024年首届全国“红旗杯”班组长大赛考试题库1400题(含答案)
- 湖南省建筑工程定额
- 分布式光伏经济评价规范
- 电梯基础知识课件
- 教导式面谈总公课件
- 广东省地质灾害危险性评估实施细则(2023年修订版)
- 学前儿童家庭教育(高职)全套教学课件
- 小学班主任要有“三心”-浅谈小学班主任的师爱
评论
0/150
提交评论