第七章实用程序设计技巧 心71程序的模块化结构 令72模块的组装 ◆72.1文件包含与头文件的使用 ◆7.22模块间的连接 ◆7.24条件编译 宏定义
❖ 7.1 程序的模块化结构 ❖ 7.2 模块的组装 ◆ 7.2.1 文件包含与头文件的使用 ◆ 7.2.2 模块间的连接 ◆ 7.2.4 条件编译 ❖ 宏定义 第七章 实用程序设计技巧
7.1程序的模块化结构 程序设计是一种工程性的工作,通过对任务进行分 析和功能模块分解,将大任务分解为若干子任务,子任 务分别进行设计之后,再进行组合,合并为功能强大而 复杂的一个整体 711软件工程的思想 系统设计分四方面内容: 体系结构设计 模块设计 数据结构与算法设计 用户界面设计
7.1 程序的模块化结构 程序设计是一种工程性的工作,通过对任务进行分 析和功能模块分解,将大任务分解为若干子任务,子任 务分别进行设计之后,再进行组合,合并为功能强大而 复杂的一个整体。 7.1.1 软件工程的思想 系统设计分四方面内容: ◼体系结构设计 ◼模块设计 ◼数据结构与算法设计 ◼用户界面设计
7.1程序的模块化结构 712模块设计 在设计好软件的体系结构后,已经在宏观上明确 了各个模块应具有什么功能,应放在体系结构的哪个 位置。保持“功能独立”是模块化设计的基本原则 因为“功能独立”的模块可以降低开发、测试、维护 等阶段的代价。 功能独立并不意味着模块之间保持绝对的孤立。 个系统要完成某项任务,需要各个模块相互配合才 能实现,此时模块之间就要进行信息交流。 在设计一个模块时不仅要考虑“这个模块就该提 供什么样的功能”,还要考虑“这个模块应该怎样与 其它模块交流信息
7.1.2 模块设计 在设计好软件的体系结构后,已经在宏观上明确 了各个模块应具有什么功能,应放在体系结构的哪个 位置。保持“功能独立”是模块化设计的基本原则。 因为“功能独立”的模块可以降低开发、测试、维护 等阶段的代价。 功能独立并不意味着模块之间保持绝对的孤立。 一个系统要完成某项任务,需要各个模块相互配合才 能实现,此时模块之间就要进行信息交流。 在设计一个模块时不仅要考虑“这个模块就该提 供什么样的功能”,还要考虑“这个模块应该怎样与 其它模块交流信息”。 7.1 程序的模块化结构
7I程序的模块化结构 模块化设计时通常是将一个大型的程序自上向下 的进行功能分解,分成若干个子模块,每个模块对应 了一个功能,有自己的界面,有相关的操作,完成独 立的功能。各个模块可以分别由不同的人员编写和调 试,最后将不同的模块组装成一个完整的程序。 评价模块设计优劣的三个特征因素: 信息隐藏、内聚与耦合、封闭-开放性 在C语言中,用函数实现功能模块的定义,程序的功 能可以通过函数之间的调用实现
7.1 程序的模块化结构 模块化设计时通常是将一个大型的程序自上向下 的进行功能分解,分成若干个子模块,每个模块对应 了一个功能,有自己的界面,有相关的操作,完成独 立的功能。各个模块可以分别由不同的人员编写和调 试,最后将不同的模块组装成一个完整的程序。 ➢评价模块设计优劣的三个特征因素: 信息隐藏、内聚与耦合、封闭--开放性 在C语言中,用函数实现功能模块的定义,程序的功 能可以通过函数之间的调用实现
7.1程序的模块化结构 个完整工程项目的C程序可能由多个源程序文件 组成,每一个文件中又可以包含多个函数。 程序 文件1 文件2 文件3 main函数函数 函数g1 函数n2 函数g2 函数g3
➢一个完整工程项目的C程序可能由多个源程序文件 组成,每一个文件中又可以包含多个函数。 7.1 程序的模块化结构 程序 文件1 main函数 文件2 函数f1 函数f2 文件3 函数g1 函数g2 函数g3
7I程序的模块化结构 7.13使用模块化方法开发程序的好处 模块可以独立于解决方案的其他部分进行单独的编写 和测试,对于大型项目各个模块的开发可以同步进行 模块是解决方案的一小部分,单独测试起来更加容易 经过仔细的测试之后,不需要重新测试就可以将模块 直接应用于新的问题解决方案中 使用模块通常可缩短程序的长度,使程序更具可读性 模块的使用促使采用抽象的概念,从而允许程序员把 细节“隐藏”于模块之中,这使我们能够向使用系统库 函数一样使用模块,而无须考虑具体的细节
7.1 程序的模块化结构 7.1.3 使用模块化方法开发程序的好处 ◼模块可以独立于解决方案的其他部分进行单独的编写 和测试,对于大型项目各个模块的开发可以同步进行 ◼模块是解决方案的一小部分,单独测试起来更加容易 ◼经过仔细的测试之后,不需要重新测试就可以将模块 直接应用于新的问题解决方案中 ◼使用模块通常可缩短程序的长度,使程序更具可读性 ◼模块的使用促使采用抽象的概念,从而允许程序员把 细节“隐藏”于模块之中,这使我们能够向使用系统库 函数一样使用模块,而无须考虑具体的细节
7.2模块的组装 在用模块化方法开发程序时,一个完整工程项目 的C程序通常会由多个源程序文件组成,每一个文件中 又可以包含多个函数。 模块的组装既涉及到多个源文件的连接问题,也 涉及到实现具体模块的函数之间的连接调用关系 多个源程序文件之间的连接可用# include命令
7.2 模块的组装 在用模块化方法开发程序时,一个完整工程项目 的C程序通常会由多个源程序文件组成,每一个文件中 又可以包含多个函数。 模块的组装既涉及到多个源文件的连接问题,也 涉及到实现具体模块的函数之间的连接调用关系。 多个源程序文件之间的连接可用#include命令
721文件包含与头文件的使用 、编译预处理命令 1、编译预处理命令:在程序编译之前对源程序进行的 工作,它不属于程序中的可执行语句,不占用程序的 运行时间 2、预处理命令格式 预处理命令均以“#”打头,单独占一行,行末不加分 号 预处理命令可以出现在程序的任何位置,其作用域从 出现点到所在源程序的末尾,一般将预处理命令放在 禩婕要有:宏定义、文件包含、条件编译
一、编译预处理命令 1、编译预处理命令:在程序编译之前对源程序进行的 工作,它不属于程序中的可执行语句,不占用程序的 运行时间。 2、预处理命令格式 预处理命令均以 “ # ”打头, 单独占一行, 行末不加分 号 预处理命令可以出现在程序的任何位置,其作用域从 出现点到所在源程序的末尾,一般将预处理命令放在 程序的起始位置 3、预处理命令主要有:宏定义、文件包含、条件编译 7.2.1 文件包含与头文件的使用
721文件包含与头文件的使用 、文件包含 1、文件包含:一个源文件可以将另一个源文件的全 部内容包含进来,文件包含是一个编译预处理命令。 2、文件包含格式 ①# include <>表示直接到指定的标准包含文件目录中寻找包含 文件,对于# include,如果bc31在c盘上,就是 到c:bc3 include目录中去寻找 stdio. h这个文件 通常使用系统提供的标准头文件时用<> 使用# include,就是将此头文件中的全部内容包含到 现有文件中。使用了文件包含命令,就可以使用系统库函数功 能,不必自己亲手编写
2、文件包含格式 ① #include 表示直接到指定的标准包含文件目录中寻找包含 文件, 对于#include , 如果bc31在c盘上, 就是 到c:\bc31\include目录中去寻找stdio.h这个文件 通常使用系统提供的标准头文件时用 二、文件包含 1、文件包含: 一个源文件可以将另一个源文件的全 部内容包含进来,文件包含是一个编译预处理命令。 7.2.1 文件包含与头文件的使用 使用 #include ,就是将此头文件中的全部内容包含到 现有文件中。使用了文件包含命令,就可以使用系统库函数功 能,不必自己亲手编写
721文件包含与头文件的使用 ②# include“文件名” 使用时系统先在当前目录下(即bc31的bin目录)寻找 被包含文件,如果找不到,系统再到标准包含文件目录 下寻找(即bc31的 include目录) 通常使用用户自己编写的文件时用“” 使用“”时,文件名可以包含有文件路径,这时系统 将到指定的文件目录下去找被包含的文件 例:# include“d: teach\ include\ compute.h
② #include “文件名” 使用时系统先在当前目录下(即bc31的bin目录)寻找 被包含文件, 如果找不到, 系统再到标准包含文件目录 下寻找(即bc31的include目录) 通常使用用户自己编写的文件时用 “ ” 使用“ ”时,文件名可以包含有文件路径, 这时系统 将到指定的文件目录下去找被包含的文件 例: # include “d:\ teach\ include\ compute. h” 7.2.1 文件包含与头文件的使用