ASP.NET入門隨想之多態、接口與委托
發表于:2007-07-14來源:作者:點擊數:
標簽:
曾幾何時,我們居住的陸地沉睡在海底,大陸也緊密的聯系在一起,千百年過去了七大洲的地殼板塊在緩緩移動,喜馬拉雅山在慢慢增高,世界在變,唯一不變的是變化。 ■ 軟件 開發 的悖論 - 把變化變成計劃 在軟件開發活動的過程中,常被一個悖論所纏繞:不寫碼
曾幾何時,我們居住的陸地沉睡在海底,大陸也緊密的聯系在一起,千百年過去了七大洲的地殼板塊在緩緩移動,喜馬拉雅山在慢慢增高,世界在變,唯一不變的是變化。
■ 軟件
開發的悖論 - 把變化變成計劃
在軟件開發活動的過程中,常被一個悖論所纏繞:不寫碼就搞不清該做什么;搞不清做什么又不知道該如何寫碼。
人的思維是很隨意的東西,不同的人,或同一個人的不同階段,對同一件事情的看法都會有差異,可謂是遠看成嶺側成峰,遠近高低各不同。隨意再加上變化,常常引起項目流產或工期大大拖延。
之所以會有
軟件工程,是因為想盡量挽救我們那白白死去的腦細胞和消逝的人民幣。CIM/ISO官僚,每一個環節都要進行所謂科學管理與評估,
質量差就返工,爭取每一種構造活動只進行一次。難度在于開發活動很難定量計算,所謂評估常就是大家一起到酒桌上拼拼,一些活動初期的錯誤在后續無限放大;商業驅動的
RUP有些瞎子摸象,要求用最短的時間拼出愛因斯坦粗糙的第一張凳子交給用戶,得到確認后在此基礎上不斷循環改造,一直到用戶滿意的第N張為止,需要大量的用戶參與,可是用戶不是軟件工程師,要他們來把握復雜的活動計劃,難為他們??傊畠烧叨加?STRONG>
缺陷,修正錯誤和迭代開發是必然,所以軟件架構設計伊始就要考慮適應
需求變化,力將變化帶來的影響減少到最小。 OO開發范式大致為:劃分對象→抽象類→將類組織成為層次化結構(繼承和合成) →用類與實例進行設計和實現幾個階段。在這個過程,合理使用OO語言的一些特性將影響軟件對需求變化的適應力,其使用熟練度往往成為評價軟件開發人員的標桿。
■ 盡可能遠離switch - 多態與抽象類
OO思想的基礎在于把具備狀態和方法的對象看作系統組成的基本粒子,用粒子之間的相互作用(或通訊)來描述系統的行為。通常方法在在某個類的作用域中定義方法接口和實現,并用于修改類的狀態,如:泰坦尼克.移動(方向),這時方法是類的配角,為類服務,即類的方法。
類的方法可能會有多種形態,只要簽名(返回值和參數列表)不同,我們可以通過方法重載來達到概念(方法名)統一,如:泰坦尼克.移動(方向)與泰坦尼克.移動(方向,水流),這兩種狀況的實現不一樣,但作為類的使用者概念而言,都是泰坦尼克在移動。而在面向過程時代,方法的多態往往是由switch語句來負責處理。
結構化語言初行之時,非結構化語言被猛烈攻擊的焦點居然集中在一條語句--goto身上,說它破壞了程序的組織結構,仿佛它就是萬惡之源;與之類似的是,十幾年后OO語言風行之始,人們同樣找到一條語句大肆抨擊,稱它為僵化的毒藥,它就是switch語句。switch語句是典型的結構化編程思想,眾多模塊的公共屬性被映射到標志變量值域上的一點,簡單地排列在一塊,如下例:
clearcase/" target="_blank" >cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
switch (船類型){ case "商船" 商船的移動計算方法; Break; case "戰船" 戰船的移動計算方法; Break; } |
上例中,switch語句的問題在于它謀殺了眾多船類移動計算方法之間的結構本質,缺乏對相似方法應有的抽象。后果是隨處可見它那臃腫的身影。一旦需求變動,我們就不得不四處搜尋,一一修正。
在這里移動方法實際上是船類系的公共方法。作為類系的使用者,他必然希望象重載一樣做到概念(方法名)統一,而通過方法的簽名來區分是商船還是戰船在移動,所以我們調整如下:
原文轉自:http://www.kjueaiud.com