[转帖]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
的上述缺点,其在哲学上面,又有什么可觉得可以说得通的呢......

此文未及进一步整理,见谅。

...全文
49 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xch28 2003-05-08
  • 打赏
  • 举报
回复
//以上内容都是转贴。
xch28 2003-05-08
  • 打赏
  • 举报
回复
------------------------------------------------------------------
------------------------------------------------------------------


诚如作者所说,“Java的许多优点,以及一些细节上的缺点在许多书上,以及网上评价上都有较多的描述”,我认为这些描述还是中肯的。但是对于作者的Java在面向对象上的不足的看法,不敢苟同。
1。“对于Java从总体上的面向对象的编程思想(其庞大的AWT和SWING类库)的缺点。。。”,Java的面向对象思想和其庞大的AWT和SWING类库是两码事,C++不是也有庞大的类苦吗?
2。“AWT和SWING的技术在许多地方互为矛盾(同时使用易出错)、互为重复(功能有互为重复之处)”,AWT是重量级的界面组件,SWING是轻量级的界面组件,从AWT到SWING是Java技术发展的结果,人家都不建议你同时使用两种组件了,你是不知道呢还是混淆视听?
3。“学习、掌握Java的多级复杂类库有一定的难度,大量掌握需要很多时间,而且掌握之后,一旦该编程人员不使用Java编程,那么掌握的类库对于其它编程语言基本无用”,学习、掌握MFC的多级复杂类库有一定的难度,大量掌握需要很多时间,而且掌握之后,一旦该编程人员不使用WINDOWS编程,那么掌握的类库对于其它平台的C++编程完全无用。
4。“而且,对于本身不是很通俗易懂,而是比较令人费解的程序,即便是开发人员已经掌握,而一旦稍长时间不接触,此种编程的许多技巧就会被忘记,除非留有带着非常详细注释的原代码。”,搞笑啊,原来作者写程序都不写注释的,还敢来发表谬论?
5。“编程易于或可能进入复杂的涉及多级类结构的耗时编程及调试的状态,象陷入乱麻之中一样; ”,如果你只看到这一句话,你有什么感想呢?
6。“如此复杂的程序,其他开发人员难以接手,书面详细设计方案上也很难表述这种立体式的复杂结构,以及上下互相之间的复杂关系(包括方法调用、接口的隐式调用(接口可能被自动调用)、某个方法是重载还是不重载(如果对上面各级类库的方法种类不是很清楚,从代码貌看上去,怎么知道是否是重载的呢)),等等。”,首先建议作者去学习一下UML。其次设计或者说面向对象的设计基本上是语言无关的。
7。“也许有人会说,你没有全部掌握,当然会有很多困难,可是Java庞大类库中很多都是与界面设计有关的类库,而纯粹的界面设计技术在应用系统之中,往往不是系统功能的核心部分,为了开发这种不是核心部分的界面程序,需要投入那么多的时间、精力,从这一点上来说,难道这种开发方式具有很大的实用意义吗?”,反过来想一下,如果Java类库中没有这一部分的话会是什么样子呢?
8。“也许有人会认为,开发人员或许没有资格这样评价用于开发的语言或工具,可是:用户就是上帝,这句话永远是有道理的,既然客户可以评价我们开发的应用产品,我们就可以评价用于开发的语言或工具。”,评价语言就是评价语言,评价工具就是评价工具,评价类库就是评价类库,作者到底想评价什么啊?
9。“也许有人会认为,评价的人本身也不太懂,可是,如果评价的人什么都懂,那他也不是Java编程人员了,那他也快要成为设计Java本身的技术人员了,难道Java的原创的目的就是为了让使用Java编程的人员都变成设计Java的人员吗?而不是为了让大家用起来都比较简单,从而创作出许多有用的成果吗?”,评价的人当然不需要什么都懂,也不需要太懂,可能也可以不太懂,但是最好不要太不懂。
10。“面向对象的编程思想,应该更多地融合或融化到可视化的开发环境中去,而不是仍然较多地使用语句或语言本身来描述,后者会很复杂,因为本来立体式的类结构,使用平面化的语句来表述,这本身就是很复杂,而且是勉为其难的事情;对象使用可视化的开发环境表示之后,编程代码(语句)应该尽可能简单易懂。”,面向对象的编程思想是方法论,工具也好可视化开发环境也好是方法论的应用,完全两码事。还有,不要用VB编程的思想来套Java的编程思想。
11。“庞大而且复杂的类库结构,这并不能代表着设计者的水平,对于使用者来说,设计者将原先复杂、庞大的东西,变得让使用者觉得简单而且合理,才是真正有水平的。”,这句话不错,我相信Java正在向这个方向发展。
12。“在上面两点上,PowerBuilder开发工具在过去几年当中,而且直到现在,都是做得最好的,当然PB的PFC类库也不实用(其代码量、复杂度,与其实现的功能相比,显得太重,本文作者曾经重新设计PB的类库,功能比PFC类库强大,但使用简单,因而相对实用)。”,好,麻烦先编个Java类库给我用用吧。
13。“PB的程序封装也比Java好,PB程序封装在统一的PBL文件中,不象其它语言或开发工具形成多种文件,如使用JB编写的Java程序就包括扩展名为:jpr、html、java的文件,封装不好,程序员管理自己的代码就比较麻烦。”Java<>JBuilder,麻烦先好好看看Java基础吧。至于那个封装得好,拜托先弄明白封装的概念再说吧。
14。“面向对象的编程方式,不管采取哪一种方式,作为应用编程人员,在编程过程中,牵扯到类的继承级数不能太多(指系统提供的,而且编程过程中经常需要查阅的上级类库,加上编程人员自己设计的类),否则所编的程序的结构会很复杂,立体式的很复杂,会导致一些难以遇见的隐式错误,而且很难被发现、排除。”,不错啊,不过好像和Java没有什么关系。
15。“Java在字符串类型、整数类型等细节方面也使用类的编程方式,这是将面向对象编程思想走向极端化的表现,实际上,使用'类'这种表示事物的方式,一般是在比较宏观的事物中,才显得比较方便,而在字符串类型、整数类型等细节微观方面,使用'类'的定义,并不方便,因为这不符合一般人的思维习惯,在细节微观方面,其实只要使用传统的非面向对象编程思想就可以了。而且,Java对于整数类型,既有'类'的表示方式,又有不是'类'的表示方式,以及字符串类型的'类'的表示方式,这几种方式之间,牵涉到的方法名称以及使用方式上面互相之间都不统一,让人觉得:Java为什么要这样,这么麻烦,又有什么好? Java编程全是高一脚、低一脚的走路方式,为什么要这样,难道Java的设计者有病,为什么走路不能坦坦荡荡一些呢?”,不好意思,我懒的说了,先回去好好看看基础吧。只是为了不误导出学者,我只是告诉大家,这种说法是错误的。如果谁有疑问,好好看看封装类的概念和用途,相信大家都会明白的。
16。“正是因为上述的这些缺点,使得现在Java面向对象的编程方式,很难取代某些传统的编程方式,比如UNIX系统上的C编程,后者不存在前者的上述缺点。”,难以取代不假,不过是不是这个原因啊?!
17。“大凡伟大的创见,其在哲学上面,必然有强有力的依据,可是Java的上述缺点,其在哲学上面,又有什么可觉得可以说得通的呢”,佩服,你以为上升到哲学高度就可以证明你是正确的吗?

后记:
实际上此文不值一驳,但是为了初学者,我就说上两句吧。没有人能够否认Java确实有很多缺点,但是此文作者说的这些恰恰不在此列。各位如果要了解Java的缺点尽管去往上找吧。

23,407

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧