程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 將面向對象的思想貫穿始終--談Delphi開發(第三篇)

將面向對象的思想貫穿始終--談Delphi開發(第三篇)

編輯:Delphi

 

 

 

 

(《將面向對象的思想貫穿始終-談Delphi開發》之第三篇)

       前兩篇討論的是有關封裝性的話題。這裡,想和您說說關於繼承和多態。

       繼承和多態是密切相關的。Object Pascal引入了一種多態的機制,叫重載(Overload),它的思想與面向對象關系不大,這裡不作討論。與面向對象思想密切相關的多態是我們著重要討論的。

多態依賴於抽象方法以及虛方法的概念,同時也和繼承密切相關。以為我們往往定義一些底層的對象,然後將其某些實現定義為抽象的,也就是說我們僅僅定義了接口,而沒有定義具體的實現細節。按照這樣的思路,我們還會定義多個派生(繼承)的對象,在這些對象中真正實現那些在祖先類中未曾實現的細節。這就使得我們先前定義的底層類,具有多態的特性。這種機制的好處在於,我們使用這些類的時候,只要一套代碼,就可以完成多種功能。而唯一需要改變的就是創建對象的實例的那一部分。

觀察這樣的一個類:

  TStream = class(TObject)

    ……

  public

    function Read(var Buffer; Count: Longint): Longint; virtual; abstract;

    function Write(const Buffer; Count: Longint): Longint; virtual; abstract;

    ……

  end;

   virual以及abstract保留字表明了Read以及Write方法是純虛函數。這表明TStream這個類並不能被真正使用(不能創建該類的實例),它只是一個類似於接口的類,它定義了作為TStream類應當具備以及需要處理的基本功能。而且它還規定,其他從TStream類派生出的類,必須去實現的功能(如Read以及Write等)。

舉例來說,TFileStream,以磁盤文件應用的方式實現了TStream類;而TMemoryStream則以內存應用的方式實現了TStream類。現在假設有一個類TMyClass提供一個SaveToStream的方法:      

TMyClass = Class(TObject)

              procedure SaveToStream(Stream: TStream);

    end;

    則應用多態的思想,可以有這樣的代碼:

var

strm: TStream;

MyClass: TMyClass;

       begin

strm := TFileStream.Create(‘abc.txt’); //

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved