看了有一周的windows程序设计了,今天总结总结.
其实这本书我2003年就买了,也大概看了看,可惜当时技术掌握的不够牢固,很多地方根本看不懂,也没有认真去啃一啃,随便就放下了.
现在又过了5年了,再看起来,感觉果然不一样的很.
看看windows API设计的,再比较比较Java语言的设计,很明显能看出高下之别.
Windows API设计的时候,是基于C语言来进行设计的.其中大量用到的是结构,而无论是结构也好,函数也好,指针也好,这些东西都是可以直接基于汇编语言进行转换的.
结构就是一段内存,每个字段占据其中固定位置的内存空间;
函数就是一段内存,函数指针指向内存的开始点,调用函数时,通过堆栈压入变量,调用结束后弹出堆栈;
指针就是内存地址,传递指针就是传递内存地址.
所以在windows API的设计中,没有类的概念,没有对象的概念,纯粹是结构定义,函数定义,指针传递的概念,在这个概念的基础上可以搭建出宏伟的建筑出来.
操作系统负责底层的具体工作,对外公开的就是所有的标准API,你可以通过任何语言来访问和调用这些API.
而Java语言呢,从一开始设计就是独立于操作系统的.独立于操作系统没有关系,但不好的就是他是完全基于对象的一个语言,这样即使两个对象的定义内部结构是一样的,仅仅因为他们的名字不同,就不能直接传递和复制,而必须手工编码进行转换,这个实在是太繁琐了.
java语言在设计的时候,没有把结构这个元素考虑进来,为了所谓的方便性,直接用Object取而代之,结果就是在程序设计实现时,有很多低效的代码转换来转换去.
也许Java应该好好研究研究windos API的设计思路,再改进改进.
windows的全部API,不过几千个,可现在Java的标准类库,广类就不下一千个,这还不考虑这些类之间复杂的继承关系,以及重载带来的理解上的困难和混乱.
windows API是没有继承这个概念的.我的问题是,既然完全不使用这个概念,仍然可以设计出类似Windows这样复杂的系统出来,或者说能提供如此复杂的功能调用API出来,那么我们自己设计系统的时候,提供给外部那么复杂的调用接口,是否真的有那个必要呢?
很多系统设计的如此复杂,以致于难以维护和升级,这些问题不仅仅是水平问题,更重要的恐怕是思路问题。如果沿用java提供的标准方式,恐怕设计出来的系统就难免走在复杂的老路上。
既然windows的API设计的都如此简单,我们自己又有多少理由来把系统设计那么复杂呢?
暂时没有标准答案,继续思考学习中。