作业3:深入理解Callback函数

作业3:深入理解Callback函数

一. 代码架构分析

整个lab5.2的代码文件主要分为三部分:主函数调用、接口定义、数据结构定义

  1. 数据结构定义为linktableInternal.h文件,完成了对链表数据结构(包括节点和链表)的定义
  2. 接口定义包括linktable.hlinktable.c文件,其中头文件只完成了接口的声明,.c文件完成了具体的接口定义
  3. 主函数调用文件为menu.c文件,其中完成了菜单数据结构的定义、相关方法的编写与main函数

二.调用流程与分层结构

最上层的main()调用了菜单数据结构的FindCmd(),而要完成查找节点又必须对链表进行搜索,所以继续往下调用链表数据结构中定义的SearchLinkTableNode()函数。

  1. 以上所说的分层处理过程体现了程序的内聚性。
  2. 在传递过程中,cmd将不再作为全局变量而是作为参数进行传递。
  3. 由于其参数中有一个函数,所以SearchLinkTableNode()函数被称为call-in函数,参数函数即是Callback函数。
  4. 从调用流程与程序的书写位置都可以看出,main()与位于Condition()函数位于同一层,而SearchLinkTableNode()位于另外一层。

三.Callback函数的解耦作用

Callback回调函数就是一个被作为参数传递的函数。 在本程序中,Callback函数的解耦作用可以体现在两个方面:

  1. 从参数上说,将cmd从全局变量改为作为参数传递,使得两个模块的耦合程度从公共耦合变为标记耦合,降低了耦合性。

公共耦合
当软件模块之间共享数据区或变量名的软件模块之间即是公共耦合,显然两个软件模块之间的接口定义不是通过显式的调用方式,而是隐式的共享了共享了数据区或变量名。
标记耦合
在软件模块之间仅通过显式的调用传递复杂的数据结构(结构化数据)即为标记耦合

  1. 从程序的分层架构看,Callback函数完成主函数与库函数的分离。在lab5.2中,我们可以根据自己的需要编写函数进行传递,比如对比的数据不是pNode->cmd而是其他属性,而这种修改只停留在回调函数层面而不必深入底层进行修改。在实际开发中,主程序与Callback函数在同一层,均由开发人员编写,其代码具体内容根据我们实际情况确定,而库函数要做的就是在需要时调用回调函数即可。
    在这里插入图片描述
    综上所述,Callback函数完成了解耦功能,提高了接口的通用性。

后三位:522

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值