Skip to content

模块化编程

划分

系统:各种模块构成的有机整体

模块:独立功能的有机实现

当模块数量多时可以对其进行分层

与面向对象的关系

面向对象:代码复用

模块化:分而治之

系统定义 ==> 模块化 ==> 面向对象

构建合理的目录结构

  • 常见的结构
  1. flat: 所有源文件放在一个目录下
  2. shallow: 各个模块在各自的目录之下,主程序在顶层目录下
  3. 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

模块设计的原则

  • 单个模块的功能尽可能单一,减少对外部函数的依赖
  • 模块之间的关联性:调用,控制,数据传递。

耦合方式:

  1. 非直接耦合:两个模块之间没有直接联系
  2. 数据耦合:通过参数交换数据
  3. 标记耦合:通过参数传递记录信息
  4. 控制耦合:通过标志、开关、名字等控制另一个模块
  5. 外部耦合:访问同一个全局变量
我们应该降低模块的耦合度

方法

  1. 接口设计:隐藏不必要的,引出的封装在头文件中其余的用static修饰
  2. 全局变量:尽量少使用
  3. 模块设计:独立存在功能单一,接口少简单
  4. 模块依赖:单向调用