更多來自:http://imcc.blogbus.com
? 把程序裝進(jìn)箱子:用函數(shù)封裝程序功能
在完成豪華的工資統(tǒng)計(jì)程序之后,我們信心倍增,開始向C++世界的更深遠(yuǎn)處探索。
現(xiàn)在,可以使用各種數(shù)據(jù)類型和程序流程控制結(jié)構(gòu)來編寫完整的程序了。但是,隨著要處理的問題越來越復(fù)雜,程序的代碼也越來越復(fù)雜,主函數(shù)也越來越長(zhǎng)了。這就像我們將所有東西都堆放到一個(gè)倉(cāng)庫(kù)中,隨著東西越來越多,倉(cāng)庫(kù)慢慢就被各種東西堆滿了,顯得雜亂無章,管理起來非常困難。面對(duì)一個(gè)雜亂無章的倉(cāng)庫(kù),聰明的倉(cāng)庫(kù)管理員提供了一個(gè)很好的管理辦法:將東西分門別類地裝進(jìn)箱子,然后有序地堆放各個(gè)箱子。
這個(gè)好方法也可以用到程序設(shè)計(jì)中,把程序裝進(jìn)箱子,讓整個(gè)程序結(jié)構(gòu)清晰。
5.1 函數(shù)就是一個(gè)大箱子
當(dāng)要處理的問題越來越復(fù)雜,程序越來越龐大的時(shí)候,如果把這些程序代碼都放到主函數(shù)中,將使得整個(gè)主函數(shù)異常臃腫,這樣會(huì)給程序的維護(hù)帶來麻煩。同時(shí),要讓一個(gè)主函數(shù)來完成所有的事情,幾乎是一個(gè)不可能完成的任務(wù)。在這種情況下,可以根據(jù)“分而治之”的原則,按照功能的不同將大的程序進(jìn)行模塊劃分,具有相同功能的劃分到同一個(gè)模塊中,然后分別處理各個(gè)模塊。函數(shù),則成為模塊劃分的基本單位,是對(duì)一個(gè)小型問題處理過程的一種抽象。這就像管理一個(gè)倉(cāng)庫(kù),總是將同類的東西放到同一個(gè)箱子中,然后通過管理這些箱子來管理整個(gè)倉(cāng)庫(kù)。在具體的開發(fā)實(shí)踐中,我們先將相對(duì)獨(dú)立的、經(jīng)常使用的功能抽象為函數(shù),然后通過這些函數(shù)的組合來完成一個(gè)比較大的功能。舉一個(gè)簡(jiǎn)單的例子:看書看得肚子餓了,我們要泡方便面吃。這其實(shí)是一個(gè)很復(fù)雜的過程,因?yàn)檫@一過程中我們先要洗鍋,然后燒水,水燒開后再泡面,吃完面后還要洗碗。如果把整個(gè)過程描述在主函數(shù)中,那么主函數(shù)會(huì)非常復(fù)雜,結(jié)構(gòu)混亂。這時(shí)就可以使用函數(shù)來封裝整個(gè)過程中的一些小步驟,讓整個(gè)主函數(shù)簡(jiǎn)化為對(duì)這些函數(shù)的調(diào)用,如圖5-1所示。
圖5-1 將程序封裝到箱子,分而治之