C面向对象程序设计张冰.ppt

上传人:博****1 文档编号:570968970 上传时间:2024-08-07 格式:PPT 页数:20 大小:368KB
返回 下载 相关 举报
C面向对象程序设计张冰.ppt_第1页
第1页 / 共20页
C面向对象程序设计张冰.ppt_第2页
第2页 / 共20页
C面向对象程序设计张冰.ppt_第3页
第3页 / 共20页
C面向对象程序设计张冰.ppt_第4页
第4页 / 共20页
C面向对象程序设计张冰.ppt_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《C面向对象程序设计张冰.ppt》由会员分享,可在线阅读,更多相关《C面向对象程序设计张冰.ppt(20页珍藏版)》请在金锄头文库上搜索。

1、第一章第一章 程序设计与C+语言1 1面向过程的程序设计面向过程的程序设计结构化程序设计基本思想自顶向下逐步求精模块化设计结构化编码2 2结构化程序设计举例结构化程序设计举例问题:验证哥德巴赫猜想任意一个大于2的偶数都可以分解成两个素数之和。自顶向下、逐步求精1. 首先将问题分解成判断每个大于2的偶数n能否分解成两个素数之和2. 对上述问题进一步求精,问题的求解方法变成为选一个小于n的素数x,判断n-x是否为素数3. 问题简化为怎样判断一个数是素数4. 问题进一步简化为怎样判断一个数是否为另一个数所整除5. 到此,问题的求解过程已经完全清楚模块化设计、结构化编码步骤1和步骤2可以用一个函数模块

2、proveGoldbach实现,模块中采用双重循环结构,外层循环n从4开始,每次加2。内层循环x从2开始,每次加1直到n/2。函数模块的功能是判断x和n-x是否都是素数。步骤3用函数模块isPrime实现,模块内用循环结构步骤4用函数模块isDividable实现,模块内用选择结构主函数模块main直接调用proveGoldbach模块,proveGoldbach模块调用isPrime模块,isPrime模块调用isDividable模块mainproveGoldbachisPrimeisDividable3 3内聚与耦合内聚与耦合衡量结构化程序设计的好坏有两个指标:1.内聚度:指同一个模块中

3、各个步骤之间的关联程度2.耦合度:表示被调用函数与调用函数之间的接口复杂程度质量高的程序应该内聚度要高,耦合度要低#include /筛法求素数#define MAX_NUM 1000 void main() unsigned char sieveMAX_NUM+1; long i, j, k=0; for (i=2; i = MAX_NUM; i+) /将全部数放进筛子 sievei = 1; for (i=2; i = MAX_NUM; i+) if (sievei = 1) /如果i在筛子里,也即i是素数 k+; printf(“%ld, “, i); if (k % 15 = 0) p

4、rintf(“n”); k = 0; for (j=i*i; j = MAX_NUM; j += i) /将素数i的倍数从筛子中取出 sievej = 0; printf(“n”); 存在的问题: 信息隐藏性不好.主函数既包括问题的具体解决过程,叉涉及具体的数据和对数据进行处理的算法解决方法: 用函数封装具体的数据和对数据处理的方法4 4内聚与耦合内聚与耦合(续续)#include #define MAX_NUM 1000void findPrimeAndPrint()unsigned char sieveMAX_NUM+1; long i, j, k=0; for (i=2; i = MAX

5、_NUM; i+) sievei = 1; for (i=2; i = MAX_NUM; i+) if (sievei = 1) k+; printf(“%ld, “, i); if (k % 15 = 0) printf(“n”); k = 0; for (j=i*i; j = MAX_NUM; j += i) sievej = 0; printf(“n”); void main() findPrimeAndPrint();改进一: 缺点: findPrimeAndPrint()函数内聚度较低。既包含求素数的功能,又要打印素数#include #define MAX_NUM 1000unsi

6、gned char sieveMAX_NUM+1;void findPrime() long i, j; for (i=2; i = MAX_NUM; i+) sievei = 1; for (i=2; i = MAX_NUM; i+) if (sievei = 1) for (j=i*i; j = MAX_NUM; j += i) sievej = 0; void printPrime() long i, k=0; for (i=2; i = MAX_NUM; i+) if (sievei = 1) k+; printf(“%ld, “, i); if (k % 15 = 0) printf

7、(“n”); k = 0; printf(“n”);void main() findPrime(); printPrime();改进二: findPrimeAndPrint()函数分解成findPrime()和printPrime()两个高内聚的函数,但由于sieve数组成为全局变量,这两个函数的耦合度增强了5 5结构化程序设计的缺点结构化程序设计的缺点程序设计以功能为中心(而不是以数据为中心)、按步骤来进行。程序由一组相互协作的函数组成数据与处理数据的函数之间是分离的很难同时做到高内聚低耦合大型软件的编写比较复杂,软件开发和维护的费用比较高软件危机问题6 6随堂练习随堂练习1. 不是结构化程

8、序设计的控制结构。 A. 顺序 B. 内聚和耦合 C. 循环 D. 选择2. 结构化程序设计最本质的缺陷在于。 A. 程序设计以功能为中心 B. 内聚度较低 C. 耦合度较高 D. 标识符命名容易冲突7 7面向对象程序设计面向对象程序设计基本原理:1.将数据和对数据进行操作(输入、访问、修改、输出等)的函数绑定封装在一个称为类的数据类型中。2.程序设计以数据为中心,程序由一组相互协作的对象组成。基本概念: 对象:客观世界中任何一个事物都可以看成一个对象,对象可大可小,例如学校是一个对象,一个班级也是一个对象,一个学生也是一个对象。 任何一个对象都应当具有这两个要素: 1. 属性 2. 行为 对

9、象数据函数8 8面向对象程序设计举例面向对象程序设计举例优点: 1. 采用动态数组实现内存的按需分配2. 主函数不涉及问题具体的解决方法以及问题所涉及的数据的组织形式和处理算法3. 数据及对数据处理的函数聚集在类这样一个数据类型中,数据受到了保护4. 用类较好地实现了结构化程序设计中高内聚低耦合的思想#include using namespace std;class CSieveprivate: char *p_sieve; unsigned long num;public: CSieve(unsigned long n); void findPrime(); void printPrime

10、(); CSieve() delete p_sieve; ;void CSieve:findPrime() long i, j; for (i=2; i = num; i+) p_sievei = 1; for (i=2; i = num; i+) if (p_sievei = 1) for (j=i*i; j = num; j += i) p_sievej = 0; void CSieve:CSieve(unsigned long n) p_sieve = new charn+1; num = n;void CSieve:printPrime() long i, k=0; for (i=2;

11、 i = MAX_NUM; i+) if (sievei = 1) k+; cout i “, “; if (k % 15 = 0) cout endl; k = 0; cout endl;void main()CSieve number(1000); number.findPrime(); number.printPrime();9 9抽象性信息隐藏与数据封装构成了面向对象程序设计的基础。信息隐藏处理某个数据的所有相关函数都集中在一起。数据封装数据在类这个封装体的外部不可能被访问。继承性提供类复合的实现机制,有助于实现代码的重用。继承性是面向对象程序设计的关键。多态性提供类对象接口与其具体实

12、现相分离的手段多态性是面向对象程序设计的补充。函数重载用不同的接口访问同名的函数。运算符重载扩充运算符的功能。接口重用用同样的接口访问功能不同的函数。面向对象程序设计基本思想面向对象程序设计基本思想1010每个部门有自己的数据和处理数据的方法人事档案财务报表销售数据每个部门的数据不对外公开部分之间通过发送消息获取对方的数据抽象性举例抽象性举例1111继承性体现在产品的更新换代多态性体现在不同类型的手机采用不同的界面来实现同一个功能继承性和多态性举例继承性和多态性举例1212随堂练习随堂练习1. 数据与处理数据的函数被封装在一起,体现了面向对象程序设计的。 A. 抽象性 B. 继承性 C. 多态

13、性 D.数据相关性2. 新产品在老产品的基础上的功能升级是特性的具体应用。 A. 数据封装 B. 信息隐藏 C. 继承与派生 D.函数重载3. 面向对象程序设计与结构化程序设计的最根本不同之处在于。 A. 运用了自顶向下,化抽象为具体的方法 B. 程序的编码强调模块化原则 C. 从描述问题所涉及的物体的属性和行为着手 D. 从问题的解决过程着手1313C语言的特点语言的特点优点:C语言简洁、紧凑,使用方便、灵活具有丰富的运算符和数据类型支持结构化的块结构和流控制提供了直接访问内存地址的机制,能进行位操作可移植性好缺点:C语言数据类型检查机制相对较弱数组下标越界问题初始化问题语言简洁紧凑,但同时

14、某些特定符号可因为上下文不同分别代表不同的含义,容易混淆C语言没有支持代码重用的语言结构程序员很难控制用C语言编写的程序的规模和复杂性C语言不支持面向对象的程序设计方法1414C+语言的特点语言的特点优点:增加了类这一复合数据类型。数据被限定在类的范围内,使其在类的外部为不可见(不能访问)。类将关系密切的一组函数与其共同处理的数据聚集在一起,能够显示某个函数与其他函数之间的逻辑关系和紧密程度。 C+程序由对象组成。采用C+语言进行程序设计便于描述现实世界各种对象的客观规律,与人类习惯的思维方法相一致。C+提供了类复合和类派生的实现机制,使得程序员可以实现现实世界中复杂的对象(由简单对象组合而成

15、),以及便于软件的重复利用。C+通过构造函数和析构函数隐含地对对象进行初始化和释放对象占用的系统资源C+支持函数的重载,运算符重载。C+提供虚函数来实现接口重用。C+采用模板,使程序设计标准化、通用化缺点:C+语言比较复杂C+语言必须与面向对象程序设计方法相结合,才能体现C+语言提供的面向对象的特征和功能。1515一种编程风格一种编程风格一行代码只写一条语句。尽可能在定义变量的同时对其初始化(就近原则)。程序的分界符和应独占一行并且位于同一列,同时与引用它们的语句左对齐。通过在程序的每一行开头键入不同次数的TAB键进行缩进,以体现程序的层次结构。标识符的命名尽量做到见其名知其义,且不同类型和不

16、同属性的标识符遵循下述不同的命名法则:局部变量名用小写,变量名单词之间用下划线连接如果局部变量为指针变量,则变量名以小写p开头如果局部变量为引用变量,则变量名以小写r开头全局变量名各单词的第一个字母用大写,变量名单词之间用下划线连接如果全局变量为指针变量,则变量名以大写P开头常量标识符全部大写函数名第一个单词小写,之后各单词的第一个字母大写,单词之间不用下划线连接结构名以大写S开头,之后各单词的第一个字母大写,单词之间不用下划线连接联合名以大写U开头,之后各单词的第一个字母大写,单词之间不用下划线连接枚举名以大写E开头,之后各单词的第一个字母大写,单词之间不用下划线连接类名以大写C开头,之后各

17、单词的第一个字母大写,单词之间不用下划线连接 1616结构化程序设计的结构化程序设计的C+程序框架程序框架预处理程序命令预处理程序命令以“#”开头,供编译程序的预处理器处理预处理程序命令有三类:宏定义命令 #define文件包含命令#include条件编译命令#ifdef#endif全局变量的定义和说明在函数外部定义的变量变量的定义指出变量的数据类型和存储类型,并为该变量分配相应的存储空间变量的说明是为了建立变量名与变量类型之间的对应关系,变量在说明时并不分配内存变量的定义是唯一的,而变量的说明可以重复出现多次用户自定义函数用户自己编写的实现特定应用程序功能的函数主函数main程序的入口,是程

18、序最抽象最高层的功能的具体实现一个程序有且仅有一个主函数1717面向对象程序设计的面向对象程序设计的C+程序框架程序框架类的说明(.h文件)类的实现(.cpp文件)预处理程序命令全局变量的定义和说明类成员函数的定义用户自定义函数主函数main1818采用面向对象方法的微软采用面向对象方法的微软 MFCMFC程序框架程序框架应用程序类主窗口框架类文档类视图类全局应用程序对象1919随堂练习随堂练习1. C+与C语言最根本的不同之处在于。 A. 能够实现变量自动初始化 B.使用了类 C.支持软件重用 D.支持接口重用2. C+程序的结构采用了.h头文件和.cpp源程序文件的组织形式,其目的是。 A. 简化程序的结构 B.精简程序的代码 C. 便于软件重用 D.使接口与实现分离3. 形成良好统一的编码风格的意义在于。 A. 提高程序开发效率 B. 便于移植 C. 便于理解和查错 D. 提高程序运行速度2020

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号