一個C++程式設計師的Delphi學習筆記 (轉)

gugu99發表於2008-03-07
一個C++程式設計師的Delphi學習筆記 (轉)[@more@]

  一個C++員的學習筆記

  說心裡話,站在一個C++程式設計師的立場,是有那麼一點看不上用Delphi的開發者的。就幾周前,我還撰文維護過C++的尊嚴。種種原因,今天我卻須學習Delphi、熟悉Delphi,不由興起人生無常的感慨。

  我給了自己十五天的時間,不知夠否掌握一門語言?我選擇了Marco cantu的《Delphi從到精通》及《Delphi高階開發指南》作為學習用書。第一本書名叫《從入門到精通》,但如果你不熟悉一門語言,那這本書不合適你。對我,則正合適。二書總厚度共一千五百頁,嗯,一天一百頁就差不多了,希望自己能做到吧。

  我決定如實記下自己的思考與困惑,做為自己進軍新領域的記念,也希望能為後行的同路者提供一點幫助。
 
一 環境
 
  "工欲善其事,必先利其器",對開發環境的熟悉是非常重要的。不同於VC的MDI介面,Delphi採用了多個獨立窗體設計。這是否預示Borland更提倡間進行對等的互動?我暗暗猜測著。

1.Desktop設定是可以與Project分離的,而且Desktop設定優先於Project設定。

2.To-Do列表無論是用於提醒自己還是別人,都是好工具。

3.AppBrowser感覺上很相似於VC的主介面。也提供了符號提示,Code Completiont等功能。嗯,還有VC所沒有的Class Completion,可以在宣告和實現間雙向自動補完。

4.Project Group的概念,有點像平臺中的Solution,不過.net是多語言協作的。


二 語言
 
  Delphi的核心是VCL庫,其基礎是 Pascal。《從入門到精通》用兩章的篇幅細說"Object",卻隻字沒有提到"Pascal"。嗯,還好,我隱隱記得。

1.Use用於引用外部單元。與頭不同,Use沒有傳遞性。

2.Delphi使用引用模型,物件變數只持有物件引用,不再持有物件本身,所有物件手動自堆中分配。

3.Delphi的封裝很奇怪,類成員訪問的設定,只對單元外部起作用。在單元內,可以自物件外部任意訪問類私有成員。朋友解釋說相當於C++的友元,細想其實差異很大--友誼一定是雙向的嗎?(將Unit方式用作友元,A能訪問B,B一定能訪問A)友誼有傳遞性嗎?(將Unit方式用作友元,A能訪問B,B能訪問C,A一定能訪問C)。在我看來,這和友員的概念是不相容的。希望某天我能明白Delphi如此設計的考量。

4.在宣告物件變數後,Delphi物件的實際生成需構造器。構造器是特殊的類方法,自TObject繼承並可過載。不使用關鍵字而用類方法構造物件,我認為這是單根繼承的特有用法。

5.書中有一段動態建立TButton的例子,使用Creat建立了物件,卻沒用Free顯式的釋放

。我疑心會發生洩漏,細細想來,該是由持有TButton的容器TForm來負責釋放,朋友證實了我的想法。Delphi以此避免了手動釋放記憶體的麻煩。

6.Delphi的關鍵字很煩,長而多,要鍵入的地方也多。好處是能為提供更多的資訊,用以查錯和加快編譯速度。

7.因著引用物件模型,不再有C++中直接物件訪問無多型,只在指標和引用下多型機制才起作用的問題。

8.用message直接指出方法可以處理的事件,唉,讓我想起OWL時Borland對C++語言的相似擴充套件,真是懷念。

9.大量使用動態型別轉換,該是Pascal本就具有的特點吧?

10.窗體繼承,好像連的屬性都可以繼承呢。

11.很奇怪的設計。有類方法,卻不提供類變數,需用Unit級的變數來模擬。

12.如果我的猜想不錯,控制元件的Events應該就是"物件方法指標"。

13.極強有力的機制:類引用,可用相同的形式動態建立不同的資料型別。C++中相似的能力,怕要用Builder才行。

14.引數物件按引用傳遞,按引用賦值,只有部分類提供Assign方法複製對像。唉,C++的值語意,好懷念。

15.Finally塊!解決了C++中好些需高度技巧的資源釋放問題。但為什麼不能和except一起使用?不太明白。

16.屬性和事件??真是為VCL量身定製的語言啊。其實屬性和事件並非物件導向的必要元素。

17.我想VCL事件處理的委託模型,該是與相似的。只是Java的Listener可以處理多

個Listener的存在,Delphi的事件屬性好像只能處理一個吧?不過處理速度上要快多了。

18.a)從TComponent類繼承,b)新構造程式,c)例行的Register,d)。VCL元件建立的方便,真讓人感動。

19.書上說VCL優於,因為ActiveX沒有完全的繼承機制,我不敢苟同。聚合該是先於繼承選用的機制。

20.Interface,醜死了!!我甚至懷疑這是否Hejlsberg的設計。完全像是為Com支援臨時拼湊的語言成份,與整體毫不協調,像個外來戶。介面本身是強大的東西,但糟糕的設計會讓它的使用成為一種痛苦。除了COM和多重繼承沒有選擇外,我想是沒人願意用它的。

  整個來說,Object pascal給我很深的映象。接下來就該學習VCL了,且看Borland是如何將這種種語言的成份,組裝成為開發的利器。(續待)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1000525/,如需轉載,請註明出處,否則將追究法律責任。

相關文章