编程教程
您现在的位置: 中国个人站长站 >> 网络编程 >> Visual C++ >> 教程正文 学Java,观GP
推荐位

学Java,观GP

中国个人站长站 Visual C++ 点击数: 更新时间:2004-8-25


    下笔之时,学Java已经有5天了。用惯了C++,现在看Java,有一种故人之感。Java和
C++有很多相同的地方,也有一些不同的地方。其实,仔细想一下,这些区别并不能够说明那个更好,主要是两种语言的设计思路不同,实现的目标不同:C++侧重效率,Java注重安全。他们的差异也就由此展开,当然,我写这篇文章并不是为了说明他们的不同,只不过有感于一件事,记得好像Java声称可以支持GP(也许是下一个版本,也许已经实现了,只不过我刚开始学,也没看到相关的书籍,不太清楚现在的情况),有点疑惑:STL之父曾经为了实现STL,曾经在Java里面进行了试验,结果以失败告终,不知道这次GP引入Java是采用的什么技术。
    用过STL的人都知道,这是C++里面实现GP的一个典型范例。那么究竟什么才是GP呢?GP的实现由那些技术支持呢?
    首先我们说Generic 一般这么定义:Abstract of Genreic Concepts。GP是Generic
Programming的缩写,意思是:Abstract Of Generic Concepts And The Subsequent Ins
tantiation,也有人说GP就是Programming With Concepts。从这些定义我们可以看出,在GP里面的Concept居于一个非常重要的地位,那么什么是Concept呢?按照《范型编程与STL》一书的定义就是:一组“描述某个型别”的条件。你可以把Concept想象成一组型别条件,也可以想象成型别的集合,甚至可以想象成一组合法的程序,无论如何他们在本质上都是相通的。如果我们按照正式规格系统来定义Concept,也许Concept就是:a set of many-sorted algebas,这是严格的以数学逻辑来定义的。个人认为GP就是一种思想,思想的核心就是通过静态的算法和动态的操作,以紧密的方式,低耦合的特性,来实现程序设计中的类型无关性。
    在C++中GP的实现是通过模板+多继承来实现的,当然更基础的就是运算符重载。C++中模板通过编译期间的时间损失来获取运行效率的提高,同时通过编译器进行参数传递的类型检测,具有较高的安全性。这也就是为什么STL之父选择C++来实现自己的STL的一个很重要的地方,毕竟语言直接支持可以是实现更加方便,也更有效率。
    当然,并不是说GP只能在C++里面实现,GP是一种思想,应该独立于任何语言的,Java不是也宣称要加入GP么?不过C++里面引入GP的确本身具有很大的优势,语言本身的特性(模板+多继承)使得C++具有得天独厚的优势:在无损效率的同时具有很高的安全性。
    那么Java通过什么来支持GP呢?我有点疑惑。Java里面没有模板,也没有多继承,当然Java里面的单继承也许更加有优势,另外Java里面有很好的RTTI机制(至少比C++里面的RTTI功能强多了,也许是C++里面的实在太弱了)。不过也有一些问题需要考虑,例如Java里面的基本类型不是对象,单根特性对他们没有什么用处,这就比较让人头疼。另外单根+RTTI本身不是与法本身实现的,是通过OOP的理论+类库体系来实现的,这看起来也许更加的直观,但是RTTI运行期的特性毫无疑问会是一个巨大的障碍,如果说Java不在乎效率,更侧重安全的话,这一点似乎也无关痛痒,但是RTTI并没有像C++那样有编译器进行类型检查,相反他绕过了类型检查机制,欺骗了编译器,安全性问题浮现出来,这个安全的保证非常不情愿的回到了程序员的手里。这是一个让人非常郁闷的地方。
    也许java有自己的一套方法,那让我们拭目以待吧。

   注:现在据说Java要引入模版,那就和C++差不多了吧:)

教程录入:swh    责任编辑:swh 
个人站长站与你风雨同舟!
本站所提供的资源均来源于互联网,如有侵权行为,请与本站管理员联系,我们会第一时间删除!
·如果您发现《学Java,观GP》文章有错误,也请通知我们修改!
联系邮箱chinageren#126.com,谢谢支持!
站内搜索:
版权所有:中国个人站长站 2007-2008 未经授权禁止复制或建立镜像 客服QQ号:112731235
copyright © 2007-2008 www.ChinaGeRen.com online services. all rights reserved. 苏ICP备05000059号