C++ 增量開發(fā)vs高屋建瓴

2023-03-20 15:59 更新

我在本章闡述了一種程序開發(fā)的方法,我稱之為快速建原型及迭代完善。先編寫一個能執(zhí)行基本運算的草案(或原型),然后用幾個案例進行測試,發(fā)現(xiàn)缺陷并修正之。

盡管此方法很有效,但也會使代碼變得沒有必要的復雜--因為要處理許多特殊情況,而且不可靠--因為你很難知道是否發(fā)現(xiàn)了所有的錯誤。

一種備案是高屋建瓴,對問題看得深入一點可使變成更加容易。對此案例的深入看法是:一個Time對象其實就是一個基為60的3位數(shù)!秒是個位,分鐘是“60位”,小時是“3600位”。

當我們編寫addTime和increment兩個函數(shù),我們實際上是在做以60為基數(shù)的加法,所以我們需要進位。

還有一種解決整個問題的備案,即把Time類型轉(zhuǎn)換為double類型,它利用了這樣一個事實:計算機已經(jīng)能夠做double型的算術(shù)。下面是一個將Time轉(zhuǎn)換為double的函數(shù):

double convertToSeconds (const Time& t) {
    int minutes = t.hour * 60 + t.minute;
    double seconds = minutes * 60 + t.second;
    return seconds;
}

現(xiàn)在我們需要的只是把double轉(zhuǎn)換為Time的方法了:

Time makeTime (double secs) {
    Time time;
    time.hour = int (secs / 3600.0);
    secs -= time.hour * 3600.0;
    time.minute = int (secs / 60.0);
    secs -= time.minute * 60;
    time.second = secs;
    return time;
}

你可能需要想一想,才能相信我所使用的不同基數(shù)之間的轉(zhuǎn)換技術(shù)是正確的。假設你已經(jīng)想通了,我們就可以用這些函數(shù)來重寫addTime:

Time addTime (const Time& t1, const Time& t2) {
    double seconds = convertToSeconds (t1) + convertToSeconds (t2);
    return makeTime (seconds);
}

比之前的版本精簡了不少,證明其正確性也更加容易(按常規(guī)要假設其調(diào)用的函數(shù)是正確的)。給大家一個練習:用同樣方法重寫increment。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號