C语言函数指针如何应用在软件框架设计中?

 2024-01-17 00:04:09  阅读 0

经常有朋友问C程序中如何使用面向对象编程? 如何松耦合模块? ...其实原因是C语言和软件设计衔接不好。 在这里我为大家找到了一些内容。 我相信,如果你仔细阅读全文,你或多或少会得到你想要的答案:

正文部分:

记得刚开始工作的时候,有高手告诉我,如果你不熟悉游戏,就不要自称C语言高手。 当时我就半信半疑了。 为了向高手迈进,我还是花了一些时间学习 和 的用法。

后来我意识到它不仅仅是跳来跳去那么简单,而是一种高级的异常处理机制,在某些情况下确实很有用。

为了展示自己的技巧,我也在自己的程序中多次使用过它。 渐渐地,我发现这种技术的好处是有代价的,破坏了程序的结构化设计,使程序难以阅读,尤其是对于新手来说。

我终于意识到这个技术只是一种调味品,在少数情况下使用几次,以简化问题的解决方案。 如果把调料当作食物,绝对是本末倒置,写出来的程序就会显得营养不良。

其实,你是否熟悉游戏和你是否是C语言高手并不是因果关系。 不过,如果套用这位专家的话,我想说的是,如果你对函数指针不熟悉,就不要自称是C语言专家。 为什么这么说? 函数指针有那么复杂吗?

s函数编写例子_c语言用函数求数组之和_c语言sqrt函数怎么用

当然不是。 任何有一点编程知识的人,不管懂不懂C语言,10分钟之内,我想他一定会明白C语言中的函数指针是什么。

原因在于,困难不在于函数指针本身的概念和语法,而在于何时何地使用它们。 函数指针不仅仅是一个语法问题,更重要的是,它是一个设计范畴。

当然,真正的高手不仅要懂得语法技巧,还要懂得设计方法。 如果你不懂设计,你能算专家吗? 你觉得我夸大其词了吗? 那么我们先看看函数指针与哪些设计方法相关:与分层设计相关。 分层设计并不是一个新概念。 分层的好处是众所周知的。 明显的好处是简化复杂性并隔离更改。

采用分层设计,每一层只需要关心自己的事情,降低了系统的复杂度。 层与层之间的交互仅限于非常狭窄的界面。 只要接口不变,某一层的变化就不会改变。 会影响其他层,从而隔离更改。

分层的一般原则是上层可以直接调用下层的函数,但下层不能直接调用上层的函数。 这句话说起来简单,但现实中,下层往往会依次调用上层函数。

例如,复制文件时,在接口层调用复制文件函数。 界面层是上层,文件复制功能是下层,当然上层调用下层。 但如果你想在复制文件的同时更新进度条,就会出现问题。

一方面,只有复制文件功能知道复制的进度,但无法更新界面的进度条。 另一方面,界面知道如何更新进度条,但不知道复制的进度。 该怎么办?

常见的做法是界面为文件复制功能设置一个回调函数,文件复制功能在适当的时候调用这个回调函数来通知界面更新的状态。

与抽象相关。 抽象是面向对象中最重要的概念之一,也是面向对象的力量。 面向对象只是一个想法。 众所周知,面向对象编程也可以用C语言实现。

这不是一个时髦的东西,而是一个实用的方法。 如果你对此有疑问,可以看一下GTK+、linux等开源代码。

接口是最高级别的抽象。 在Linux中,接口的概念无处不在,比如虚拟文件系统(VFS),它定义了文件系统的接口。 只要遵循这个接口的规范,你就可以自己开发一个文件系统。

对于设备驱动程序尤其如此。 不同的设备驱动程序有自己的一套不同的接口规范。 开发自己的设备驱动程序时,只需遵循相应的接口规范即可。 C语言中的接口是如何表示的? 很简单,就是一组函数指针。

它与接口和实现的分离有关。 针对接口编程,而不是针对实现编程,是“设计模式”的首要设计原则。 分离接口和实现的目的是隔离更改。 软件正在发生变化。 如果不能隔离发生变化的东西,导致全身受到影响,代价将是巨大的。 这是没有人愿意看到的。

既然C语言可以实现面向对象编程,那么自然可以使用设计模式来分离接口和实现。 像桥接模式、策略模式、状态模式、代理模式等,在C语言中,都不需要使用函数指针来实现。

c语言用函数求数组之和_c语言sqrt函数怎么用_s函数编写例子

与松耦合原理相关。 与面向对象相比,面向过程相形见绌的原因之一是它无法像面向对象一样直观地将现实模型映射到计算机。

面向过程讲的是层层控制,而面向对象则强调对象之间的分工和协作。 现实世界中存在等级关系的对象较少,大多数是相互关系。 换句话说,对象之间的交互通常是双向的。 这将加强对象之间的耦合。

耦合本身并没有什么问题。 事实上,耦合是必不可少的。 没有耦合,就没有协作。 物体无法形成整体,无能为力。 关键是耦合要适当,在达到预定功能的前提下,耦合尽可能松。 这样,系统某一部分的变化对其他部分的影响就很小。

函数指针是解耦对象关系的最佳工具。 该机制(如boost和glib中)就是一个典型的例子。 一个对象自身的状态可能正在改变(或者会触发一些事件),而其他对象关心它的改变。 一旦这个对象发生变化,其他对象就必须执行相应的操作。

如果对象直接调用其他对象的功能,功能是完成了,但是对象之间的耦合太紧了。 如何最小化这种耦合? 机制是个好办法。

它的原理大致是这样的:关注该对象变化的其他对象主动向该对象注册回调函数。 一旦对象发生变化,就会调用这些回调函数来通知其他对象。 功能也实现了,但是降低了它们之间的耦合度。

在C语言中,如果不使用函数指针就很难解决上述问题。 在编程中,如果你从来没有想过使用函数指针,很难想象你是一个C语言高手。

文章内容来源:

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码