當前位置:編程學習大全網 - 編程語言 - Delphi 編程有沒有前途啊~

Delphi 編程有沒有前途啊~

由於Delphi與C++Builder同為Inprise公司產品,***享集成開發界面(IDE),而且

使用同壹套VCL框架(這壹點最關鍵),它們帶的調試器、PVCS/TeamSource團隊開發支持

、數據庫引擎及企業版中集成的其它高級功能等都是相同的,所以本文將其與C++Build

er歸入"同壹陣線"。我在網上見到壹些Delphi程序員認為C++Builder與VC比較接近,

這是個誤解。事實上,Delphi和C++Builder除了使用的語言不同,其余幾乎都相同。為

了避免話題轉移到C++語言與Object Pascal語言(即Delphi所用的語言)的比較,下文主

要對比分析Visual C++與C++Builder。

首先,從它們的應用程序框架(Application Frame,有時也稱為對象框架)進行比

較。Visual C++采用的框架是MFC。MFC不僅僅是人們通常理解的壹個類庫。(同樣,Del

phi和C++Builder使用的VCL的概念也不僅僅是壹個控件庫。)妳如果選擇了MFC,也就選

擇了壹種程序結構,壹種編程風格。MFC早在Windows 3.x的時代就出現了,那時的Visu

al C++還是16位的。經過這些年的不斷補充和完善,MFC已經十分成熟。但由於原型出現

得比較早,MFC相比於VCL落後了壹個時代。盡管微軟對MFC的更新沒有停止,我也經常讀

到持"只要Windows不過時,MFC就不會過時"之類觀點的文章,但就象Inprise(原Borl

and)的OWL框架的淡出壹樣,MFC的淡出也是早晚的事。如果MFC青春永駐,微軟的開發人

員也不會"私自"開發出基於ATL的WTL呀。當然,WTL的地位不能和MFC比,它並不是微

軟官方支持的框架,封裝的功能也相當有限。但至少也反襯出了MFC存在的不足。

我以為,最能體現壹個應用程序框架的先進性的是它的委托模型,即對Windows消

息的封裝機制。(對Windows API的封裝就不用說了吧。大同小異,也沒什麽技術含量。

如果高興,妳也可以自己寫壹個類庫來封裝。但對Windows消息驅動機制的封裝就不是那

麽容易的了。)最自然的封裝方式是采用虛成員函數。如果要響應某個消息就重載相應的

虛函數。但出乎我的意料,MFC采用的是"古老"的宏定義方法。用宏定義方法的好處是

省去了虛函數VTable的系統開銷。(由於Windows的消息種類很多,開銷不算太小。)不過

帶來的缺點就是映射不太直觀。好在較新版本VC帶的ClassWizard可以自動生成消息映射

代碼,使用起來還是比較方便的。但和VCL的委托模型相比,MFC的映射方法就顯得太落

後了。而C++Builder對C++語言進行了擴展,以便引入組件、事件處理、屬性等新特性。

由於功夫做在編譯器級,生成的源代碼就顯得十分簡潔。但是由於擴展的非標準特性,

使用VCL的C++Builder的源代碼無法被其它編譯器編譯。而MFC的功夫做在源代碼級,雖

然消息映射代碼較為復雜且不直觀,但兼容性非常好。只要妳有MFC庫的源代碼(隨VC企

業版的光盤提供),妳的MFC程序理論上用任何符合ANSI標準的編譯器均可編譯通過。C+

+Builder 3以上版本可以原封不動直接編譯Visual C++程序,很多人認為這是C++Build

er的兼容性好,實際上很大程度應歸功於MFC的兼容性好。微軟辛辛苦苦用標準方法寫M

FC,卻為對手制造了方便。不知他們作何感想?而因為C++Builder對語言作了擴展,VC

不能編譯C++Builder的程序。看來在這方面VC要輸給C++Builder了。而且VCL所支持的組

件、屬性等都是MFC所缺乏的特性。雖然VC也能支持組件,但要通過AppWizard先生成壹

個"包裹"類(wrapper),不如VCL來得簡潔。有很多人使用C++Builder就是沖著控件板

上那壹大堆組件來的,VC雖然能使用的組件也很多(也許不比C++Builder少),但由於不

方便而對RAD程序員沒有吸引力。

C++Builder的VCL比Visual C++的MFC先進的另壹個特性是異常處理。但令人啼笑

皆非的是,它的異常處理代碼有bug,有時會無端拋出異常。不知道在最新的版本中有沒

有改正了。而VC的框架MFC也不是壹無是處。經歷了那麽多年的發展和完善,MFC功能非

常全面,而且十分穩定,bug很少。其中妳可能遇到的bug更少。而且有第三方的專門工

具幫助妳避開這些bug。如此規模的壹個類庫,能做到這壹點不容易。不要小看了這壹點

,很多專業程序員就是為這個選擇VC的。而C++Builder的VCL的bug就相對較多了,而且

有些它自己帶的示例程序都有錯誤。看來Inprise還有很長的路要走。

再從它們的易用性比較。VC有ClassWizard、SourceBrowser等壹系列工具,還附

帶Visual SourceSafe、Visual Modeler等強大的工具,易用性非常好。(VC自帶建模工

具Visual Modeler,也許說明了它才是工程級的開發平臺,與C++Builder的定位不同。

)它所帶的MSDN這部"開發者的百科全書"更是讓妳"沒有找不到的,只有想不到的"。

而且它的AutoComplete之類小功能也比C++Builder要體貼。C++Builder的新版本雖然也

提供了這壹功能,但它的提示要等好幾秒才出來,有時妳不經意間把鼠標停在某壹處,

也要等硬盤響好幾秒,這可是在566Mhz的賽揚II上呀。不要笑我瑣碎,有時壹個開發工

具的成熟和易用,就是從這些小地方體現出來的。C++Builder作為RAD工具,理應強調易

用性。但與VC相比還顯出不成熟。這是不應該的。

再來看看它們的可移植性。Inprise正在開發C++Builder和Delphi的Linux版本,

代號為Kylix。也許通過Kylix,用VCL構架編寫的Windows程序向Linux移植成為可能。但

這只是可能。因為在目前Inprise的兼容性工作做得並不好。C++Builder可以編譯VC程序

還要多謝微軟使用標準方法寫MFC,而它自己各個版本之間兼容性卻不太好。低版本的C

++Builder不能使用高版本的VCL組件(這還別去說它),而高版本的C++Builder竟然不能

使用低版本的VCL組件。真是豈有此理,我很少看見軟件有不向下兼容的。如果Windows

98不能運行95的程序,Windows 95不能運行3.x的程序,Win 3.x不能運行DOS程序,妳

還會用Windows嗎?如果不是C++Builder的其它某些方面太出色,光是這個向下不兼容就

足以讓我拋棄它。而且雖說通過捆綁編譯器,C++Builder可以編譯Delphi的Object Pas

cal代碼,但C++Builder仍不能使用為Delphi開發的VCL組件。所以壹個組件有for D1/D

2/D3/D4/D5/C1/C3/C4/C5這些不同版本是常有的事,而且隨著C++Builder版本的升級可

能還會增加。希望Inprise能先解決同門兄弟的兼容性問題。而微軟的VC就沒有這類問題

。MFC1.0的程序也可以毫無障礙地在VC6.0下編譯通過。

再來看看它們的前景吧。實際上,技術的進步在很多時候是此消彼長的。當初Bo

rland的Turbo C和Borland C++幾乎是唯壹的選擇。微軟的Quick C(現在還有人知道這個

產品嗎?)和Microsoft C/C++從來也沒有成為過主流。但Borland C++又流行了多少年呢

?不久就被新崛起的Microsoft Visual C/C++壓下去了。現在的C++Builder又有後來居

上的態勢,如果穩定性再提高壹些,bug再少壹些,有希望成為主流。但Inprise的總體

實力不及微軟,這也是無可爭議的。從C++Builder 5的Release Notes中的Known Issue

s部分,以及它們的幫助文檔的規模和質量都可以看出。(哪個同類產品的幫助文檔能和

MSDN比呢?)Inprise公司應從Netscape吸取教訓,不要讓C++Builder成為第二個Netsca

pe Communicator。(Communicator也是壹度技術領先,甚至曾占據了大部分的瀏覽器市

場,但似乎後勁不足,而且 6.0 PR1、2中bug多多,現在被IE壓得擡不起頭。)C++Buil

der是Inprise的旗艦產品之壹,前景應當還是比較樂觀的,而且Inprise已經在向Linux

進軍了,而微軟還遲遲沒有動作,難道非要到Linux成燎原之勢(或許已經成燎原之勢了

)才會奮起占領這個新興市場?似乎他們對Linux的態度與幾年前對互聯網的興起的反應

遲緩有些相似。但後來......唉,真希望Inprise不要步Netscape的後塵。C++Builder是

壹個很有前途的開發工具。遺憾的是,Inprise公司Delphi的創始人已經跳槽到微軟去主

持Visual J++項目了。但願對Inprise沖擊不會太大。微軟的Visual C++的前景又怎樣呢

?Visual Studio 7.0不久就要推出了。不知能不能在保持穩定性的同時在技術的先進性

上趕上C++Builder。另外,這壹版本將加強網絡開發的特性。看來微軟雖然被判解體,

開發實力可是壹點沒打折扣。

就技術(主要指應用框架)來說,C++Builder目前領先於Visual C++。但多多少少

的不盡人意之處讓我對Inprise"想說愛妳不容易"。而VC盡管發展到今日已十分完善,

但MFC框架已是明日黃花了。如果不使用MFC,目前又沒有合適的替代品。WFC是支持組件

、屬性和事件的,但那是Visual J++裏邊用的;ATL也很先進,但是用來進行COM/Activ

eX開發的;基於ATL的WTL也不錯,可惜是非官方作品,也未必比VCL先進。微軟最近提出

了C#(讀作C Sharp)語言方案,但那屬於和Java同壹類的東西。看來是金無足赤啊。根據

妳的需要做選擇吧。實際上Visual C++和C++Builder也不是單單競爭關系。它們在許多

領域並不重疊,甚至是互補的。到底怎樣取舍,要根據妳的項目特性決定。如果妳開發

系統底層的東西,需要極好的兼容性和穩定性,選Visual C++吧。妳可以只調用Window

s的各種API,不用MFC。如果妳寫傳統的Windows桌面應用程序,Visual C++的MFC框架是

"正統"的選擇。如果妳為企業開發數據庫、信息管理系統等高層應用("高層"是相對

於"低層/底層"而言的,不是說技術高級或低級。)而且有比較緊的期限限制,選C++B

uilder比較好。如果妳用的語言是Object Pascal,Delphi是唯壹的選擇(如果GNU Pasc

al等免費編譯器不考慮的話)。如果妳原先用Delphi(Object Pascal語言),現在想改學

C++,應當先用C++Builder。熟悉的界面和相同的框架會讓妳的轉軌事半功倍。

另外,雖說MFC已顯落後,但不是說它不值得學。事實上,不學MFC就等於沒學VC

。利用MFC框架開發程序仍然是目前開發桌面應用的主流模式,而且還會保持相當長的時

間。即使妳不使用MFC框架,花點時間學習壹下MFC的封裝機制對妳熟悉C++的OOP機制和

Windows底層功能也是很有好處的

作為程序員等級評判的標準之壹c/c++(不管是mfc還是bcb)將

會讓位給三種編程語言,1.sun的java2.windows平臺上的c#3.xml

為什麽這麽說呢,我認為最大理由是目前的應用程序正在從基於獨立的操作系統,傳向

基於internet平臺.

我們以前開發應用程序都是依賴於平臺的功能調用,mfc,bcb都是這樣.而現在日益火熱

的internet編程卻最不想關心的就是某壹個平臺的調用,譬如說要實現b2b的電子商務那

麽就需要做不同平臺的集成,如果我是程序員我最care的就是如何實現商務邏輯

而不是各種平臺之間的通信和管理.那麽我們最迫切需要的就是壹種與各種平臺調用無

關的語言,這中語言只註重程序邏輯的設計而不涉及平臺的調用.而我們熟悉的c/c++卻恰

恰不是為這個而設計的(赫赫這也不能怪c/c++在70年代誰能知道現在internet的情況呢

).c/c++的最初設計目的是為了設計unix產生壹種介於匯編和高級語言之間的壹種開發高

效而性能不低的語言.他要比其他任何高級語言都要關心系統的物理結構,譬如壹直是毀

譽攙半的指針.指針之所以強大就是應為涉及了系統物理內存的管理.他可以使得程序員

和系統之間成為壹種半透明狀態.但是就是這種半透明的狀態讓指針帶來了更多的不穩定

性.

c/c++在面向Internet的編程中卻無任何優勢可言.跨平臺的電子商務軟件最害怕顧及

各種平臺之間的天差地別的系統調用,最害怕時不時的由於內存泄漏而crash.c/c++的優

勢在這裏卻成為了劣勢.即使在windows平臺上開發基於windows dna的solution

用的最多的還是vb做的dcom而不是vc的atl做的dcom,因為c/c++雖然高效但是太容易

出錯,如果不是很小心的釋放內存nt很快就會資源不足.

java就是最先看到這種情況,他用jvm實現了平臺無關用內存回收實現了穩定健壯.但是

相當多的c/c++程序員抱怨java太慢了.的確即使到java2速度仍然是壹個大問題.我曾經

是壹個c/c++堅決擁護者在許多論壇裏和java程序員打筆仗.但是我逐漸意識到面對與in

ternet平臺而不是特定的操作系統的時候java的速度問題往往是壹個小小的瑕疵.我們可

以想象那壹個電子商務網站會用我們手頭的pc做服務器,他們不是sun的e1000就是ibm的

risc6000.在這種平臺上java這點速度問題只是a peice of cake.程序員只需要專註與商

務邏輯的編程,而不必要關心數組是否越界,對象內存是否釋放更不需要關心是不是unix

和windows的系統調用不壹樣.

微軟的c#可以說是壹種java與c/c++的雜合體,他可以回收內存,可以平臺無關.但是

他又可以實現壹些java沒有的功能譬如在標記的程序段內用指針自己管理內存,可以實

現操作符的重載等等.為什麽要這樣做我想也許c#還肩負了壹定的面向操作系統開發的任

務例如winform.他基本上的思想和java類似,但是實現的方法又不壹樣他不通過jvm解釋

中間代碼,而是吧源代碼編譯成p代碼然後通過CLS庫和JIT在平臺上及時編譯為100%的本

地代碼來執行.他的pe代碼是獨立於平臺的,但是cls和jit卻根據不同的平臺而設計.因此

c#的平臺獨立有點類似於c/c++在不同平臺上的移植使得c#比java來的更快.而且微軟還

許諾cls和jit不僅針對c#還可以針對任何語言譬如pascal,smaltalk,basic因此將來有可

能所有的編程語言都是可以平臺無關的(ms真是毒,所有的語言都平臺無關java還有什麽

優勢呢,據說ms正在開發基於pascal smaltalk的asp+).

xml很多人可能認為與html相類似的語言和c/c++,java,c#完全不在壹個檔次上的語言

.其實不然.我們知道不管是c#還是java都是通過統壹地層計算來實現平臺無關.那就必須

在性能上付出壹點代價.而xml卻能夠實現不同的語言之間的調用.譬如說壹個網占用jav

a用bean實現壹個出貨功能,另壹個網站用dcom實現壹個入庫功能 .如果這個網站需要實

現b2b,用壹般的方式就是在他們之間寫轉換程序.而xml通過標記語言來描述各自的借口

特性.兩端通過解析xml文本來實現互相的調用,無需任何中間轉換程序

只要壹張xml文本就能實現bean和dcom之間的通訊(要說清楚其中的機理,需要很多xml

概念如果有興趣可以到msdn.microsoft.com/xml或者www.s3c.org去看看).目前ms的.ne

t中最核心的技術soap就是完全基於xml的遠過程調用.

介紹了那麽多可能有點跑題,其實我最想說的就是21世紀的程序員應該從面向操作系統

的傳統方法中走出來,學習壹點如何面向Internet平臺編程的技術和概念.不要在無畏的

那種c/c++工具好之類的地方爭論.我想不出壹兩年不管是bcb還是mfc都要淘汰,

到那個時候要爭論的不是bcb好還是mfc好而是c#好還是java好.至於xml那是不管sun和

ms以至於世界任何大的IT公司包括Intel,hp都在奮力研究的技術,不學習可能就要被淘汰

.至於c/c++可能就會淪落到現在匯編的地位在某些系統效能敏感的地方還能見得到.

如果是編程語言的初學者那麽我建議學習java同時關註c#,他們首先比c/c++簡單沒有

復雜的宏,指針,摸版等等讓人摸不招頭腦的概念.而且是完全面向對象,比c/c++的半調子

面向對象清楚的多好學的多.(我推薦目前學習java,畢竟c#還沒有發布而且剛發布的bet

a版的編譯器要求高的嚇人需要win2000 adv server沒有128M內存的別想跑.話說回來c#

和java壹摸壹樣沒有什麽太大的區別學好了java將來的c#將會信手拈來)

對於目前的windows下的編程者來說學習mfc的價值還是有壹點的但是不是太大.至少可

以熟悉windows內在機理.但是我還是推薦關註壹下c#將來的windows.net都是基於c#而不

是mfc.而且c#要比mfc簡單的多實現壹個同樣的windows桌面應用c#的開發速度是mfc的兩

到三倍而且幾乎看不見性能的損失. visual studio 7.0中 vc將是壹個次要的開發工具

最主要的開發工具就是c#和vb7.0.至於borland我想是不可能不跟著ms走至少windows平

臺上是這樣說不定明年就有壹個c# builder出來作為borland的主打產品而不是c++buil

der了.說壹句玩笑話wenny說不定很快會把這裏變成www.c#help.net了

  • 上一篇:加工中心的工藝特點和對刀方法有哪些?
  • 下一篇:哈爾濱正晨zc4000型火焰等離子數控切割機使用說明
  • copyright 2024編程學習大全網