• 什么是模块化编程
    • 模块化编程(modular programming)是一种软件设计方法,将复杂的软件系统划分为相互独立的模块,每个模块具有清晰的功能划分和接口定义,使得系统的设计和开发更加灵活、可维护、可扩展。
    • 在模块化编程中,每个模块都有一个明确的职责,通过定义合适的接口和实现,使得模块之间可以相互协作和组合,从而实现复杂的系统功能。模块化编程可以提高代码的可读性、可复用性、可测试性和可维护性,有助于减少开发时间和成本,同时提高系统的质量和稳定性。
    • 模块接口指在软件系统中,一个模块向外部提供的访问和交互方式,用于定义模块与其他模块或系统之间的通信接口。
    • 模块接口包括函数、方法、变量、数据结构、类、接口等等。通过模块接口,不同的模块可以相互调用和协作,提高系统的可维护性和可扩展性。
    • 模块实现是指软件系统中的一个模块,实现了该模块所定义的接口,提供了具体的功能实现。
    • 模块实现通常包括了算法、数据结构、业务逻辑、外部依赖等具体实现细节。模块实现需要遵循所定义的模块接口规范,并且需要满足模块接口的功能需求,以便与其他模块或系统进行交互和协作。模块实现的设计和实现质量会直接影响到整个软件系统的可靠性和性能。
  • 模块的内聚与耦合,度量模块划分的粒度
  • 为什么要模块化
  • 模块与复用
    • C语言中的模块主要包括处理数据的函数模块,以及表达实体的结构体模块
    • 好的代码应可复用,包括在同一个程序多次使用,以及在其它的程序重复使用。没有封装的代码块不适合复用。程序设计中,代码复用往往通过模块化的函数及结构体等相关机制来支持。
    • 函数可看成是数据处理的最小模块。函数对输入的数据进行处理,然后将处理结果返回(包括输出到文件或者屏幕等)。
      函数返回结果两种机制,return返回值,指针/数组类型的函数参数。
      编写函数时,该函数应适用于不同的数据,且对其它代码依赖性小。例如,同一段程序中,可使用某函数对不同长度的数组进行排序,且该函数可以不加修改用于其它程序中
      • 为了支持处理多种数据,该函数参数中除了数组名,还必须包含数组长度函数体不能包含与参数相关的全局变量/常量/宏
      • 为了减少对其它代码的依赖,该函数的实现应减少对其它的全局变量/常量/宏的依赖。
    • 设计结构体等用户自定义类型时,应支持同一个程序中定义多个数据实体,以及尽量小改动用于其它程序中定义多个数据实体。因此,线性表等数据结构中。
      • 不能包含与数据实体相关的全局变量/常量/宏
  • 模块编写准则
    • 逻辑上,模块的功能单一。一个模块完成(逻辑上)单一的功能,或者定义(逻辑上)单一的结构。
      • 如要排序并显示功能,应该首先把排序和显示用两个函数实现。
      • 如要完成学生信息定义,应该首先把姓名信息和课程信息用不同的结构体来定义。
    • 模块功能比较复杂时候,需要分解。一个模块调用其它模块,一个结构包含其它结构。
      • 如排序后显示的模块,该模块中调用(不是包含)逻辑上层次相同的排序模块和显示模块。
      • 如定义学生信息,该结构可复用(不是包含)姓名结构体和课程结构体等逻辑上层次相同的结构体。
  1. 函数示例
  2. 结构体示例