原创 OO in C(4): C语言中的面向对象思想(2)收藏

新一篇: OO in C(4): C语言中的面向对象思想(1) | 旧一篇: OO in C(4): C语言中的面向对象思想(1)

不好意思,好像我们公司的安全软件限制了上传文件的大小

 

3CALLBACK函数。

我觉得这是C语言的一个创举,虽然它很简单,就象如何把鸡蛋竖起来一样,但是你如果没想到的话,嘿嘿。如果说静态入口函数实现了一个可管理的宏观的话,CallBack就是实现了一个可进化的微观:它使得一个函数可以在不重新编译的情况下实现功能的添加!但是在最最早期的时候,也有蛮多人持反对态度,因为它用了函数指针。函数指针虽然灵活,但是由于它要访问内存两次才可以调用到函数,第一次访问函数指针,第二次才是真正的函数调用。它的效率是不如普通函数的。但是在一个不太苛刻的环境下,函数调用本身就不怎么耗时,函数指针的性能又不是特别糟糕,使用函数指针其实是一个最好的选择。但是函数指针除了性能,最麻烦的地方就是会导致程序的“支离破碎”。试想:在程序中,你读到一个函数指针的时候,如果你愣是不知道这个函数指针指向的是哪个函数,那个感觉真的很糟糕。(可以看后面的文章,要使用先进的程序框架,避免这样的情况)

三、           EventMessage

看了上面的描述,相信大家多少有些明白为什么要使用EventMessage了。具体的函数调用会带来很多的问题(虽然从效率上讲,这样做是很好的)。为了提高程序的灵活性,EventMessage的办法产生了。用名字解析的办法代替通常的函数调用,这样,如果双方对这样的解析是一致的话,就可以达到一个统一。不过EventMessage的作用还不仅仅是如此。

EventMessage还有建立进程间通信的功能。进程将自己的消息发给“控制中心”(简单的就是一个消息队列,和一个while循环不断的取消息队列的内容并执行),控制程序得到消息,分发给相应的进程,这样其他进程就可以得到这个消息并进行响应。

EventMessage是很灵活的,因为你可以随时添加或者关闭一个进程,(仅仅需要添加分发消息的列表就可以了)EventMessage从程序实现上将我觉得是一样的,只不过概念不同。Event多用于指一个动作,比如硬件发生了什么事情,需要调用一个什么函数等等。Message多用于指一个指示,比如什么程序发生了什么操作命令等等。

四、           小结

其实编程序和写文章一样,都是先有一个提纲,然后慢慢的丰富。先抽象化得到程序的骨架,然后再考虑各个方面的其他内容:程序极端的时候会发生什么问题?程序的这个地方的功能现在还不完善,以后再完善会有什么问题?程序是不是可以扩展的?

本系列文章是我这些阶段的一些心得,目的是抛砖引玉,希望能和大家交流,得到更多的知识。Liyuming1978@163.com (这个信箱以前发了一个文章 C优化之路,现在都快成垃圾信箱了,呵呵,网络的力量真是强大呀)

发表于 @ 2004年06月15日 15:43:00|评论(loading...)|编辑

新一篇: OO in C(4): C语言中的面向对象思想(1) | 旧一篇: OO in C(4): C语言中的面向对象思想(1)

评论

#falcon 发表于2004-10-11 13:47:00  IP: 221.217.234.*
观点和文字都不错,期待你的关于C的更多的文章 。
#phoenix_keeper 发表于2005-06-08 10:51:00  IP: 61.186.252.*
Quake2是一份实现ooc的很好的源代码,推荐你看一下
#JIMMY 发表于2006-05-14 21:51:00  IP: 202.107.117.*
看了你关于c中面向对象思想,受益匪浅。我今天刚毕业,现在正在实习,做的是手机系统开发,进来时已系列的培训啊什么的,看了一个多月的前机种代码,看得过程中也发现很多面向对象的影子,当然没有您那么全面,看了你的文章,豁然开染,理解了很多东西。---我了解的有一个好像你没有写到,就是写 一个APP时候,先进入的是X_X_entry_mod(),
然后进入X_X_start_fun(),然后下边是很多个处理事件函数X_X_fun1_event(),每个事件都有出口和入口函数,进入APP到功能函数实现,是一层层进入的,出去也是一层层出去的,这样实现面向对象里的封装功能
我知道你也是做手机应用开发的,希望以后能多多帮助小弟。现在请教一个问题,我在看代码里,遇到call back,但是理解很浅。您在文章里也写到,能不能结合一个或多个例子,介绍一下call back运用,非常感谢。
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © liyuming1978