delphi 模式編程 第二章總結


本章重點摘要:


  • 對象模型機制
  • 動態綁定機制
  • 類型轉換機制
  • 接口抽象機制

1、對象模型機制

     對象本質:
  • 相關代碼和數據的組合,是包含相互之間有聯繫的過程集和數據的軟件包
  • 能夠視爲變量,其類型爲「類」
  • 類是對象的模板或模型,對象是類的實例
  • 對象是服務提供者

     對象模型的一些概念:
  • 對象 問題域中有明確意義的事物
  • 類 描述了有共同屬性、行爲、特徵的對象
  • 屬性 數據值
  • 行爲 功能
  • 聯繫 對象間的物理或概念上的聯繫
  • 關聯 類之間的聯繫
  • 聚合 A "has a" B 
  • 繼承 A "is a" B
     對象模型圖:

     對象之間的關係:
  • 繼承關係--保持對象之間的差別性的同時共享對象的類似性。繼承關係分兩種:類對對象接口的實現,即接口繼承;類對類的繼承,即實現繼承。
  • 合成關係--新的對象由已有的對象組合而成,即單純複用既有的功能,而非重複運用其形式。合成關係分兩種:聚合關係,即部分和總體(has-a),並可傳遞;組合關係,即包含關係。
     如何用繼承?
  • 派生類是基類的一個特殊種類
  • 不要出想須要將派生類換成另外一個類的派生類的狀況
  • 派生類具備擴展基類的責任,不要覆蓋掉或註銷掉基類的責任
  • 最好不要從工具類繼承。
     繼承和合成的比較:


優勢 缺點
繼承 新的實現比較容易;修改或擴展繼承而來的實現比較容易 破環封裝,基類的實現細節暴露給派生類;基類改變影響全部派生類;從基類繼承而來實現時靜態的,沒法運行期間改變,不夠靈活
合成 新對象存取組成對象的惟一方法是經過組成接口;組成對象的內部細節不爲新對象所見;支持包裝;依賴較少;運行期進行,新對象可動態引用與組成對象類型相同的對象。 要管理較多的對象;

2、動態綁定機制

     方法綁定:創建方法調用和方法本體之間關聯,分爲早綁定,即程序執行前綁定;晚綁定,即執行時根據對象類型進行綁定。

     如何動態綁定的途徑:
  • 虛方法(virtual),容許對不一樣類中的同名方法有不一樣的實現,並在運行期進行綁定。使用規則:1)用關鍵字virtual聲明;2)使用覆蓋(override)替換或擴展虛方法;3)被覆蓋的虛方法參數列表不能更改。
  • 動態方法(dymatic),和虛方法基本一致。

     多態須要具有的條件:
  • 基類定義了一個或多個虛方法
  • 一個或多個派生類覆蓋那些虛方法
  • 一個實例變量(或參數),其類型是基類,但實際上它引用的是某個派生類的一個實例。
3、類型轉換機制

     類型:分爲值類型,是一些簡單的數據類型,如Char;引用類型,是一些複雜的類型,如類,對象接口。

     向上轉型:
  •      向上轉型是安全的,由於任何派生類都繼承自基類,擁有基類的接口(方法)。
  •      可以面向接口編程。

     向下轉型:
  • 是一種強制轉換,須指明確切類型。
  • 在對象參數傳遞中,經過向上轉型傳遞一個派生類對象參數,在獲得該對象後,每每須要向下轉型,恢復原來的面貌
  • 在對象容器(TObjectList)中取出一個對象時,須要向下轉型,不然獲得TObject類型。

4、抽象接口機制

     接口:規定」作什麼「而無論」怎麼作「,即它關心的是方法定義的參數,而不是具體實現。它分爲寬接口,即delphi的類(一般是抽象類)和對象接口所聲明的方法;窄接口,即對象接口,依附於類,可是不能直接實例化,也不能本身實現方法。


     抽象類:爲派生類定義公共接口,把方法的實現延遲到派生類中。不能實例化,用abstract 限定virtual,dynamic,或override。

     抽象類的使用原則:
  • 擁有儘量多的公共代碼。
  • 擁有儘量少的數據,以區別具體類。

     接口對象的使用;
  • 一般繼承一個已有的接口來聲明一個新接口。
  • 接口繼承自IInterface接口

相同點 不一樣點
抽象類 不能實例化;提供抽象方法 一個類只能繼承一個抽象類;派生類能夠部分實現;
對象接口 不能實例化;提供抽象方法 一個類能夠繼承多個接口;全部方法都是public;實現接口的類須要實現接口全部的方法;



對接口而不是對實現編程:根據抽象類或對象接口中定義的接口來操縱對象。對象的類(class)定義了對象是怎樣實現的,同時也定義了對象的內部狀態和操做實現,而對象的類型只與它的接口相關。在delhi中,類既指對象的類型又制定了對象的實現,但對象接口僅指定對象的類型未指定對象的實現。
相關文章
相關標籤/搜索