a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > Delphi > 正文

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

2019-11-18 18:51:38
字體:
來源:轉載
供稿:網友

(《將面向對象的思想貫穿始終-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’); // ß 此處Stream的真正實例類型是TFileStream

MyClass := TMyClass.Create;

MyClass.SaveToStream(strm);

…..

end;

而要將MyClass的內容存放到內存中,只需改變

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

:

       strm := TMemoryStream.Create;

即可。

       多態的使用是需要兩方面的工作,其一當然是類的構架中考慮到了多態,能夠提供實現某種功能的中間類(抽象類);其二,是懂得去運用這些中間類,這個工作體現在定義一些過程,函數的參數上。

       另外很重要的一點,我想提醒大家的是,類的規劃是很重要的,在面向對象編程的時代,類的框架很大程度上決定了程序的框架,決定了軟件開發的成敗。結構清楚,層次分明的類構架,不僅易于功能劃分與擴展,同時也更易于代碼的維護。而在這之中,應用繼承和多態的思想,引入抽象類,引入中間類,是較為可取的一種方法。

 

以下列出Delphi中提供的一部分抽象類與具體類:

 

抽象類                  派生的具體類

TStream                TFileStreamTMemoryStream

TCustomIniFile       TIniFile, TMemIniFileTRegistryIniFile

TStrings                TStringListTMemoStringsTListBoxStrings

 

還有很多,等待你我去發現。這里最常用的是TStream,而最令我驚異的是TCustomIniFile,它的TRegistryIniFile允許你用訪問IniFile的方式來訪問注冊表!這使得我可以用一套代碼,實現寫注冊表和寫Ini文件的功能。這其中的技術雖然簡單,但是它的意義非同凡響!

 

(未完,待續)

更多文章


上一篇:用Delphi實現風Word97風格的工具欄

下一篇:Delphi中RichEdit的奧妙

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 日韩www| 久久一区国产 | 国产在线观看91一区二区三区 | 在线视频一区二区 | 日本精品在线视频 | 日韩aⅴ一区二区三区 | 久久久国产一区二区三区 | 九九热在线视频观看这里只有精品 | 久久久九九九九 | 五月婷婷六月情 | 久久久com | 久久国产精品大桥未久av | 亚洲视频免费在线 | 国产精品正在播放 | 欧美成人精品一区二区男人看 | 成人国产精品 | 99精品国产99久久久久久福利 | 777kkk999成人ww | 中文字幕欧美日韩 | 日韩国产综合 | 中文字幕123伦 | 天天操狠狠 | 久久综合久久综合久久综合 | 久久久久久久 | 亚洲精品日韩激情在线电影 | 国产视频999 | 成人午夜精品久久久久久久蜜臀 | 亚洲精品二区 | 国产一区二区观看 | 国产超碰人人模人人爽人人添 | 国产精品成人3p一区二区三区 | 精一区二区 | 久久久精品一区二区三区 | 日韩高清一区二区 | 久久久久久久久网站 | 欧美成人久久 | 国产九九精品视频 | 国产精品婷婷久久久久 | 国产一区二区三区精品久久久 | 国产中文视频 | 在线观看免费视频亚洲 |