關於軟件設計

 軟件設計沒什麼太神祕有東西,只要用心體會,其實一切都很自然。軟件的設計之“道”,不在於設計的華麗、精巧,而在於其樸實、自然,以達到“以無招勝有招”的境界。
  一、軟件設計的層次
  可以分爲以下幾個層次來進行理解:
  1、目的:重用性、擴展性。
  這是最高的層次,是應對軟件危機的需要。

  2、原則:低耦合、高聚合。
  各種軟件設計的原則,如依賴倒置原則、單一職則原則、面向接口等,以及各種設計模式,其根本的目的其實只是爲了降低耦合這麼簡單。因爲只有低耦合才能更好的適應變化,更好的重用和擴展。

  3、實現方法:合理運用設計模式、降低耦合。
  設計模式只是用來“封裝變化、降低耦合”的工具而已。它是面向對象設計時代的產物,其本質就是充分運用面向對象的三個特性,即:封裝、繼承和多態,進行靈活的組合運用。

  二、關於耦合
  1、耦合的粒度
  耦合無論如何也是不可避免的。當我們實現接口、繼承父類的時候,就會不可避免的產生耦合。耦合是有不同粒度的,我們解耦到什麼粒度爲止,我認爲應以模 塊的重用粒度爲準。儘量解除重用模塊或對象之間的耦合。而重用模塊之內的耦合,應屬於聚合的範疇,所以不要盲目的去解耦,否則就陷入了誤區。

  2、解耦的原理
  怎樣才能解耦呢,或者說爲什麼各種設計模式能達到解耦的目的呢?我覺得有以下幾個思路:
  (1)將具體的東西抽象處理
  (2)將分散的東西集中處理
  而面向對象中的接口、繼承正爲我們提供了這樣的一種機制。通過訪問接口或基類或抽象類,而不是具體的實現類,從而與具體的實現類達到了解耦的目的。我們還可以設計一些控制類,像潤滑劑一樣,協調各實現類之間的訪問,也可以達到耦的目的。
事實上,各種設計模式的基本思想也就是這樣。創建型模式是爲了解除創建對象時產生的耦合,實際上是解除對類稱名的依賴,而結構型和行爲型是爲了解除對象屬性或方法的直接調用。不管什麼設計模式,都是將對具體實現類的訪問提升爲對接口、基類或用於協調的控制類的訪問。

  三、關於接口
  這一節更具體,談一談接口,因爲使用接口是軟件設計的重要手段,但已經不屬於“道”了~
  1、接口與繼承
  接口描述的是對象某一個方面行爲特徵。使用接口與使用繼承關係各有優缺點,使用子類繼承可以繼承父類的功能,體現了重用的精神。而接品更加靈活,因爲它解除了子類與父類之間的高度耦合,它體現在靈活擴展的精神。

  2、接口與純虛類
  理論上接口可以由純虛基類實現類似的功能,那爲什麼還我們不去掉接口的概念,而直接使用虛類呢?
  接口存在的理由就是它更加靈活,關係簡單,易於理解。比如一個類可以實現十幾個甚至幾十個接口,但一般開發工具只支持單繼承(由於多繼承太容易導致混 亂和衝突),如果要繼承十幾層,系統結構想必會無法理解了,我以爲這是接口存在的最重要的原因。如果接口和虛類繼承結合使用,可以產生強大的威力,這也是 許多設計模式的“殺手鐗”。
 
發佈了28 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章