人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

第二章 Delphi面向?qū)ο蟮木幊剔k法(4)

第二章 Delphi面向?qū)ο蟮木幊剔k法(4)

更新時(shí)間:2022-07-13 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

2.1.10.7 將庫單元加入工程 

   將庫單元加入工程是比較簡單的。無論是您自己建立的庫單元還是Delphi建立的與窗體有關(guān)的庫單元,如果已經(jīng)完成,則先打開您想加入庫單元的工程(可以用Open Project打開工程);再選用File|Open File,然后選擇您想加入的源程序(.PAS文件),并選擇OK即可。則庫單元被加入到應(yīng)用程序中。 

  2.2 用Delphi的對象進(jìn)行編程 

   Delphi是基于面向?qū)ο缶幊痰南冗M(jìn)開發(fā)環(huán)境。面向?qū)ο蟮某绦蛟O(shè)計(jì)(OOP)是結(jié)構(gòu)化語言的自然延伸。OOP的先進(jìn)編程方法,會(huì)產(chǎn)生一個(gè)清晰而又容易擴(kuò)展及維護(hù)的程序。一旦您為您的程序建立了一個(gè)對象,您和其他的程序員可以在其他的程序中使用這個(gè)對象,完全不必重新編制繁復(fù)的代碼。對象的重復(fù)使用可以大大地節(jié)省開發(fā)時(shí)間,切實(shí)地提高您和其他人的工作效率。 

  2.2.1 什么是對象 

   一個(gè)對象是一個(gè)數(shù)據(jù)類型。對象就象記錄一樣,是一種數(shù)據(jù)結(jié)構(gòu)。按最簡單的理解,我們可以將對象理解成一個(gè)記錄。但實(shí)際上,對象是一種定義不確切的術(shù)語,它常用來定義抽象的事務(wù),是構(gòu)成應(yīng)用程序的項(xiàng)目,其內(nèi)涵遠(yuǎn)比記錄要豐富。在本書中,對象可被理解為可視化部件如按鈕、標(biāo)簽、表等。

   了解對象,最關(guān)鍵的是掌握對象的特性。一個(gè)對象,其最突出的特征有三個(gè):封裝性、繼承性、多態(tài)性。 

  2.2.1.1 對象的封裝性 

   對對象最基本的理解是把數(shù)據(jù)和代碼組合在同一個(gè)結(jié)構(gòu)中,這就是對象的封裝特性。將對象的數(shù)據(jù)域封閉在對象的內(nèi)部,使得外部程序必需而且只能使用正確的方法才能對要讀寫的數(shù)據(jù)域進(jìn)行訪問。封裝性意味著數(shù)據(jù)和代碼一起出現(xiàn)在同一結(jié)構(gòu)中,如果需要的話,可以在數(shù)據(jù)周圍砌上“圍墻”,只有用對象類的方法才能在“圍墻”上打開缺口。 

  2.2.1.2 對象的繼承性 

   繼承性的含義直接而且顯然。它是指把一個(gè)新的對象定義成為已存在對象的后代;新對象繼承了舊類的一切東西。在往新對象中添加任何新內(nèi)容以前,父類的每一個(gè)字段和方法都已存在于子類中,父類是創(chuàng)建子類的基石。 

  2.2.1.3 對象的多態(tài)性 

   多態(tài)性是在對象體系中把設(shè)想和實(shí)現(xiàn)分開的手段。如果說繼承性是系統(tǒng)的布局手段,多態(tài)性就是其功能實(shí)現(xiàn)的方法。多態(tài)性意味著某種概括的動(dòng)作可以由特定的方式來實(shí)現(xiàn),這取決于執(zhí)行該動(dòng)作的對象。多態(tài)性允許以類似的方式處理類體系中類似的對象。根據(jù)特定的任務(wù),一個(gè)應(yīng)用程序被分解成許多對象,多態(tài)性把高級設(shè)計(jì)處理的設(shè)想如新對象的創(chuàng)建、對象在屏幕上的重顯、程序運(yùn)行的其它抽象描述等,留給知道該如何完美的處理它們的對象去實(shí)現(xiàn)。 

  2.2.1.4 通過Delphi實(shí)例了解對象 

   讓我們結(jié)合Delphi的實(shí)例討論對象的概念:

   當(dāng)您要建立一個(gè)新工程時(shí),Delphi 將顯示一個(gè)窗體作為設(shè)計(jì)的基礎(chǔ)。在程序編輯器中,Delphi將這個(gè)窗體說明為一個(gè)新的對象類型,并同時(shí)在與窗體相關(guān)聯(lián)的庫單元中生成了創(chuàng)建這個(gè)新窗體對象的程序代碼。 

  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; {說明一個(gè)窗體變量} 

  implementation 

  {$R *.DFM}  

  end. 

   新的窗體類型是TForm1,它是從TForm繼承下來的一個(gè)對象。它具有對象的特征:含有域或方法。由于您未給窗體加入任何部件,所以它只有從TForm類中繼承的域和方法,在窗體對象的類型說明中,您是看不到任何域、方法的說明的。Form1稱為TForm1類型的實(shí)例(instance)。您可以說明多個(gè)對象類型的實(shí)例,例如在多文檔界面(MDI)中管理多個(gè)子窗口時(shí)就要進(jìn)行這樣的說明。每一個(gè)實(shí)例都有自己的說明,但所有的實(shí)例卻共用相同的代碼。

   假設(shè)您向窗體中加入了一個(gè)按鈕部件,并對這個(gè)按鈕建立了一個(gè)onClick事件處理過程。再查看Unit1的源程序,會(huì)發(fā)現(xiàn)TForm1的類型說明部分如下:

  type

  TForm1 = class(TForm)

  Button1: TButton;

  procedure Button1Click(Sender: TObject);

  private

  { Private declarations }

  public

  { Public declarations }

  end; 

   現(xiàn)在TForm1對象有了一個(gè)名為Button1的域:它是您在窗體中加入的按鈕。TButton是一個(gè)對象類型,Button1是Tbutton的一個(gè)實(shí)例。它被TForm1對象所包含,作為它的數(shù)據(jù)域。每當(dāng)您在窗體中加入一個(gè)部件時(shí),部件的名稱就會(huì)作為TFom1的域加入到類型說明中來。在Delphi中,您所編寫的事件處理過程都是窗體對象的方法。每當(dāng)您建立一個(gè)事件處理過程,就會(huì)在窗體的對象類型中說明一個(gè)方法。

  當(dāng)您使用Object Inspector來改變對象(部件)的名稱時(shí),這個(gè)名稱的改變會(huì)反映到程序中。例如,在Object Inspector中將Form1的Name屬性命名為ColorBox,您會(huì)發(fā)現(xiàn)在類型說明部分,會(huì)將前文的TForm1改為: 

  TColorBox=class(TForm); 

   并且在變量說明部分,會(huì)說明ColorBox為TColorBox類型的變量,由Delphi自動(dòng)產(chǎn)生的事件處理過程名稱會(huì)自動(dòng)改為TColorBox.Button1Click;但您自行編寫的實(shí)現(xiàn)部分的代碼卻不會(huì)被自動(dòng)修改。因此,如果您在改變Name屬性前編寫了程序,則您必須將事件處理過程中的對象名稱進(jìn)行改變。所以,原先的Form1.Color要改為ColorBox.Color。 

  2.2.2 從一個(gè)對象中繼承數(shù)據(jù)和方法 

   前面的TForm1類型是很簡單的,因?yàn)樗缓杏駼utton1和方法Button1Click。但是在這個(gè)窗體上,您可以改變窗體的大小、加入或刪除窗體的最大最小化按鈕,或設(shè)置這個(gè)窗體為MDI界面。對于一個(gè)只包含一個(gè)域和方法的對象來講,您并沒有看到顯式的支持程序。在窗體上單擊鼠標(biāo)或用Object Inspector的上端的Object Selector選中Form1對象,按動(dòng)F1查閱它的在線幫助,您會(huì)在Properties和Method中找到它的繼承到的全部屬性和方法。這些是在TForm類型中說明的,TForm1是TForm的子類,直接繼承了它所有的域、方法、屬性和事件。例如窗體的顏色屬性Color就是在TForm中說明的。當(dāng)您在工程中加入一個(gè)新窗體時(shí),就等于加入了一個(gè)基本模型。通過不斷地在窗體中加入部件,您就自行定義了一個(gè)新的窗體。要自定義任何對象,您都將從已經(jīng)存在的對象中繼承域和方法,建立一個(gè)該種對象的子類。例如對象TForm1就被說明為對象TForm的子類,擁有一個(gè)窗體部件的基本屬性或方法。只有當(dāng)您在窗體中加入了部件或編寫了事件處理過程時(shí),F(xiàn)orm1才成為您自己的類型。

   一個(gè)比較特殊的對象是從一個(gè)范圍較廣或較一般的對象中繼承下來的,它是這個(gè)特別對象的祖先,這個(gè)對象則稱為祖先的后代。一個(gè)對象只能有一個(gè)直接的祖先,但是它可以有許多后代。TForm是TForm1類型的祖先,所有的窗體對象都是TForm的后代。

   用F1查閱窗體的在線幫助時(shí),您會(huì)發(fā)現(xiàn)TForm被稱為component(部件)。這是因?yàn)樗械牟考际菍ο蟆?

   在這個(gè)結(jié)構(gòu)中所有的部件都是對象。部件類型TComponent從TObject類型中繼承數(shù)據(jù)和程序代碼,并具有額外的可以用作特殊用途的屬性、方法、事件,所以部件可以直接和用戶打交道,記錄它的狀態(tài)并存貯到文件中等等。控制類型TControl從TComponent中繼承而來,又增加了新的功能,如它可以顯示一個(gè)對象。在上圖中,雖然TCheckBox不是直接由TObject繼承來的,但是它仍然有任何對象所擁有的屬性,因?yàn)樵赩CL結(jié)構(gòu)中,TCheckBox終究還是從TObject 中繼承了所有功能的特殊對象,但它還有些自行定義的獨(dú)到的功能,如可以選擇記錄狀態(tài)等。 

  2.2.3 對象的范圍 

  2.2.3.1 關(guān)于對象的范圍 

   一個(gè)對象的范圍決定了它的數(shù)據(jù)域、屬性值、方法的活動(dòng)范圍和訪問范圍。在一個(gè)對象的說明部分說明的數(shù)據(jù)域、屬性值、方法都只是在這個(gè)對象的范圍中,而且只有這個(gè)對象和它的后代才能擁有它們。雖然這些方法的實(shí)際程序代碼可能是在這個(gè)對象之外的程序庫單元中,但這些方法仍然在這個(gè)對象的范圍內(nèi),因?yàn)樗鼈兪窃谶@個(gè)對象的說明部分中說明的。

   當(dāng)您在一個(gè)對象的事件處理過程中編寫程序代碼來訪問這個(gè)對象的屬性值、方法或域時(shí),您不需要在這些標(biāo)識符之前加上這個(gè)對象變量的名稱。例如,如果您在一個(gè)新窗體上加入一個(gè)按鈕和一個(gè)編輯框,并為這個(gè)按鈕編寫onClick事件處理過程: 

  procedure TForm1.Button1Click(Sender:Tobject);

  begin

  Color :=clFuchsia;

  Edit1.Color :=clLime;

  end;  

   其中的第一行語句是為整個(gè)窗體Form1著色。您也可以編寫如下:

  

  Form1.Color :=clFuchsia; 

   但您可以不必加上Form1.,因?yàn)锽utton1Click方法是在TForm1對象的范圍里。當(dāng)您在一個(gè)對象的范圍中時(shí),您可以省略所有這個(gè)對象中的屬性值、方法、域之前的對象標(biāo)識符。但是當(dāng)您編寫第二個(gè)語句改變編輯框的底色時(shí),因?yàn)榇藭r(shí)您想訪問的是TEdit1對象的Color屬性,而不是TForm1類型的,所以您需要通過在屬性前面加上編輯框的名稱來指明Color屬性值的范圍。如果不指明,Delphi會(huì)象第一個(gè)語句一樣,將窗體的顏色變成綠色。因?yàn)镋dit1部件是在窗體中的,它是窗體的一個(gè)數(shù)據(jù)域,所以您同樣不必指明其從屬關(guān)系。

   如果Edit1是在其他窗體中,那么您需要在編輯框之前加上這個(gè)船體對象的名稱了。例如,如果Edit1是在Form2之中,那它是Form2說明的一個(gè)數(shù)據(jù)域,并位于Form2的范圍中,那么您需要將第二句改為: 

  Form2.Edit1.Color := clLime; 

  而且需要把Unit2加入U(xiǎn)nit1的uses子句中。

   一個(gè)對象的范圍擴(kuò)展到這個(gè)對象的所有后代。TForm的所有屬性值、方法和事件都在TForm1的范圍中,因?yàn)門Form1是TForm的后代。您的應(yīng)用程序不能說明和祖先的數(shù)據(jù)域重名的類型、變量等。如果Delphi顯示了一個(gè)標(biāo)識符被重復(fù)定義的信息,就有可能是一個(gè)數(shù)據(jù)域和其祖先對象(例如TForm)的一個(gè)數(shù)據(jù)域有了相同的名稱。可以嘗試改變這個(gè)標(biāo)識符的名稱。 

  2.2.3.2 重載一個(gè)方法 

   您可以重載(Override)一個(gè)方法。通過在后代對象中說明一個(gè)與祖先對象重名的方法,就可以重載一個(gè)方法。如果想使這個(gè)方法在后代對象中作和祖先對象中一樣的工作但是使用不同的方式時(shí),您就可以重載這個(gè)方法。Delphi不推薦您經(jīng)常重載方法,除非您想建立一個(gè)新的部件。重載一個(gè)方法,Delphi編譯器不會(huì)給出錯(cuò)誤或警告提示信息。

  2.2.4 對象公有域和私有域的說明 

   當(dāng)使用Delphi的環(huán)境來建立應(yīng)用程序時(shí),您可以在一個(gè)TForm的后代對象中加入數(shù)據(jù)域和方法,也可以通過直接修改對象類型說明的方法來為一個(gè)對象加上域和方法,而不是把一個(gè)部件加入窗體或事件處理過程中。

   您可以在對象的Public或Private部分加入新的數(shù)據(jù)域和方法。Public和Private是Object Pascal的保留字。當(dāng)您在工程中加入新的窗體時(shí),Delphi開始建立這個(gè)新窗體對象。每一個(gè)新的對象都包含public和private指示,以便您在代碼中加入數(shù)據(jù)域和方法。在public部分中說明其它庫單元中對象的方法也可以訪問的數(shù)據(jù)域或方法。在private部分的說明有訪問的限制。如果您在private中說明域和方法,那么它在說明這個(gè)對象的庫單元外是不透明的,而且不能被訪問。private中可以說明只能被本庫單元方法訪問的數(shù)據(jù)域和本庫單元對象訪問的方法。過程或函數(shù)的程序代碼可以放在庫單元的implementation部分。 

[1] [2]  下一頁

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 南陵县| 宜昌市| 黑龙江省| 稷山县| 西盟| 社旗县| 祥云县| 肃南| 和静县| 顺义区| 刚察县| 自贡市| 河池市| 上虞市| 霍林郭勒市| 红安县| 西丰县| 巫山县| 高尔夫| 河源市| 建宁县| 油尖旺区| 宜黄县| 岗巴县| 江山市| 钦州市| 安化县| 莎车县| 桦甸市| 任丘市| 克拉玛依市| 鲁山县| 措勤县| 北碚区| 阳江市| 梁山县| 连城县| 龙口市| 南投县| 广饶县| 宣化县|