閱讀538 返回首頁    go 阿裏雲 go 技術社區[雲棲]


連載:麵向對象葵花寶典:思想、技巧與實踐(4) - 麵向對象是瑞士軍刀還是一把錘子?

為什麼要麵向對象?

可以說,麵向過程和計算機是如影隨形的。從計算機誕生之日起,麵向過程就是占據著主導地位的思想,即使到了現在,麵向過程也是無處不在的,C語言、操作係統、協議棧、驅動係統,都是麵向過程的代表。 


那為什麼還會有麵向對象的誕生並流行呢?當然是麵向過程存在某些不足,如果麵向過程足夠好,誰還費心費力的去搞另外一套呢? 


前麵我們提到,麵向過程是一種機器的思想,我們以流水線作為類比,那麼我們先拋開麵向過程,來看看流水線有什麼不足。 

舉個簡單的流水線例子:啤酒生產流水線。啤酒生產流水線分為“洗瓶”,“灌裝”,“壓蓋”,“殺菌”等幾個階段,這些階段總體上來說對生產一瓶醋是差不多的,但是一條啤酒生產線能夠生產醋麼?應該是不行的,即使行,估計也要換一些東西,但是換了東西後,又不能生產啤酒了。 

麵向過程同樣就有流水線的這個缺點,即:流程和原料相對固定,擴展比較麻煩 


對於工業係統來說,流水線的缺點幾乎可以微不足道,因為工業化講究的是效率,而擴展性卻不是那麼重要,一旦一條生產線建成,至少需要運行幾年,甚至運行十幾年都有。 

而對於軟件係統來說,很難想象一個軟件開發完成後,幾年都不變,大部分的情況是,軟件可能是1年擴展多次,甚至還沒有開發完,客戶新的需求又來了。 


在軟件係統這種環境下,麵向過程顯得就比較吃力了,每次需求的變更,可能都要將流程的每個步驟、原料、中間產品都進行修改,這樣的代價在軟件係統中幾乎是不可接受的,因為每次修改都需要對全係統改動一次,不但工作量上大大增加,同時風險也是大大增加。 


而麵向對象正是為了解決麵向過程的這個缺點兒誕生的,因此麵向對象其實也不是什麼複雜和玄妙的技術,麵向對象思想的核心是“可擴展性”! 

注:中文“可擴展性”對應英文有兩種解釋:extensibility 和 scalability,extensibility指係統需求變化後,能夠比較容易的擴展以支持新需求;scalability指係統訪問壓力增加後,能夠通過簡單的增加更多硬件設備以支撐訪問壓力,又翻譯為“可伸縮性”。 本文的可擴展性是指extensibility。


麵向對象應用範圍

能做什麼?

既然麵向對象思想的核心是“可擴展性”,那麼其適用範圍就顯而易見了:經常變化的地方就是麵向對象應用的地方。 

對於軟件係統來說,常見的可變的主要集中在客戶需求部分,而不變的一般都是屬於計算機係統的基礎。 

因此,操作係統、數據庫、協議(TCP、3GPP等)這些並不適合麵向對象大展身手,因為這些基礎軟件一般都比較穩定(相對穩定,並不是不變)。而對於企業應用、互聯網等應用,需求經常變更,功能不斷擴展,這正是麵向對象大展身手的地方。

 

不能做什麼?

下圖是一個軟件質量屬性的全圖: 

 

大家可以看到,“可擴展性”隻是軟件質量屬性中很小的一部分,其它的屬性都不是麵向對象能夠解決的。 

明白了麵向對象的特點和適用範圍,是應用麵向對象的關鍵,經過前麵的分析,我們知道,麵向對象不是瑞士軍刀,而隻是一個普通的錘子而已千萬不要拿著錘子到處敲!


===============================================
轉載請注明出處:https://blog.csdn.net/yunhua_lee/article/details/17371177
===============================================

最後更新:2017-04-03 12:53:47

  上一篇:go 2013全球十大管理谘詢公司
  下一篇:go SliferMenu詳解