c面向对象程序设计张冰

上传人:san****019 文档编号:69687171 上传时间:2019-01-14 格式:PPT 页数:20 大小:368KB
返回 下载 相关 举报
c面向对象程序设计张冰_第1页
第1页 / 共20页
c面向对象程序设计张冰_第2页
第2页 / 共20页
c面向对象程序设计张冰_第3页
第3页 / 共20页
c面向对象程序设计张冰_第4页
第4页 / 共20页
c面向对象程序设计张冰_第5页
第5页 / 共20页
点击查看更多>>
资源描述

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

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

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

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

5、AX_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 100

6、0 unsigned 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)

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

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

9、数据,函数,9,面向对象程序设计举例,优点: 1. 采用动态数组实现内存的按需分配 2. 主函数不涉及问题具体的解决方法以及问题所涉及的数据的组织形式和处理算法 3. 数据及对数据处理的函数聚集在类这样一个数据类型中,数据受到了保护 4. 用类较好地实现了结构化程序设计中高内聚低耦合的思想,#include using namespace std; class CSieve private: 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(); ,10,抽象性信息隐藏与数据封装构成了面向对象程序设计的基础。 信息隐藏处理某个数据的所有相关函数都集中在一起。 数据封装数据在类这个封装体的外部不可能被访问。 继承性提供类复合的实现机制,有助于实现代码的重用。继承性是面向对象程序设计的关键。 多态性提供类

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

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

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

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

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

最新文档


当前位置:首页 > 高等教育 > 大学课件

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