2.2 用Delphi的對象進行編程
Delphi是基于面向?qū)ο缶幊痰南冗M開發(fā)環(huán)境。面向?qū)ο蟮某绦蛟O(shè)計(OOP)是結(jié)構(gòu)化語言的自然延伸。OOP的先進編程方法,會產(chǎn)生一個清晰而又容易擴展及維護的程序。一旦您為您的程序建立了一個對象,您和其他的程序員可以在其他的程序中使用這個對象,完全不必重新編制繁復(fù)的代碼。對象的重復(fù)使用可以大大地節(jié)省開發(fā)時間,切實地提高您和其他人的工作效率。
2.2.1 什么是對象
一個對象是一個數(shù)據(jù)類型。對象就象記錄一樣,是一種數(shù)據(jù)結(jié)構(gòu)。按最簡單的理解,我們可以將對象理解成一個記錄。但實際上,對象是一種定義不確切的術(shù)語,它常用來定義抽象的事務(wù),是構(gòu)成應(yīng)用程序的項目,其內(nèi)涵遠比記錄要豐富。在本書中,對象可被理解為可視化部件如按鈕、標簽、表等。
了解對象,最關(guān)鍵的是掌握對象的特性。一個對象,其最突出的特征有三個:封裝性、繼承性、多態(tài)性。
2.2.1.1 對象的封裝性
對對象最基本的理解是把數(shù)據(jù)和代碼組合在同一個結(jié)構(gòu)中,這就是對象的封裝特性。將對象的數(shù)據(jù)域封閉在對象的內(nèi)部,使得外部程序必需而且只能使用正確的方法才能對要讀寫的數(shù)據(jù)域進行訪問。封裝性意味著數(shù)據(jù)和代碼一起出現(xiàn)在同一結(jié)構(gòu)中,如果需要的話,可以在數(shù)據(jù)周圍砌上“圍墻”,只有用對象類的方法才能在“圍墻”上打開缺口。
2.2.1.2 對象的繼承性
繼承性的含義直接而且顯然。它是指把一個新的對象定義成為已存在對象的后代;新對象繼承了舊類的一切東西。在往新對象中添加任何新內(nèi)容以前,父類的每一個字段和方法都已存在于子類中,父類是創(chuàng)建子類的基石。
2.2.1.3 對象的多態(tài)性
多態(tài)性是在對象體系中把設(shè)想和實現(xiàn)分開的手段。如果說繼承性是系統(tǒng)的布局手段,多態(tài)性就是其功能實現(xiàn)的方法。多態(tài)性意味著某種概括的動作可以由特定的方式來實現(xiàn),這取決于執(zhí)行該動作的對象。多態(tài)性允許以類似的方式處理類體系中類似的對象。根據(jù)特定的任務(wù),一個應(yīng)用程序被分解成許多對象,多態(tài)性把高級設(shè)計處理的設(shè)想如新對象的創(chuàng)建、對象在屏幕上的重顯、程序運行的其它抽象描述等,留給知道該如何完美的處理它們的對象去實現(xiàn)。
2.2.1.4 通過Delphi實例了解對象
讓我們結(jié)合Delphi的實例討論對象的概念:
當您要建立一個新工程時,Delphi 將顯示一個窗體作為設(shè)計的基礎(chǔ)。在程序編輯器中,Delphi將這個窗體說明為一個新的對象類型,并同時在與窗體相關(guān)聯(lián)的庫單元中生成了創(chuàng)建這個新窗體對象的程序代碼。
unit Unit1;
interface
uses SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm) {窗體的類型說明開始}
private
{ Private declarations }
public
{ Public declarations }
end; {窗體的類型說明結(jié)束}
var
Form1: TForm1; {說明一個窗體變量}
implementation
{$R *.DFM}
end.
新的窗體類型是TForm1,它是從TForm繼承下來的一個對象。它具有對象的特征:含有域或方法。由于您未給窗體加入任何部件,所以它只有從TForm類中繼承的域和方法,在窗體對象的類型說明中,您是看不到任何域、方法的說明的。Form1稱為TForm1類型的實例(instance)。您可以說明多個對象類型的實例,例如在多文檔界面(MDI)中管理多個子窗口時就要進行這樣的說明。每一個實例都有自己的說明,但所有的實例卻共用相同的代碼。
假設(shè)您向窗體中加入了一個按鈕部件,并對這個按鈕建立了一個OnClick事件處理過程。再查看Unit1的源程序,會發(fā)現(xiàn)TForm1的類型說明部分如下:
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
現(xiàn)在TForm1對象有了一個名為Button1的域:它是您在窗體中加入的按鈕。TButton是一個對象類型,Button1是Tbutton的一個實例。它被TForm1對象所包含,作為它的數(shù)據(jù)域。每當您在窗體中加入一個部件時,部件的名稱就會作為TFom1的域加入到類型說明中來。在Delphi中,您所編寫的事件處理過程都是窗體對象的方法。每當您建立一個事件處理過程,就會在窗體的對象類型中說明一個方法。
當您使用Object Inspector來改變對象(部件)的名稱時,這個名稱的改變會反映到程序中。例如,在Object Inspector中將Form1的Name屬性命名為ColorBox,您會發(fā)現(xiàn)在類型說明部分,會將前文的TForm1改為:
TColorBox=class(TForm);
并且在變量說明部分,會說明ColorBox為TColorBox類型的變量,由Delphi自動產(chǎn)生的事件處理過程名稱會自動改為TColorBox.Button1Click;但您自行編寫的實現(xiàn)部分的代碼卻不會被自動修改。因此,如果您在改變Name屬性前編寫了程序,則您必須將事件處理過程中的對象名稱進行改變。所以,原先的Form1.Color要改為ColorBox.Color。
相關(guān)推薦:2010年9月計算機等級考試試題及答案解析專題北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |