第六章实用程序设计技巧 ◆6.1程序的模块化结构 62模块的组装 ◆6.21文件包含与头文件的使用 ◆6.22模块间的连接 ◆6.24条件编译 宏定义
❖ 6.1 程序的模块化结构 ❖ 6.2 模块的组装 ◆ 6.2.1 文件包含与头文件的使用 ◆ 6.2.2 模块间的连接 ◆ 6.2.4 条件编译 ❖ 宏定义 第六章 实用程序设计技巧
6程序的模块化结构 程序设计是一种工程性的工作,通过对任务进行分 析和功能模块分解,将大任务分解为若干子任务,子任 务分别进行设计之后,再进行组合,合并为功能强大而 复杂的一个整体 611软件工程的思想 系统设计分四方面内容: 体系结构设计 模块设计 数据结构与算法设计 用户界面设计
6.1 程序的模块化结构 程序设计是一种工程性的工作,通过对任务进行分 析和功能模块分解,将大任务分解为若干子任务,子任 务分别进行设计之后,再进行组合,合并为功能强大而 复杂的一个整体。 6.1.1 软件工程的思想 系统设计分四方面内容: ◼体系结构设计 ◼模块设计 ◼数据结构与算法设计 ◼用户界面设计
6程序的模块化结构 612模块设计 在设计好软件的体系结构后,已经在宏观上明确 了各个模块应具有什么功能,应放在体系结构的哪个 位置。保持“功能独立”是模块化设计的基本原则 因为“功能独立”的模块可以降低开发、测试、维护 等阶段的代价。 功能独立并不意味着模块之间保持绝对的孤立。 个系统要完成某项任务,需要各个模块相互配合才 能实现,此时模块之间就要进行信息交流。 在设计一个模块时不仅要考虑“这个模块就该提 供什么样的功能”,还要考虑“这个模块应该怎样与 其它模块交流信息
6.1.2 模块设计 在设计好软件的体系结构后,已经在宏观上明确 了各个模块应具有什么功能,应放在体系结构的哪个 位置。保持“功能独立”是模块化设计的基本原则。 因为“功能独立”的模块可以降低开发、测试、维护 等阶段的代价。 功能独立并不意味着模块之间保持绝对的孤立。 一个系统要完成某项任务,需要各个模块相互配合才 能实现,此时模块之间就要进行信息交流。 在设计一个模块时不仅要考虑“这个模块就该提 供什么样的功能”,还要考虑“这个模块应该怎样与 其它模块交流信息”。 6.1 程序的模块化结构
6程序的模块化结构 模块化设计时通常是将一个大型的程序自上向下 的进行功能分解,分成若干个子模块,每个模块对应 了一个功能,有自己的界面,有相关的操作,完成独 立的功能。各个模块可以分别由不同的人员编写和调 试,最后将不同的模块组装成一个完整的程序。 评价模块设计优劣的三个特征因素: 信息隐藏、内聚与耦合、封闭-开放性 在C语言中,用函数实现功能模块的定义,程序的功 能可以通过函数之间的调用实现
6.1 程序的模块化结构 模块化设计时通常是将一个大型的程序自上向下 的进行功能分解,分成若干个子模块,每个模块对应 了一个功能,有自己的界面,有相关的操作,完成独 立的功能。各个模块可以分别由不同的人员编写和调 试,最后将不同的模块组装成一个完整的程序。 ➢评价模块设计优劣的三个特征因素: 信息隐藏、内聚与耦合、封闭--开放性 在C语言中,用函数实现功能模块的定义,程序的功 能可以通过函数之间的调用实现
6程序的模块化结构 个完整工程项目的C程序可能由多个源程序文件 组成,每一个文件中又可以包含多个函数。 程序 文件1 文件2 文件3 main函数函数 函数g1 函数n2 函数g2 函数g3
➢一个完整工程项目的C程序可能由多个源程序文件 组成,每一个文件中又可以包含多个函数。 6.1 程序的模块化结构 程序 文件1 main函数 文件2 函数f1 函数f2 文件3 函数g1 函数g2 函数g3
62模块的组装 在用模块化方法开发程序时,一个完整工程项目 的C程序通常会由多个源程序文件组成,每一个文件中 又可以包含多个函数。 模块的组装既涉及到多个源文件的连接问题,也 涉及到实现具体模块的函数之间的连接调用关系 多个源程序文件之间的连接可用# include命令
6.2 模块的组装 在用模块化方法开发程序时,一个完整工程项目 的C程序通常会由多个源程序文件组成,每一个文件中 又可以包含多个函数。 模块的组装既涉及到多个源文件的连接问题,也 涉及到实现具体模块的函数之间的连接调用关系。 多个源程序文件之间的连接可用#include命令
621文件包含与头文件的使用 、编译预处理命令 1、编译预处理命令:在程序编译之前对源程序进行的 工作,它不属于程序中的可执行语句,不占用程序的 运行时间 2、预处理命令格式 预处理命令均以“#”打头,单独占一行,行末不加分 号 预处理命令可以出现在程序的任何位置,其作用域从 出现点到所在源程序的末尾,一般将预处理命令放在 禩婕要有:宏定义、文件包含、条件编译
一、编译预处理命令 1、编译预处理命令:在程序编译之前对源程序进行的 工作,它不属于程序中的可执行语句,不占用程序的 运行时间。 2、预处理命令格式 预处理命令均以 “ # ”打头, 单独占一行, 行末不加分 号 预处理命令可以出现在程序的任何位置,其作用域从 出现点到所在源程序的末尾,一般将预处理命令放在 程序的起始位置 3、预处理命令主要有:宏定义、文件包含、条件编译 6.2.1 文件包含与头文件的使用
621文件包含与头文件的使用 、文件包含 1、文件包含:一个源文件可以将另一个源文件的全 部内容包含进来,文件包含是一个编译预处理命令。 2、文件包含格式 ①# include <>表示直接到指定的标准包含文件目录中寻找包含 文件,对于# include,如果bc31在c盘上,就是 到c:bc3 include目录中去寻找 stdio. h这个文件 通常使用系统提供的标准头文件时用<> 使用# include,就是将此头文件中的全部内容包含到 现有文件中。使用了文件包含命令,就可以使用系统库函数功 能,不必自己亲手编写
2、文件包含格式 ① #include 表示直接到指定的标准包含文件目录中寻找包含 文件, 对于#include , 如果bc31在c盘上, 就是 到c:\bc31\include目录中去寻找stdio.h这个文件 通常使用系统提供的标准头文件时用 二、文件包含 1、文件包含: 一个源文件可以将另一个源文件的全 部内容包含进来,文件包含是一个编译预处理命令。 6.2.1 文件包含与头文件的使用 使用 #include ,就是将此头文件中的全部内容包含到 现有文件中。使用了文件包含命令,就可以使用系统库函数功 能,不必自己亲手编写
621文件包含与头文件的使用 ②# include“文件名” 使用时系统先在当前目录下(即bc31的bin目录)寻找 被包含文件,如果找不到,系统再到标准包含文件目录 下寻找(即bc31的 include目录) 通常使用用户自己编写的文件时用“” 使用“”时,文件名可以包含有文件路径,这时系统 将到指定的文件目录下去找被包含的文件 例:# include“d: teach\ include\ compute.h
② #include “文件名” 使用时系统先在当前目录下(即bc31的bin目录)寻找 被包含文件, 如果找不到, 系统再到标准包含文件目录 下寻找(即bc31的include目录) 通常使用用户自己编写的文件时用 “ ” 使用“ ”时,文件名可以包含有文件路径, 这时系统 将到指定的文件目录下去找被包含的文件 例: # include “d:\ teach\ include\ compute. h” 6.2.1 文件包含与头文件的使用
621文件包含与头文件的使用 3、说明 (1)文件包含的作用就是在编译预处理时将被包含文件 的全部内容复制并插入到#ncud命令处 (2)一个 include命令只能指定一个被包含文件 如果有n个被包含文件则需要用n个 "include命令, 且一个命令占一行 (3)使用文件包含时,在被包含文件中绝对不能含有 main函数 (4)文件包含可以嵌套使用 (5)被包含文件中的全局变量在其所在的文件中有效
3、说明 (1) 文件包含的作用就是在编译预处理时将被包含文件 的全部内容复制并插入到#include命令处 (2) 一个include命令只能指定一个被包含文件. 如果有n个被包含文件则需要用n个include命令, 且一个命令占一行 (3) 使用文件包含时, 在被包含文件中绝对不能含有 main函数 (4) 文件包含可以嵌套使用 (5) 被包含文件中的全局变量在其所在的文件中有效 6.2.1 文件包含与头文件的使用