1. 程式人生 > >何謂"自頂向下",何謂"自底向上"

何謂"自頂向下",何謂"自底向上"

相信每一個coder都聽說過“自頂向下”以及“自底向上”這兩個名詞。
我也是很早就聽說過這兩個名詞,感覺是”不明覺厲”。

有一天,我打電話給一個做C語言開發的朋友說,我說我一直在做Java,想學一點C,問他有什麼好的建議。
他說,他也有類似的想法,他說他一直在做C,想有機會學一點Java.然後他補充一句:他這是自底向上的學習,而我這叫自頂向下的學習。
我當時一愣,不愧是老司機:原來這兩個詞表達的是學習過程相關的意思。

  • 直到不久前,我才知道,所謂的”自頂向下”與”自底向上”,指的是程式構造的兩種不同的方式。換個說法,也可以說是“由粗到細”及“由細到粗”。

  • 怎麼理解呢?舉個栗子:

    假設現在有一個需求是這樣的:將C盤裡面的視訊檔案全部拷貝到D:\video\目錄下。

那麼,由粗到細(自頂向下)的構造程式的方式是:先從大的方向考慮,完成這個程式需要那些步驟,比如:
- 先判斷有沒有C盤
- 再判斷C盤裡面有沒有視訊檔案
- 判斷有沒有D盤
- 判斷D盤是否還有儲存空間
- 拷貝C盤的視訊到D盤
- 結束
先不考慮每個方法的具體實現,而是考慮一下,需要那些步驟,等整體步驟把握好了之後,再考慮這些步驟具體該怎麼實現。比如:如何判斷有沒有C盤,如何判斷C盤裡面有沒有視訊檔案等。
這樣子,先搭建骨架,等骨架搭建好了之後,再去填充具體內容。這種方式,就被稱為由粗到細或者說自頂向下的構造方式。

而與之相反,我們也可以先實現細節:比如:如果進行檔案拷貝,如何判斷有沒有視訊檔案 。等這些具體的細節完成之後,再去搭建骨架,然後完成整個程式。這種,先完成細節功能,再組裝到整體骨架中的方式就是由細到粗或者說是自底向上的構造程式的方式

  • 並不討論哪種方式更好。在實際開發過程中,往往兩種方式都會被運用到。