[转帖]Java不足之我见
xch28 2003-05-08 08:16:38 http://www.javaren.com/bbs/cgi-bin/topic.cgi?forum=30&topic=21&show=0#lastviewpost
Java不足之我见 作者:不知道
许多人都在使用Java开发程序,本人也是其中之一,作为一名
有一定软件工作经历的开发人员,我想也有必要将目前的Java开发
的不足之处作一比较客观的表述,以引起业界人士对Java的优劣之
处有一比较客观的认识,而避免奉之过高。
Java的许多优点,以及一些细节上的缺点在许多书上,以及网
上评价上都有较多的描述,可是对于Java从总体上的面向对象的编
程思想(其庞大的AWT和SWING类库)的缺点却少见贬词,且不说AWT
和SWING的技术在许多地方互为矛盾(同时使用易出错)、互为重复
(功能有互为重复之处),难道业界不觉得这套编程思想过于复杂吗?
太复杂,以至于:
1. 学习、掌握Java的多级复杂类库有一定的难度,大量掌握需
要很多时间,而且掌握之后,一旦该编程人员不使用Java编程,那么
掌握的类库对于其它编程语言基本无用; 而且,对于本身不是很通俗
易懂,而是比较令人费解的程序,即便是开发人员已经掌握,而一旦
稍长时间不接触,此种编程的许多技巧就会被忘记,除非留有带着非
常详细注释的原代码。
2. 编程易于或可能进入复杂的涉及多级类结构的耗时编程及调
试的状态,象陷入乱麻之中一样;
3. 如此复杂的程序,其他开发人员难以接手,书面详细设计方
案上也很难表述这种立体式的复杂结构,以及上下互相之间的复杂关
系(包括方法调用、接口的隐式调用(接口可能被自动调用)、某个方
法是重载还是不重载(如果对上面各级类库的方法种类不是很清楚,
从代码貌看上去,怎么知道是否是重载的呢)),等等。
也许有人会说,你没有全部掌握,当然会有很多困难,可是Java
庞大类库中很多都是与界面设计有关的类库,而纯粹的界面设计技术
在应用系统之中,往往不是系统功能的核心部分,为了开发这种不是
核心部分的界面程序,需要投入那么多的时间、精力,从这一点上来
说,难道这种开发方式具有很大的实用意义吗?
也许有人会认为,开发人员或许没有资格这样评价用于开发的语
言或工具,可是:用户就是上帝,这句话永远是有道理的,既然客户
可以评价我们开发的应用产品,我们就可以评价用于开发的语言或工
具。
也许有人会认为,评价的人本身也不太懂,可是,如果评价的人
什么都懂,那他也不是Java编程人员了,那他也快要成为设计Java本
身的技术人员了,难道Java的原创的目的就是为了让使用Java编程的
人员都变成设计Java的人员吗?而不是为了让大家用起来都比较简单,
从而创作出许多有用的成果吗?
最后,作为抛砖引玉的一些结论:
1.面向对象的编程思想,应该更多地融合或融化到可视化的开发
环境中去,而不是仍然较多地使用语句或语言本身来描述,后者会很
复杂,因为本来立体式的类结构,使用平面化的语句来表述,这本身
就是很复杂,而且是勉为其难的事情;对象使用可视化的开发环境表
示之后,编程代码(语句)应该尽可能简单易懂。
2.庞大而且复杂的类库结构,这并不能代表着设计者的水平,对
于使用者来说,设计者将原先复杂、庞大的东西,变得让使用者觉得
简单而且合理,才是真正有水平的。
在上面两点上,PowerBuilder开发工具在过去几年当中,而且直
到现在,都是做得最好的,当然PB的PFC类库也不实用(其代码量、复
杂度,与其实现的功能相比,显得太重,本文作者曾经重新设计PB的
类库,功能比PFC类库强大,但使用简单,因而相对实用)。
PB的程序封装也比Java好,PB程序封装在统一的PBL文件中,不象
其它语言或开发工具形成多种文件,如使用JB编写的Java程序就包括
扩展名为:jpr、html、java的文件,封装不好,程序员管理自己的代
码就比较麻烦。
3.面向对象的编程方式,不管采取哪一种方式,作为应用编程人
员,在编程过程中,牵扯到类的继承级数不能太多(指系统提供的,而
且编程过程中经常需要查阅的上级类库,加上编程人员自己设计的类),
否则所编的程序的结构会很复杂,立体式的很复杂,会导致一些难以
遇见的隐式错误,而且很难被发现、排除。
4.Java在字符串类型、整数类型等细节方面也使用类的编程方式,
这是将面向对象编程思想走向极端化的表现,实际上,使用'类'这种
表示事物的方式,一般是在比较宏观的事物中,才显得比较方便,而
在字符串类型、整数类型等细节微观方面,使用'类'的定义,并不方
便,因为这不符合一般人的思维习惯,在细节微观方面,其实只要使
用传统的非面向对象编程思想就可以了。而且,Java对于整数类型,
既有'类'的表示方式,又有不是'类'的表示方式,以及字符串类型的
'类'的表示方式,这几种方式之间,牵涉到的方法名称以及使用方式
上面互相之间都不统一,让人觉得:Java为什么要这样,这么麻烦,
又有什么好? Java编程全是高一脚、低一脚的走路方式,为什么要这
样,难道Java的设计者有病,为什么走路不能坦坦荡荡一些呢?
5.正是因为上述的这些缺点,使得现在Java面向对象的编程方式,
很难取代某些传统的编程方式,比如UNIX系统上的C编程,后者不存在
前者的上述缺点。
大凡伟大的创见,其在哲学上面,必然有强有力的依据,可是Java
的上述缺点,其在哲学上面,又有什么可觉得可以说得通的呢......
此文未及进一步整理,见谅。