如何模块化编程

刘灿 + 原创作品转载请注明出处 + 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006 

1:写一个最简单的小程序https://www.shiyanlou.com/courses/reports/1244579

2:命令行菜单小程序https://www.shiyanlou.com/courses/reports/1244864

3:基本的模块化设计https://www.shiyanlou.com/courses/reports/1245629

4:可重用模块的接口设计https://www.shiyanlou.com/courses/reports/1245958

5:可重用模块的接口设计(使用callback函数)https://www.shiyanlou.com/courses/reports/1247014

6:子系统的可重用设计https://www.shiyanlou.com/courses/reports/1248179

      软件工程(C语言实践篇)这门课主要是以一个菜单小程序为例子一步步指导介绍模块化编程的思想.

      在实验二中,我们用C语言写了一个最简单的菜单小程序,但这个小程序有许多不足之处,因为我们把所有功能实现都放在了主函数main()里面,于是就有了基本的模块化编程思想,即高内聚,也就是一个函数只负责一个功能,还有低耦合,不同函数之间关联要小,于是我们依据这个思想写出了实验三的程序,这个程序相比实验二有了改进,即不同功能用不同函数实现。

      但实验三所写的代码依然有不足之处,那就是这个功能模块不能重用,也就是无法被其他模块使用,于是有了接口的概念,用作模块之间的通信。我们将命令名以及他们的描述、触发函数以链表的形式生成一个单独的模块。此刻有了头文件的概念,及头文件中放数据结构的声明,主函数中方具体功能实现。这样我们就完成了一个可重用的模块接口设计。

      但实验四的代码仍有不足之处,那就是他的可重用能力不强。具体表现为只能我们调用模块里面的功能,而这个模块却不能调用我们自己的功能,也就是实验例子中模块里面的FindCmd函数,不同的需要调用这个模块的用户的find方法不一样,需要这个模块根据调用不同用户的find方法来寻找到相应的命令,显然实验四的代码无法做到这一点,于是就有了callback函数,他就是用底层函数调用上层函数。

      上面的实验基本完成了一个可重用模块的设计,剩下还有要注意的问题就是多线程的安全问题,比如一个函数里面有一个全局变量,多个线程同时调用这个函数修改这个变量的值可能引起意向不到的变化,需要考虑线程安全问题。


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值