說心里話,站在一個C++程序員的立場,是有那么一點看不上用Delphi的開發(fā)者的。就幾周前,我還撰文維護(hù)過C++的尊嚴(yán)。種種原因,今天我卻須學(xué)習(xí)Delphi、熟悉Delphi,不由興起人生無常的感慨。
我給了自己十五天的時間,不知夠否掌握一門語言?我選擇了Marco cantu的《Delphi從入門到精通》及《Delphi高級開發(fā)指南》作為學(xué)習(xí)用書。第一本書名叫《從入門到精通》,但如果你不熟悉一門OOP語言,那這本書不合適你。對我,則正合適。二書總厚度共一千五百頁,嗯,一天一百頁就差不多了,希望自己能做到吧。
我決定如實記下自己的思考與困惑,做為自己進(jìn)軍新領(lǐng)域的記念,也希望能為后行的同路者提供一點幫助。
一 環(huán)境
\"工欲善其事,必先利其器\",對開發(fā)環(huán)境的熟悉是非常重要的。不同于VC的MDI界面,Delphi采用了多個獨立窗體設(shè)計。這是否預(yù)示Borland更提倡組件間進(jìn)行對等的交互?我暗暗猜測著。
1.Desktop設(shè)置是可以與Project分離的,而且Desktop設(shè)置優(yōu)先于Project設(shè)置。
2.To-Do列表無論是用于提醒自己還是別人,都是好工具。
3.AppBrowser感覺上很相似于VC的主界面。也提供了符號提示,Code Completiont等功能。嗯,還有VC所沒有的Class Completion,可以在聲明和實現(xiàn)間雙向自動補完。
4.Project Group的概念,有點像.net平臺中的Solution,不過.net是多語言協(xié)作的。
二 語言
Delphi的核心是VCL庫,其基礎(chǔ)是Object Pascal。《從入門到精通》用兩章的篇幅細(xì)說\"Object\",卻只字沒有提到\"Pascal\"。嗯,還好,我隱隱記得。
1.Use用于引用外部單元。與頭文件不同,Use沒有傳遞性。
2.Delphi使用引用對象模型,對象變量只持有對象引用,不再持有對象本身,所有對象手動自堆中分配。
3.Delphi的封裝很奇怪,類成員訪問權(quán)限的設(shè)定,只對單元外部起作用。在單元內(nèi),可以自對象外部任意訪問類私有成員。朋友解釋說相當(dāng)于C++的友元,細(xì)想其實差異很大--友誼一定是雙向的嗎?(將Unit方式用作友元,A能訪問B,B一定能訪問A)友誼有傳遞性嗎?(將Unit方式用作友元,A能訪問B,B能訪問C,A一定能訪問C)。在我看來,這和友員的概念是不相容的。希望某天我能明白Delphi如此設(shè)計的考量。
4.在聲明對象變量后,Delphi對象的實際生成需調(diào)用構(gòu)造器。構(gòu)造器是特殊的類方法,自TObject繼承并可重載。不使用關(guān)鍵字而用類方法構(gòu)造對象,我認(rèn)為這是單根繼承的特有用法。
5.書中有一段動態(tài)創(chuàng)建TButton的例子,使用Creat創(chuàng)建了對象,卻沒用Free顯式的釋放
我疑心會發(fā)生內(nèi)存泄漏,細(xì)細(xì)想來,該是由持有TButton的容器TForm來負(fù)責(zé)釋放,朋友證實了我的想法。Delphi以此避免了手動釋放內(nèi)存的麻煩。
6.Delphi的關(guān)鍵字很煩,長而多,要鍵入的地方也多。好處是能為編譯器提供更多的信息,用以查錯和加快編譯速度。
7.因著引用對象模型,不再有C++中直接對象訪問無多態(tài),只在指針和引用下多態(tài)機(jī)制才起作用的問題。
8.用message直接指出方法可以處理的事件,唉,讓我想起OWL時Borland對C++語言的相似擴(kuò)展,真是懷念。
9.大量使用動態(tài)類型轉(zhuǎn)換,該是Pascal本就具有的特點吧?
10.窗體繼承,好像連控件的屬性都可以繼承呢。
相關(guān)鏈接:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |