版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Delphi教程教程第第14章章 面向對象程序設計面向對象程序設計面向過程的程序設計著眼于系統(tǒng)實現的功能,采用自頂向下,逐步細化的方法進行功能分解直至建立系統(tǒng)的功能結構和相應的程序模塊。 類(Class)是具有相同屬性和操作的對象的集合。類是進行數據抽象的基本單位。每一個對象都是類的一個實例(Instance)。所謂繼承是父類(Base Class)(基類)可以派生自己的子類(Derived Class)(派生類),子類除了繼承父類的屬性和操作之外,還具有自己獨特的屬性和操作。 通信是實現各個不同對象之間消息傳遞的方法。所謂消息實際上是一個類的對象要求另一個類的對象執(zhí)行操作的指令。14.1對象
2、的基本概念 14.1.1 對象的特性一個對象,其最突出的特征有三個:封裝性、繼承性、多態(tài)性。1對象的封裝性對象的封裝特性是把數據和代碼結合在同一個結構中。將對象的數據域封閉在對象的內部,使得外部程序必須而且只能使用正確的方法才能對要讀寫的數據域進行訪問。 2對象的繼承性對象的繼承性是指把一個新的對象定義成為已存在對象的后代。新對象繼承了舊類的一切東西。 3對象的多態(tài)性多態(tài)性是在對象體系中把設想和實現分開的手段。多態(tài)的含義是指某一個標識符表示多種類型的變量,或者標識不同意義的函數或過程。 14.1.2 從一個對象中繼承數據和方法在窗體上單擊鼠標或用Object Inspector的上端的Obje
3、ct Selector選中Form1對象,按鍵查閱他的在線幫助,會在Properties和Metehod中找到它的繼承到的全部屬性和方法。 當在工程中加入一個新窗體時,就等于加入了一個基本模型。通過不斷地在窗體中加入部件,就自行定義了一個新的窗體。要自定義任何對象,都將從已經存在的對象中繼承域和方法,建立一個該種對象的子類。 14.1.3 對象的范圍一個對象的范圍決定了它的數據域、屬性值、方法的活動范圍和訪問范圍。在一個對象的聲明部分聲明的數據域、屬性值、方法都只是在這個對象的范圍中,而且只有這個對象和它的后代才能又擁有它們。雖然這些方法的實際程序代碼可能是在這個對象之外的程序庫單元中,但這些
4、方法仍然在這個對象的范圍內,因為它們是在這個對象的聲明部分中的聲明的。 當在一個對象的事件處理過程中編寫程序代碼來訪問這個對象的屬性值、方法或域時,不需要在這些標識符之前加上這個對象變量的名稱。 14.1.4 對象共有域和私有域的聲明可以在對象的Public或Private部分加入新的數據域和方法。Public和Private是Object Pascal的保留字。 在Pbulic部分中聲明其他庫單元中對象的方法也可以訪問的數據域或方法。在Private部分的聲明有訪問的限制。如果在Private中聲明域和方法,那么它在聲明這個對象的庫單元外是不透明的,而且不能被訪問。Private中可以聲明只
5、能被本可單元方法訪問的數據域和本庫單元對象訪問的方法。 14.1.5訪問對象的域和方法當想要改變一個窗體對象的一個域的某個屬性,或是調用它的一個方法是,必須在這個屬性名稱或調用方法之前加上這個對象的名稱。同樣想改變一個窗體對象中一個對象域的多個屬性或調用多個方法時,使用with語句可以簡化程序。With語句在對象中可和在記錄匯總一樣使用。14.1.6對象變量的賦值如果兩個變量類型相同或兼容,可以把其中一個對象變量賦給另一個對象變量。只要賦值的對象變量是被賦值的對象變量的祖先 類型,就可以將一個對象變量賦給另一個對象變量。 14.1.7建立非可視化對象1聲明一個非可視化對象可以用如下的方法建立一
6、個自己的TWorker非可視化對象Type TWorker=Class(TObject) Title:=String20;Name:= String20; HourlyPayRate:real; Function CalculatePayAmount:real;end;2用Create方法建立對象實例TWorker只是一個對象類型除非通過一個構造函數的調用從而被實例取代或創(chuàng)建,否則一個對象并不存儲在內存中。構造函數是一個方法,它為新對象配置內存并且指向這個新的對象。這個新的對象也被稱為這個對象類型的一個實例。建立一個對象的實例,需要調用Create方法,然后構造函數把這個實例賦給一個變量。如果
7、想聲明一個TWorker類型的實例,在訪問這個對象的任何域之前,的程序代碼必須調用Create。Worker:= Tworker.Create;3撤銷對象當使用完對象后,應該及時撤銷它,以便把這個對象占用的內存釋放出來。可以通過調用一個注銷方法來撤銷的對象,它會釋放分配給這個對象的內存。Delphi的注銷方法有兩個:Destroy和Free。Delphi建議使用Free,因為它比Destroy更為安全,同時調用Free會生成效率更高的代碼??梢杂孟铝械恼Z句釋放用完的Worker對象:Worker.Free;14.2 類類型和對象類類型和對象對象是類的實例(instance),即由類定義的數據類
8、型的變量。對象是實體,當程序運行時,對象為它們的內部表達占用一些內存。對象與類的關系就像變量與類型的關系。在Object Pascal中,聲明類數據類型使用保留字Class。類類型聲明的一般格式為:Type=Class()End;有關類類型的兒點聲明:(1)類名可以是任何合法的標識符,在Delphi中,類類型的標識符一般以T打頭 。(2)Class是保留字,表示聲明類型是類類型。(3)Class后面的父類名表示當前聲明的類是從父類名制定的類中派生出來的,聲明的類稱為父類的子類或直接后代,該子類將繼承父類及所有祖先的所有成員。(4)“父類名”是可以省略的。 (5)類類型聲明中可以沒有成員列表,如
9、果需要,類類型可以有3類成員,分別是Field(字段)、Method(方法)、property(特性)。 (6)在類的聲明中如果含有字段成員,那么字段成員的聲明必需優(yōu)先于特性和方法成員的聲明。(7)跟其他數據類型不同的是,類類型的聲明只能出現在Program單元或UNIT單元最外層作用域的類型定義部分,而不能定義在變量聲明部分或一個過程或函數內。因此,類類型的作用域總是全局的。(8)一旦聲明了類類型,其使用同其他數據類型一樣,可以創(chuàng)建這個類的多個實例(對象),所有創(chuàng)建的對象將共享該類的成員。14.3 類的方法14.3.1 方法的聲明聲明一個方法的格式同盧明一個過程或函數的語法相似,過程方法的聲
10、明格式如下:Procedure (方法名方法名)();函數方法聲明的一般格式為:Function (方法名方法名)():;其中,方法名可以足任何合法的標識符,參數表是可選的,如果沒有參數可省略括號。方法可分為4種類型,分別是構造、析構、過程和函數,它們分別用Constuctor、Destructor、Procedure、Function這4個符號來聲明。在定義方法時,可以直接使用類中已聲明的字段,不需要作為參數來傳遞,訪問這些字 段時也不需要引用限定符。14.3.2構造和析構 1構造構造的聲明同過程方法或函數方法類似,只是保留字不同。其聲明格式為:Constructor();其中,構造名可以是
11、任何合法的標識符,不過按照Delphi的習慣,構造名常使用Create。構造用于建立對象,并對對象進行初始化。通常,當調用構造時,構造類似一個函數,返回一個新分配的并初始化了的類類型實例。構造跟一般方法不同的是,一般方法只能在對象實例中引用,而構造既可以由一個對象實例引用,也可以直接由類來引用。 2析構析構的聲明格式為:Destructor();其中,析構名可以是任何合法的標識符,按照習慣,析構名常使用Destroy。析構的作用跟構造正相反,它用于刪除對象并指定刪除對象時的動作,通常是釋放對象所占用的堆和先前占用的其他資源。構造的定義中,第一句通常是調用祖先類的構造,而析構正相反,通常是最后一
12、句調用祖先類的析構 。14.3.3 方法指令字一個類中的方法可以通過在聲明中使用指令字指定成靜態(tài)、動態(tài)、虛擬和消息方法。方法按指令字分可分為三種,分別是虛擬、動態(tài)、消息方法,它們分別是方法名后用Virtual,Dynamic,Message保留字指定。也可以不加方法指令字,這種情況下聲明的方法是靜態(tài)的(static)。一個方法也可以像函數那樣,指定參數的傳遞的方式,也即方法的調用約定。 1靜態(tài)方法靜態(tài)方法類似于通常的過程和函數,編譯器在編譯時就已指定了輸出該方法的對象實例。靜態(tài)方法的主要優(yōu)點是調用的速度快。當從一個類派生一個類時,靜態(tài)方法不會改變。如果你定義一個包含靜態(tài)方法的類,然后派生一個新
13、類,則被派生的類在同一地址共享基類的靜態(tài)方法,也就是你不能重載靜態(tài)方法。如果你在派生類定義一個與祖先類相同名的靜態(tài)方法,派生類的靜態(tài)方法只是替換祖先類的靜態(tài)方法。2虛擬方法虛擬方法比靜態(tài)方法更靈活、更復雜。虛擬方法的地址不是在編譯時確定的,而是程序在運行期根據調剛這個虛擬方法的對象實例來決定的,這種方法又為滯后聯編。虛擬方法在對象虛擬方法表(VMT表)中占有一個索引號。VMT表保存類類型的所有虛擬方法的地址。當你從一個類派生一個新類時,派生類創(chuàng)建它自己的VMT,該VMT包括了祖先類的VMT,同時加上自己定義的虛擬方法的地址。虛擬方法可以在派生類中重新被定義,但祖先類中仍然可以被調用。3動態(tài)方法
14、當把一個基類中的某個方法聲明為動態(tài)方法時,派生類可以重載它。,被聲明為動態(tài)的方法不是放在類的虛擬方法表中,而是由編譯器給它一個索引號(一般不直接用到這個索引),當調用動態(tài)方法時,由索引號決定調用方法的哪個來具體實現。虛擬方法和動態(tài)方法幾乎完全相同,只不過虛擬方法在調用速度上較快,但類型對象,占用空間大,而動態(tài)方法在凋用速度上稍慢而對象占用空間小。如果一個方法經常需要調用,或該方法的執(zhí)行時間要求短,則在虛擬和動態(tài)之間還是選擇使用虛擬為好。4消息句柄方法在方法定義時加上一個message指令字,就可以定義一個消息句柄方法。消息句柄方法主要用于響應并處理某個特定的事件。 14.3.4 抽象方法所謂抽
15、象方法,首先必須是虛擬的或動態(tài)的,其次它只有聲明而沒有定義,只能在派 生類中定義它(重載)。因此定義一個抽象方法,只是定義它的接口,而不定義底層的操作。它只是正當前類類型的聲明中進行聲明,但一般不在當前類中實現,它的實現會后置到子類進行。抽象方法聲明的般格式為:Procedure ();Virtual/dyname;abstract;Function 方法名方法名)();Virtual/dyname;abstract; 14.3.5 重載方法與重定義方法1重載方法在子類中重載一個滯后聯編的對象方法,需要使用保留字override。只有在祖先類中 定義對象方法為虛擬后,才能進行重載。否則,對于靜
16、態(tài)對象方法,沒有辦法激活滯后聯編,只有改變祖先類的代碼。為重新定義靜態(tài)對象方法,用戶只需向子類添加該對象方法,它的參數可以與原來方法的參數相同或不同,而不需要其他特殊的標志。重載虛擬方法,必須指定相同的參數并使用保留字override。 重載對象方法有兩種典型的方法。一種是用新版本替代祖先類的方法,另一種是向現有方法添加代碼。 2重定義方法對象可以有多個同名的方法,這些方法被稱為重新定義的方法(Overload)。14.4 類的特性14.4.1 聲明特性要聲明特性,必須聲明三件事情:特性名、特性的數據類型、讀寫特性值的方法。Object Pascal使用保留字Property聲明特性,其聲明的
17、一般格式為:Property :read/ Write/;特性的聲明由保留字Property、特性名標識符,可選的特性接口(PropertyInterface)和特性限定符(Property Specifier)構成。特性接口指定特性的數據類型,參數和索引號。 14.4.2 特性限定符特性限定符可以有4類,分別是Read,write,Stored和Default。其中Read和Write限定符用于指定訪問特性的方法或字段。1Read限定符Read限定符的語法格式為:Read /Read限定符用于指定讀取特性的方法或字段,通常是一個不帶參數的函數,返回的類型就是特性的類型,并且函數名通常以“Ge
18、t”加特性名組成,如一個讀取Caption特性的方法通常命名為GetCaption。2Wrire限定符Write限定符的語法格式為:Write /Write限定符用于指定修改特性的方法,通常是一個與特性同類型的過程,這個參數用于傳遞特性新的值,并且過程名通常以“Set”加特性名組成 。在Write限定符指定的方法的定義中,通常首先是把傳遞過來的值跟原先的值比較,如果兩者不同,就把傳遞過來的特性值保存在一個字段中,然后再對特性的修改作出相應的反應。這樣當下次讀取特性值時,讀取的總是最新的值。如果兩者相同,那就什么也不需要干。3Stored限定符Stored限定符的語法格式為:Storetrue
19、true/falsedefaultnodefaultStored限定符用于指定一個布爾表達式,通過這個布爾表達式的值來控制特性的存儲行為 14.4.3 數組特性 所謂數組特性,即特性是個數組,它是由多個同類型的值組成的,其中每個值都有一個索引號,不過跟一般的數組不同的是,一般的數組是自定義類型,可以把數組作為一個整體參與運算如賦值或傳遞等,而對數組特性來說,一次只能訪問其中的一個元素。 對于數組特性來說,可以使用Read和Write限定符,但Read利Write限定符只能指定方法而不能是字段,并且Object Pascal規(guī)定,Read限定符指定的方法必須是一個函數,函數的參數必須在數量和類型
20、上與索引變量一一對應,其返回類型與數組特性的元素類型一致。Write限定符指定的方法必須是一個過程,其參數是索引變量再加上一個常量或數值參數,該參數的類型與數組特性的元素類型一致。訪問數組特性中的元素跟訪問一般數組中的元素一樣,也是用特性名加索引號。14.4.4 特性的重載和重定義所謂特性重載,就是在祖先類中聲明的特性,可以在派生類中重新聲明,包括改變特性的可見性(關于類成員的可見性將在后面詳細介紹),重新指定訪問方法和存儲限定符以及缺省限定符等。最簡單的重載,就是在派生類中使用指令字Property,其一般格式為:Property;類中可以重新定義一個與祖先類具有相同名稱的屬性,重定義相當于
21、聲明了一個新的屬性,該屬性隱藏了從祖先類中繼承的同名屬性。屬性聲明中是否聲明了屬性類型是區(qū)別覆蓋與重定義的唯一途徑。如果后代類中聲明的屬性帶有類型,那就是重定義。重定義一個屬性必需給出完整的定義。不管在后代類中是通過重定義隱藏還是覆蓋祖先類中的屬性,屬性的調用總是靜態(tài)的。14.5 類成員的可見性類成員的可見性面向對象編程的重要特征之一就是類成員可以只有不同的可見性,在Object Pascal中,是通過這么兒個保留字來設置成員的可見性的:Published、Public、Protected、Private、Automated。1Private(私有):在Private部分聲明的成員是私有的,它
22、們只能被同一個類中方法訪問,對于其他類包括它的派生類,Private部分聲明的成員是不可見的,程序員不必知道類實現的細節(jié),只需要關心類的接口部分。 2Public(公有):在Public聲明的成員是公共的,也就是說,它們雖然在某個類中聲明的。但其他類的實例也可以引用,相當于C語言中的外部變量 。3Published:在Published部分聲明的成員,其可見性與在Public部分聲明的成員可見性是一樣的,它們都是公共的,即這些成員可以被其他類的實例引用,Published和Public的區(qū)別在于成員的運行期類型信息不同。一個Published元素或對象方法不但能在運行時,而且能在設計時使用。
23、4Protected(保護):Protected與Private有些類似。在Protected部分聲明的成員是私有的(受保護的),不同的是在Protected部分聲明的成員在它的派生類中可見,并且成為派生類中的私有成員。在Protected部分聲明的成員通常是方法,這樣既可以在派生類中訪問這些方法,又不必知道方法實現的細節(jié)。4Automated:C+的程序員可能對這個保留字比較陌生,在Automated部分聲明的成 員類似于在Public部分聲明的成員,它們都是公共的,唯一的區(qū)別在于在Automated部分聲明的方法和特性將生成OLE自動化操作的類型信息。14.6 類類型的兼容性類類型的兼容性一個類類型類與它的任何祖先類型兼容。因此,在程序執(zhí)行時,一個類類型變量既可以引用那個類型本身的實例,也可以引用任何繼承類的實例。14.7 VCL類結構與類結構與Tobject類類 14.7.1 VCL類結構VCL(Visual Component Library)是Delphi提供的一個可視化組件庫。該組件庫是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 飼料銷售員財務制度
- 醫(yī)保慢病門診財務制度
- 破產期間財務制度
- 運營財務制度
- 單位辦公財務制度
- 關于商標法第五次修訂中說明商標使用情況的制度
- 公司項目內審制度
- 地基施工方案實例(3篇)
- 助力大橋施工方案(3篇)
- 公司活動策劃方案心得(3篇)
- 股骨骨折伴發(fā)糖尿病患者護理查房
- 戶口未婚改已婚委托書
- 家具制造廠家授權委托書
- 光化學和光催化反應的應用
- VDA6.3-2016過程審核主要證據清單
- 辦公耗材采購 投標方案(技術方案)
- 2020公務船技術規(guī)則
- 三片罐空罐檢驗作業(yè)指導書
- 四川峨勝水泥集團股份有限公司環(huán)保搬遷3000td熟料新型干法大壩水泥生產線環(huán)境影響評價報告書
- 管道焊接工藝和熱處理課件
- 二年級下冊課文快樂讀書吧-神筆馬良
評論
0/150
提交評論