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