为什么 Java 要采用 C++ 的构造模式而不是 Delphi 的?!(50分)

to wuliaotd:
首先我想说,你应该去理解一下 Perl 的“包”,体会一下,离开了 class 是不是也还
存在面象对象的编程。
其二、》》》我忘了这是一个以Delphi为主的论坛
你不要太推崇你自己,在大富翁上,C/C++ 的程序员可能不比 CSDN 的少。除了初学者,有过开发经验的人使用的可能都不止一种语言。编程界有句话:对一个程序员,只
了解一种语言是远远不够的。就在下,不敢夸口,虽然谈不上编程语言有那么深入的研,
究,但也至少能够熟练使用3-4种以上的语言,3-4种以上的数据库来解决问题,而且我
使用 C++ 的频度也要比 Delphi 多的多(但绝对不是 Delphi 差,只是我偏好 C 的编
程风格而已)。你应该知道:除了沉鱼落雁,也有闭月羞花。尽管使用语言的多少并不能
表示你的编程水平有多高,但了解各个语言的特色,却可以相互借鉴。我的想法就是:哪
个处理起来方便,就用哪个。见日月不为明目,闻雷霆不为聪耳。胜于易胜才是真正的道
理。
其三、》》》但是你们的面向对象编程以及C++和Java语言也学习得很糟糕
当然,我不知道什么才是“好”的标准,如果拿 SGI 的 STL 或者 MS 的 MFC 那种方
位的代码来和我的代码比较,我的确学得很糟糕。甚至可以说:等于没学。不知道你如何?
最后,说到钱,我真正是想笑,我发现你是一个确确实实的形而上学的人。在这个社会,
同一个人不同的地方有不同的工资待遇;同一个人在同一个地方的不同的老板也会给他们
不同的报酬。这似乎与理不理解对象毫不相干。不同的人,不同的机遇,水平低的拿的工资
比水平高的多得多。Java 程序员不比 C++ 程序员要吃香,钱要拿得多得多么,难道只有 java 有高手,有理解对象编程的人,而 C++ 就如此可怜得不能比?
无聊,无聊....................
 
对不起,我为我的不当言行道歉,真诚地。
我初衷是刺激一下,提醒一个事实:delphi程序员的工资总体上来说比较低。
或许你真的是80%以上的时间都在用Delphi,工资也在6-12K左右,那仅仅是你特别优秀而已,我崇拜你。
另一方面,Delphi初中生都玩得转。假如你不懂Java,我不懂Delphi,现在要求一个项目同时用Java和Delphi完成,那么,可能,我完成得很轻松,不信可以出题试试,——真的,我肯定不是Delphi高手,但翻一两页书后我就可以编Delphi程序。你说很难很高深的怎么办?说实话,我的确不行了,但你们也扪心自问一下,真的有所谓的很难很高深的Delphi应用吗?别忘了Delphi不过是VB能够完成的,它完成得好点,VB不能完成的,它也不能完成(或者完成起来极为吃力),项目组这时用什么?C++(系统问题)或Java(网络、中间件等问题)!

---------------------------------------------------------------------------
ddev兄始终提到class,实际上我从来没有说过这种话。它可能叫不同的名字,但一定得有有这么个东西,并符合由smalltalk提出的五项原则,如我前面帖子中所述。
---------------------------------------------------------------------------
不知李大嘴同志具有怎样的思维逻辑,但也不必把我的一点小小的看法说成是判断事物的标准,我不配设立什么标准。smalltalk在几乎所有的面对对象书中都会有提及,它只是第一个比较成功的OOP语言而已,理论家也没有说它是最好的,而且,显然,它在商业上是失败的,至少国内没人用它。而Delphi在商业上是成功的,且数据结构都用Pascal来讲,为什么面向对象不用Object Pascal来讲?拿你说的免费产品来说,为什么Java和C++免费编译器比比皆是,而精英高手们对Object Pascal毫无兴趣?
事实上,Object Pascal离开了VCL后毫无价值,相当于被斩了首。而C++离开了MFC、Java离开了某某开发包(至今为止没有一个很成功的类似于MFC和VCL的开发组件库)后的用武之处都还大得很,最多相当于断了一臂。这么明显的事实难道还不足以证明我所说的“Delphi是一个很成功的产品,Object Pascal不是一个成功的语言”吗?究竟是谁不愿意面对现实?
李大嘴同志,你借用了我的句式,为什么不回答我句式中的问题?再想一下,有几个DELPHI项目组开发时完整的用UML画图?而用C++和Java的,以前虽然不画图,现在和今后画图是必经之路,为什么,因为图一画完之后整个系统的架构代码就全部自动生成了,谁不乐意?
DELPHI是RAD开发工具,自动生成代码的能力自然更强一些,但它不是针对“设计”而生成代码,事实上许多Delphi应用没有设计,许多Delphi应用没有经过良好的设计,还有许多Delphi程序是经过良好的设计的,但是把设计转化为代码的过程绝对是人脑加手工。
说到面向对象设计,不知你学过设计模式没有,李大嘴同志,那些经典的设计模式,能够很容易的套用在Delphi上吗?我只知道在许多Java开发工具中应用那些设计模式只需要点两下鼠标就够了,要知道Java的开发工具从来都是弱项。主流UML工具应用设计模式生成C++代码也不是什么难事。我的面向对象水平距离你六七年前拿一千多时都差多了,这个面向对象编程空对空的讨论谁也说服不了谁,要不,我们讨论讨论几种具体的设计模式,画一下UML图理解理解,并写出代码体会体会?千万别告诉我你没有学过啊,不然我又要鄙视你了,毕竟我们是在讨论面向对象是不是?
我为我说话冲而道歉,但你说我是小孩也不能证明你很成熟。对于面向对象的每一种技术,拿出来玩玩才有说服力,我学艺不精,玩的时候碰巧发现这些实实在在的,可以应用的技术和工具,而不是空对空的理论,都与Delphi没什么关系,所以我说“Delphi对面向对象的支持很初级”。
为了避免争论,我这样说吧:“面向对象技术对Delphi的支持很初级。”OK,Delphi Fans, 总该承认这个铁钉板板的事实了吧?
jianl说得好,“不要用剪刀去敲钉子”,不知你同不同意,我推论一下:面向对象的学习也好,开发也好,Delphi都不是好工具,毕竟支持得“很初级”(附注:也许是单方向的吧,Delphi对面向对象编程的支持可是很优秀的)。
 
我之所以要刺激一下,是因为我认为:
如果你还是认为Delphi对OOP的支持很优秀,那证明你还没有认认真真的学习过任何实实在
在的OOP技术,应用过任何实实在在的工具,还停留在思想的原始阶段。
用我的句式来说,就是:还很“初级”!
忠言逆耳,面子并不重要,静下心来好好想想吧,(主要用)一种工具并不能保你一辈子,
但(主要用)一种语言能!
再次为我的不当行为道歉,对不起!
 
我对wuliaotd的看法表示遗憾.一种语言的普及并不全然是由于他语言上比其他语言优越,
我的看法是, java在服务器端的成功在很大程度上是由于unix平台的稳定性高, 相比c++,他又比较简单, 不用去考虑内存或指针. 所以在dotcom的时代, 他被选择为一种主流的服务器端开发语言来普及. 并且还有象oracle, sun这些反m$的厂商大力支持.
delphi的易用性导致了不少程序员对它知其然而不知其所以然, 而且windows平台服务器端的不稳定性局限了他的发展.但从他的vcl对windows GDI的包装设计方面来看, 绝对是一流的. java的几种主流技术,象EJB, JSP, JDBC, JFC, JTL的设计, 都有不少毛病. JSP可视性开发太差. EJB的性能不好. JDBC的接口扩充不方便..至于JFC/SWING, 就是一堆shit.
另外一点, 关于java程序员的收入问题, 那只是暂时的, 在美国dotcom时代, sun, ibm等大推java, 在高校赠送java工作站, 免费培训java,培养了大批java程序员, 加之用java开发网站, 主要是html/js和sql, java的编程很简单, 只要知道servlet 的几个类就行了, EJB 不是很必要, 所以极易上手, 这又吸引了大批人转过来, 但dotcom垮了后,java程序员大量过剩.经常出现大量java高手应聘一个java职位的现象 收入也可想而只了.中国目前是在重演这个过程, 只不过是用java开发企业应用.而不是dotcom
另外对delphi程序员, 不要只停留在控件使用阶段, delphi的控件开发发技术思想很完美. 是oo开发的高级应用. 将要推出的delphi.net使c#和delphi的类,方法可以互相调用.delphi会作为.net的一个成员, 而不是旁观者.加之.net在linux上的平台mono的成功, .net和java之战结果很难预料.
 
yyanghhong讲得太精彩了.
Delphi对OOP的支持很优秀的支持的确很优秀,
我还不知哪个C# java特性Delphi language不能实现,但有些Delphi language特性
C# java却不能实现,单不谈面向过程,就是面向对象方面,虚拟类(静态)函数,类类型(class of)这些特性在C#与java中都没有.所以一般我设计了一个模型都首先用Delphi编码检验,跟着再艰难地移到.Net平台上,因为它有垃圾回收.Delphi可以用接口实现垃圾回收,但功能太约,与COM+一样,不能循环引用.
 
提醒一下大家,别让此贴成为吵架贴。
此贴让我想起4年前DFW的一个贴子,当时Cakk几个人好像吵的很凶,许多人说了许多的话。
结果结论也没有一个。
就我自己而言,用Delphi的时代,我觉得自己很狂,应为感觉自己什么都可以做,最新的技术都似乎能玩弄于指掌间,面向对象?每个东西都变成了控件,所有控件有其属性方法事件
难道还不够面向对象?可以标榜自己是CORBA,MTS,DCOM,COM等等等的专家?
开始用C++,累计用了4年了,我觉得我最大的收获就是,学会了闭嘴!
用Delphi3年了,作为计算机科学的从业者,你对Windows的系统有多少了解?UNIX?
CORBA如何建立接口你真的了解了吗?用Delphi的时候,你经常大谈COM,并且自己
也作了不少,但是别人说为什么Delphi COM作的模态窗口任务条会多个图标出来,
这到底是为什么?你不知道?两个窗口如何通讯的?用得是否是一个instance?使用
的是一个堆吗?完了,你会说,这个客户尽提些无理的要求,而自己买软件,却觉得
国产软件真土。ClientDataSet最多支持16个从表,客户说不好意思,无论如何至少
也只能是17个从表。你跳起来说这个太过分了!人家说,为什么C++组的人就不跳起来?
所以说,是Delphi强,而不是你,是Delphi理解了CORBA而不是你,是Delphi理解了面向
对象而不是你。长久以来,一直截流你工资的家伙就是你一直钟爱的Delphi。
现在,我可以架构最庞大的系统,最底层的虚拟设备,最绚丽的界面,因为我用的是C++,传说中它无所不能,而且它也维护了这个传说的真实。我有自己的类库,用不着什么多强
的可视化,因为C++让我变得头脑清楚,还用什么可视化??我在用C++去开发新的可视化工具,新的编译器,用JAVA去搭建最复杂的商业系统,你觉得自己屁股坐在操作系统上,JVM上,而不是风雨飘摇的Borland上,你有这个信心。而你也不用抛弃Delphi,用它迅速开发
一个数据库编辑器?聊天工具(防止公司屏蔽MSN,QQ)?或是一个工业控制的小程序?这时候你不再觉得Delphi高高在上,他和你平起平坐,而且永远是你的好朋友好助手。
 
design parttern是oo编程的精华, 但使用不当很容易导致过度庞大笨拙的架构设计, 这是很多java程序员容易犯的毛病. 下面是java的一个很成功的or mapping平台hibernate的作者观察了不少java应用开发后得出的总结.
Aiming for too much abstraction and flexibility at an early stage is a great way to waste time that could be better spent solving actual problems that your actual users are facing.do
the simplest thing that can possibly work.do
n't try to solve problems that your usersdo
n't care about. And itdo
ES NOT matter if your implementation is inelegant, at least initially. What matters is delivering useful functionality in a timely manner.
这些和delphi的开发思想很接近, 先利用快速的可视化方法把功能实现, 在程序员已经对功能结构很熟悉的基础上, 再根据重用的原则套用各种parttern去refactoring代码, 这样得到的代码才是简洁优美的.不过因为工期或delphi程序员水平的原因, 这个refactoring的过程执行的不够好.
object pascal是borland一家所有, 他的修改不象c++或java, 需通过各个标准委员会或各大开发商的同意.所以他一直在不断的修改, 到如今的7.0, 以把面向对象的特性支持的非常完美.GOF的20多个parttern在delphi中实现非常容易. 甚至到了语言层, 比如class reference就是一种很简洁的实现类工厂的方法, 比c++和java中的实现简单多了.正因为他在面向对象开发的先进优势, 才导致m$高薪挖走半数的delphi开发小组的成员去开发c#.
要不他怎么不去挖java的.
 
java是一个平台,作为语言的java的出现(1995)比delphi(1995)这个工具似乎还要早一点,java语言受当时c++的影响那是很自然的事,与delphi中OP好象难以扯上关系
 
好像Delphi是从Borland Pascal直接继承过来的。Borland Pascal就是OP了。
用的是OWL类库,而VCL又是从OWL无缝转移过来的。
Java还是比OP要晚一些。
象一些特性,例如单根继承,再堆上构件对象等等一大堆都是从Object Pascal上抄来的。
Java的包也能在Object Pascal的单元上看到雏形。
上面这些特性和C++没有一点关系。所以说Java是披着C++的外衣,骨子里却是抄袭Object Pascal。当然“抄袭”两个字Java的拥护者肯定受不了。但事实确实如此。
而且Java第一代编译器是Sun委托Borland开发的。所以不可避免的沾上了Object Pascal的影子。
 
关于c++的使用, 他是你学习的好手段, 你可以通过他了解底层的很多东西,因为底层都是他构造的.但他的复杂性和开发的长周期又满足不了现代软件项目开发的需要. 我们大多数工作并不要求你可以在windows的标题栏上放多一个button.他们只要你可以快速把他们的录入界面做好.所以我们需要的是一个可以很快完成95%的功能, 又容许我们通过编写底层代码完成5%的工作的工具.在这一点上, delphi做的很出色,
 
to yyanghhong:
不知道你是否真正理解JAVA和DELPHI没有?知不知道DELPHI在屏幕后面是怎么运行的?了解BORLAND魔法是以什么为代价的?明白JAVA和.NET的生命力在哪里吗?
没有EJB的J2EE就只剩下一个空壳,看来你对EJB连门都没入呢。
光从语言上讲,JAVA以及C#就比C++、SMALLTALK和OBJECT PASCAL等OO语言先进了一代。你理解自描述的意义了吗?JAVA和C#的革命性突破就在此处。
OBJECT PASCAL和JAVA语言的细微之处你理解了吗?描述一个对象要从静态逻辑视图、动态逻辑视图、静态物理视图和动态物理视图四个角度才能够进行充要的描述。OBJECT PASCAL可以吗?JAVA就可以。
DELPHI的可视化开发可以加快开发速度,你知道这种加速的作用范围和代价吗?为什么当项目大到一定规模,文件的编译和链接都是通过手工编辑MAKEFILE来进行而不是通过什么IDE的集成编译。你想过这是为什么吗?
DELPHI是个好工具,但不要夜郎自大,免得说的话自己以后看见也会脸红。
 
to沙隆巴斯的主人,
java有reflect机制,可以实现自描述, 你认为这很难吗? 在effective java中提到,
反射机制性能代价很大, 不推荐使用. 并且delphi.net中已加强了RTTI的功能.
为什么hibernate一出来就获得大成功, 为什么那么多人从ejb的CMP和BMP转向hibernate,
你认为很偶然吗
在java中, 我们可用ants去做批量编译, 这确实很好, 但这对delphi来说并不难, delphi
的开源项目want已经实现了这个功能.
另外, 我喜欢进行学术上的讨论, 不喜欢人身攻击
 
做个记号。
 
java, delphi, .net都是在不断发展中, 在我们利用各个语言的优确点互相攻击的时候, 开发商已经把这些问题放在TODO LIST上了, 不久它们都会给解决的. 一句话
Time is always a answer. 让我们拭目以待吧.
 
用delphi省不了多少时间。
 
非常欣赏Crane的话,
为什么每一次类似的争论,最后的结果不是解决一个问题或者是达到一个共识?
 
to yyanghhong:
DELPHI在演进、在进步,这是不争的事实。但在自描述上的差距还是太大了,而自描述是未来的一项关键技术。
EJB是有不足,如过于笨重,于是有了JDO和hibernate。这些都是实体EJB的轻量级解决方案,是对EJB的肯定。J2EE中非常完美的实现了DO、BO和PO。而DELPHI呢,BORLAND把精力都花在那些可视化控件上了,DO和BO几乎是空白。其实BORLAND也就打算把DELPHI弄成个前端开发工具。当然,这个根据很好用,这也是我为什么现在还用DELPHI的原因。
我无意进行任何人身攻击。但看到许多DFW在有意无意的进行DELPHI万能的误导,这对许多新进的DELPHI程序员将产生非常消极的影响。因此,我才出言批驳。有时难免言辞激烈,还望海涵。
 
先构造基类就是为了安全吧,子类能够确保自己能够正确的使用父类。
至于那些批评DELPHI的人,至少都会赞同一个观点DELPHI是WINDOWS下的快速开发工具首选吧,DELPHI对自己的定位也是基于此的呀,它就是把这个方向做到了最好。
至于狂妄应该是JAVA吧,在语言上借鉴了别人的东西,但又缺乏天才的想象力,没有突破,却什么都想做,这才是真的可笑。
SUN对JAVA的商业上的支持和大量投入也是它迅速崛起的重要原因吧。
商场如战场,少听点宣传,多点自我判断吧。
 
to ddev:
实际上DELPHI的每一个对象里都包含有其父类的一个实例(抽象类除外),因此其父类的构造子是一定被调用了的,不管你有没有显式的调用。
 
to Crane:
  说得好,鼓掌。不过下面这句话是不是夸张了点 ^o^
>>现在,我可以架构最庞大的系统,最底层的虚拟设备,最绚丽的界面,因为我用的是C++,传说中它无所不能,而且它也维护了这个传说的真实。
 
顶部