Appearance
模块化编程
划分
系统:各种模块构成的有机整体
模块:独立功能的有机实现
当模块数量多时可以对其进行分层
与面向对象的关系
面向对象:代码复用
模块化:分而治之
系统定义 ==> 模块化 ==> 面向对象
构建合理的目录结构
- 常见的结构
- flat: 所有源文件放在一个目录下
- shallow: 各个模块在各自的目录之下,主程序在顶层目录下
- deep:主程序模块分别在不同的目录下
- Linux下没有工程管理器之类的工具需要手动管理
模块的封装
- lcd.c
C
1 #include <stdio.h>
2
3 void lcd_init(void){
4 printf("lcd init ...\n");
5 }
6
- lcd.h
C
1 void lcd_init(void);
- main.c
C
1 #include <stdio.h>
2 #include "lcd.h"
3
4 int main(void)
5 {
6 printf("hello world ...");
7 lcd_init();
8 return 0;
9 }
10
模块设计的原则
- 单个模块的功能尽可能单一,减少对外部函数的依赖
- 模块之间的关联性:调用,控制,数据传递。
耦合方式:
- 非直接耦合:两个模块之间没有直接联系
- 数据耦合:通过参数交换数据
- 标记耦合:通过参数传递记录信息
- 控制耦合:通过标志、开关、名字等控制另一个模块
- 外部耦合:访问同一个全局变量
我们应该降低模块的耦合度
方法:
- 接口设计:隐藏不必要的,引出的封装在头文件中其余的用static修饰
- 全局变量:尽量少使用
- 模块设计:独立存在功能单一,接口少简单
- 模块依赖:单向调用