Delphi物件導向程式設計的20條規則(By Marco Cantu)(rule 1-10) (轉)

amyz發表於2007-08-14
Delphi物件導向程式設計的20條規則(By Marco Cantu)(rule 1-10) (轉)[@more@]

規則一:為每一個類建立一個單元(One Class,One Unit)
  請始終牢記這一點:類的私有(private)和保護(protected)的部分只對於其他單元中的類和過程(procedure)才是隱藏的.因此,如果你想得到有效的封裝性,你應該為每一個類使用一個不同的單元。對於一些簡單的類,比如那些繼承其他類的類,你可以使用一個共享的單元。不過共享同一個單元的類的數目是受到限制的:不要在一個簡單的單元裡放置超過20個複雜的類,雖然Borland公司的VCL程式碼曾經這樣做過。
  如果你使用窗體的時候,會預設的遵循“一個類使用一個單元”的規則,這對於員來說也是十分方便的。當你向你的專案中新增一個沒有窗體的類時,Delphi也會建立一個新的獨立的單元。
 

規則二:為命名(Name Components)
  為每一個窗體和單元給出一個有意義的名字是十分重要的。窗體和單元的名字必須是不同的,不過我趨向於為他們兩者使用相似的名字,如對於關於窗體和單元可以為他們使用AboutFo和About.pas.
  為元件使用帶有描述性的名字同樣十分重要。最常見的命名方式是使用類的小寫字母開頭,再加上元件的功能,如BtnAdd 或者editName。採用這樣的命名方式為元件命名可能會有很多相似的名字,而且也沒有一個最好的名字,到底應該選擇那一個應該依據你的個人愛好而定。
 

規則三:為事件命名(Name Events)
 
對於事件處理方法給出合適的名字更加重要。如果你對於元件給出了一個合適的名字,那麼預設的名字ButtonClick將變成BtnAddClick。雖然從這個名字中我們可以猜到這個事件處理程式的功能,但是我認為使用一個能夠描述該方法的作用的名字,而不是採用Delphi附加的名字是一種更好的方式。例如,BtnAdd按鈕的OnClick事件可以命名成AddToList。這會使得你的程式可讀性更強,特別是當你在這個類的其他方法中這個事件處理程式時,而且這會幫助程式設計師為類似的事件或是不同的元件選用相同的方法。不過我必須宣告,使用動作(Actions)是目前開發重要的程式時我最喜歡的方法。
 

規則四:使用窗體方法(Use Form Methods)
 
窗體都是一些類,因此窗體的程式碼是以方法組織的。你可以向窗體中新增事件處理程式,這些處理程式完成一些特別的功能,而且他們能被其他方法呼叫。除了事件處理方法外,你還可以向窗體新增完成動作的特別定義的方法以及訪問窗體狀態的方法。在窗體中新增一些公共的(Public)方法供其他窗體呼叫要比其他窗體直接操作他的元件要好。
 

規則5:新增窗體構造器(Add Form Constructors)
 
在執行時建立的第二個窗體除了一個預設的構造器(從Tcomponent 類繼承而來)外還會提供其他特殊的構造器。如果你不需要考慮和Delphi4以前的版本的相容性問題,我建議你過載(Overload)Create方法,新增必要的初始化引數。具體程式碼可參見下面的程式碼:

Public
  Constructor Create(Text:string): reintroduce ; overload;
Constructor TformDialog.Create(Text:string);
Begin
  Inherited Create(Application);
  Edit1.Text:=Text;
End;



規則6:避免全域性變數(Avoid Global Variables)
  應該避免使用全域性變數(就是那些在單元的interface 部分定義的變數)。下面將會有一些建議幫助你如何去做。
  如果你需要為窗體額外的資料,你可以向窗體類中新增一些私有資料。這種情況下,每一個窗體例項都會有自己的資料副本。你可以使用單元變數(在單元的implementation部分定義的變數)宣告那些供窗體類的多個例項共享的資料。
如果你需要在不同型別的窗體之間共享資料,你可以把他們定義在主窗體裡來實現共享,或者使用一個全域性變數,使用方法或者是屬性來獲得資料。

規則7:永遠不要在Tform1類中使用Form1(Never Use Form1 in Tform1)
  你應該避免在類的方法中使用一個特定的名稱,換句話說,你不應該在TForm1類的方法中直接使用Form1.如果你確實需要使用當前的物件,你可以使用Self關鍵字。請牢記:大多數時候你都沒有必要直接使用當前物件的方法和資料。
如果你不遵循這條規則,當你為一個窗體類建立多個例項的時候,你會陷入麻煩當中。

規則8:儘量避免在其他的窗體中使用Form1(Sel Use Form1 In Other Forms )
  即使在其他窗體的程式碼中,你也應該儘量避免直接使用全域性變數,如Form1.定義一些區域性變數或者私有域供其他窗體使用會比直接呼叫全域性變數要好。
  例如,程式的主窗體能夠為對話方塊定義一個私有域。很顯然,如果你計劃為一個派生窗體建立多個例項,這條規則將是十分有用。你可以在主窗體的程式碼範圍內保持一份清單,也可以更簡單地使用全域性Sreen物件的窗體陣列。

規則9:移除Form1(Remove Form1)
  事實上,我的建議是在你的程式中移除Delphi自動建立的全域性窗體物件。即使你禁止了窗體的自動新增功能,這也有可能是必要的,因為在Delphi隨後仍然可能新增這樣的窗體。我給你的建議是應該儘量避免使用全域性窗體物件。
  我認為對於Delphi新手而言,移除全域性窗體物件是十分有用的,這樣他們不至於對類和全域性物件兩者的關係感到疑惑。事實上,在全域性窗體物件被移除後,所有與它有關的程式碼都會產生錯誤。

規則10:新增窗體屬性(Add Form Properties)
  正如我已經提到過的,當你需要為你的窗體新增資料時,請新增一個私有域。如果你需要訪問其他類的資料,可以為你的窗體新增屬性。使用這種方法你就能夠改變當前窗體的程式碼和資料(包含在它的介面中)而不必改變其他窗體或類的程式碼。
  你還應該使用屬性或是方法來初始化派生窗體或是對話方塊,或是訪問他們的最終狀態。正如我前文所說的,你應該使用構造器來完成初始化工作


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-956363/,如需轉載,請註明出處,否則將追究法律責任。

相關文章