《delphi高手突破》據說挺不錯,他用物件導向的觀點描述了delphi中的類和vcl架構。
第二章、物件導向程式設計理論基礎
設計優良的類的某些共同特徵:具有狀態資訊,介面簡單、明了,易用。在op的類中,有四種訪問級別:private、protected、public、published。其中public中的成員可以被所有客戶**直接訪問;published中的成員和public差不多,不過可以被object inspector顯示;private成員只有類本身和友員可以訪問;protected和private類似,不過可以被派生類訪問。
單元級別的封裝:(1)在乙個unit中宣告的多個類互為友元類(2)在意個unit的inte***ce部分宣告的變數為全域性變數,其他的unit可見(3)在意個unit的implementation部分宣告的變數為該unit的全域性變數,只在該unit可見(4)每個unit可有單獨的初始化段(initialization)和反初始化段(finalization)。
inteface部分是單元檔案作為乙個模組的對外介面,implementation對外是隱藏的。
封裝的難點是如何設計介面,必須保證介面是功能的全集,盡量讓介面是最小冗餘的,要保證介面是穩定的即介面和實現分離
只支援封裝而不支援繼承的語言只能稱為『基於物件』(object-based)而非『物件導向』(object-oriented)。
多型性是允許使用者將父物件設定成為乙個或更多的它的子物件相等的技術,賦值之後,基類物件就可以根據當前賦值給他的派生類物件的特性以不同的方式運作。(沒看懂...)
虛方法(virtual method)覆蓋(override)過載(overload)
引數不同的多個同名函式,確定函式呼叫入口位址的方法稱為早繫結
當派生類重定義了基類的虛方法後,由於重定義的派生類的方法位址無法給出,其呼叫位址在編譯期間片無法確定,故基類指標必須根據賦給他的不同的派生類指標,在執行期動態地呼叫屬於派生類的虛方法。這樣的確定函式呼叫位址的方法稱為晚繫結。bruce eckel:「不要犯傻,如果他不是晚繫結,他就不是多型」
多型通過虛方法實現,而虛方法通過動態繫結(晚繫結)實現。
凡是含有abstract方法的類被稱為『抽象類』
當建立類物件後,編譯器會在該物件的記憶體空間的首4個位元組安插乙個指標,該指標所指向的位址稱為vmt(virtual method table,虛方法表),該錶存放了類的所有虛方法的入口位址。vmt與c++、com的vtable相容。
總結:通過這一章的學習我明白了delphi中(也可以說op中)類的實現,類的封裝、繼承和多型。明確了一些物件導向的概念,以前我認為同名函式不同引數也屬於多型,如類的建構函式,可以設計多個含有不同形參的,在建立物件的時候可以根據建構函式的不同建立不同型別的物件,看樣我我理解錯了。
第三章、異常及錯誤處理
raise可以丟擲乙個異常物件:raise exception.create('this is a test!');
chalie calverts:「在似乎有用的時候,就應該使用try...except快。但是要試著讓自己對這種技術的熱情不要太過分。」
《Delphi高手突破》學習筆記(二)
第四章 vcl庫 tobject封裝了op類 物件的最基本行為。tpersisitent派生自tobject,它及其派生類具有自我儲存 持久存在的能力。tcomponent派生自tpersisitent,該分支下所有的類都可以被稱為 元件 元件的一般特性 1 可出現在開發環境的 元件板 上 2 能夠...
delphi高手突破之異常及錯誤處理
什麼是異常?為什麼要用它?所謂 異常 是指乙個異常類的物件。delphi的vcl中,所有異常類都派生於exception類。該類宣告了異常的一般行為 性質。最重要的是,它有乙個message屬性可以報告異常發生的原因。但需要強調的是,異常用來標誌錯誤發生,卻並不因為錯誤發生而產生異常。產生異常僅僅是...
delphi學習筆記 TADOQuery
delphi 資料庫查詢 tadoquery 在乙個程式中你會多次查詢資料庫的,因此在你寫的查詢方法中定義乙個區域性的adoquery就可以了,它返回乙個資料集 recordset。最簡單的應用如下 function getdata recordset 獲取一張表中的全部資料 recordset是一...