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

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

規則16:視覺化窗體繼承(Visual FoInheritance)
  如果應用得當,這將是一個強大的工具。根據我的,你所開發的專案越大,越能體現它的價值。在一個複雜的中,你可以使用窗體的不同等級關係來處理一組相關窗體的多型性(polymorphism)。
  視覺化窗體繼承允許你共享多個窗體的一些公共的動作:你可以使用共享的方法,公用的屬性,甚至是事件處理程式,,元件屬性,元件事件處理方法等等。

規則17:限制保護域資料的使用(Limit Protected Data)
 
當建立一些具有不同分級體系的類時,一些程式設計師趨向於主要使用保護域,因為私有資料不能被子類訪問。我不能說這沒有其合理性,但是這肯定是和封裝性不相容和的。保護資料的實現能夠被所有繼承的窗體所共享,而且一旦這些資料的原始定義發生改變,你必須更改所有的相關部分。
  請注意,如果你遵循隱藏元件這樣一條規則(Rule 14),繼承窗體就不可能訪問基類的私有元件。在一個繼承窗體中,類似Edit1.Text:=’’的程式碼就不會被編譯。雖然這是相當的不方便,但是至少在理論上這是值得肯定的事情,而不是否定的。如果你感覺到實現封裝性是最主要,最需要的,就請將這些元件參照放在基類的私有段。
 

規則18:保護域中的訪問方法(Protected Access Methods)
 
在基類中將元件參照放置在私有域中,而為這些元件新增一些訪問來得到他們的屬性,這將是一種更好的方法。如果這些訪問函式僅僅在這些類內部使用而且不是類介面的一部分,你應該在保護域宣告他們。例如Rule 11中描述過的GetText和SetText方法就可以宣告成protected,並且我們可以透過SetText(’’)來編輯文字。
  事實上,當一個方法被映象到一個屬性時,我們可以簡單地採用如下程式碼就可以達到編輯文字地目的:Text:=’’;
 

規則19:保護域中的虛擬方法(Protected Virtual Methods)
 
實現一個靈活的分級制度的另一個關鍵點是定義一些你可以從外部類呼叫的虛擬方法來得到多型性。如果這個方法使用得當,將會很少出現其他公共的方法呼叫保護域中的虛擬方法的情況。這是一個重要的技巧,因為你可以定製派生類的虛擬方法,來修改的動作。
 

規則20:用於屬性的虛擬方法(Virtual Methods For Properties)
 
即使是訪問屬性的方法也能定義成virtual,這樣派生類就能改變屬性的動作而不必重定義他們。雖然這種方法在VCL當中很少使用,但是它確實十分靈活、強大。為了實現這一點,僅僅需要將Rule 11當中的Get 和Set 方法定義成Virtual。基類的程式碼如下所示:

type
 TformDialog = class ( TForm)
   Procedure FormCreate(Sender:T);
 Private
  Edit1:Tedit;
 Protected
  function GetText:String;virtual;
  procedure SetText(const Value:String);virtual;
 public
  constructor Create(Text :String):reintroduce;overload;
  property Text:String read GetText write SetText;
 end;
 

  在繼承窗體中,你可以新增一些額外的動作來過載虛擬方法SetText:
  procedure Tfonherit.SetText(const Value:String);
 begin
  inherited SetText(Value);
  if Value=’’ then
  Button1.Enabled:=False;
  end;

 小結
 
要做到一個好的物件導向程式設計師遠非我在上面提到的這些規則這麼簡單。上面的這20條規則中有一些可能需要足夠的耐性和時間來實現,因此,我也不能強求你能遵循所有的這些規則。但是這些規則應該被合適的運用到你的程式中,而且當你開發的應用程式越大,參與的程式設計師越多,這些規則越重要。不過,即使是一些小程式,始終記住這些規則並在合適的地方使用他們也會對你有所幫助。
  當然,還有很多其他的經驗規則我沒有涉及到,特別是器處理和RTTI問題,因為他們十分的複雜,需要專門的說明。
  我的結論是要遵循我上面列出的規則會付出一定的代價,特別是額外的程式碼,但是這些代價會讓你得到一個更加靈活強壯的程式。希望Delphi的後續版本能夠幫組我們減少這些代價。

 


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

相關文章