预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共35页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

9-1物件導向的程式設計非程序導向程序導向物件導向每一類別都有屬於自己的方法,也就是我們已將眾多的函式依照類別存放,如此可解決目前日益龐大的函式命名與函式取用的困擾,就如同自然界是以界、門、綱、目、科、屬及種等作為物種的分類。例如,程序導向的時代,關於開門的函式即有電梯開門、汽車開門、房子開門等數種開門的方法,如此徒增命名與取 用的困擾。但在物件導向的領域裏,開門這個方法是附在相對應的類別裏。例如,於電梯類別裏有電梯的開門,汽車類別有汽車的開門,房子類別裏有房子的開門方法,大家的方法名稱都叫“開門”,撰寫程式時也是電梯.開門,汽車.開門,或是房子.開門(物件與方法、屬性之間以點(.)運算子連結),如此既可簡化程式的撰寫,亦可減少程式出錯的機會。但是,在程序導向的領域裏,所有的函式都集中,就有可能用錯方法。例如,用開電梯門的方法去開汽車的門,結果當然是錯的。 類別的變數即稱為物件,物件亦稱為類別的實現或類別的樣例化(Instance)。也就是說,類別就像是一個酒瓶或機器人的模型,在這些模型裏面已設計好他所具備的屬性與方法,當您需要酒瓶或機器人時,只要依照這些模型樣例一個或多個酒瓶或機器人即可。 其次,物件導向亦提出了三個觀念,分別是物件的封裝(Encapsulation)、繼承(Inheritance)及多型(Polymorphism),以解決程序導向的不足。封裝繼承多型9-2 物件的設計以下則是筆者以類別重作範例4-2a的結果,它的類別名稱是TPass,繼承自TObject。 type TPass=class(Tobject) private Fa:integer; Fb:String; public proceduredispose(); propertydata:integerwriteFa; propertyresult:StringreadFb; end; TPass TPass在此是類別名稱。依Delphi慣例,類別名稱均以大寫T開頭。 class class是一個保留字,用於指定類別的繼承者。 TObject TObject是Delphi的類別中,最原始的類別,亦是Delphi預設的類別,所以此處的TObject亦可以省略,如下: TPass=class private private和public是Delphi類別或員的封裝等級,關於類別成員的封裝等級,請看9-3節 Fa、Fb Fa、Fb是TPass內部的欄位成員,其封裝等級是private,表示僅供類別內部存取。其次,依Delphi的慣例,欄位成員通常以大寫F開頭。 procedure procedure是保留字,接在procedure後面的識別字,即為類別的方法成員,所以dispose即是TPass的方法,其封裝等級是public,表示可供類別外部存取。 property property是保留字,接在property後面的識別字,即為類別的屬性。屬性的用途是類別與外界溝通的窗口。也就是透過屬性的設定,即可設定類別的欄位成員。本例的 propertydata:integerwriteFa; 即表示Fa是唯寫的屬性,類別內部可透屬性data去外界讀取資料,並寫入欄位Fa。另外本例 propertyresult:StringreadFb; 則表示result屬性是唯讀的,類別外部可透過result屬性讀取類別內的Fb欄位值,再輸出。又例如 propertyresult:StringreadFbwriteFb; 則屬性result是可讀可寫的屬性。 方法的實作物件的樣例成員的存取範例9-2a範例9-2b範例9-2c範例9-2d9-3 物件的進階觀念類別的繼承範例9-3a 方法的種類範例9-3b抽象(Abstract)類別範例9-3c多載(Overloading)範例9-3d建構子(Contrcutors)範例9-3e解構子(Destructors_)9-4 錯誤處理類別範例9-4araise範例9-4b習題