天天看點

《Java和Android開發實戰詳解》——2.1節如何建構應用程式

本節書摘來自異步社群《java和android開發實戰詳解》一書中的第2章,第2.1節如何建構應用程式,作者 陳會安,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

2.1 如何建構應用程式

java和android開發實戰詳解

一般來說,我們使用java程式語言的目的,就是編寫程式代碼建構應用程式,以期讓計算機執行來解決問題。

2.1.1 如何編寫程式代碼

程式設計(programming)很困難嗎?事實上,如果你可以引導問路人到達目的地、走迷宮或開車到你家,一步一步詳細列出活動流程,就表示你一定可以編寫程式代碼。不過,在列流程時請注意!計算機一點都不聰明,也不會舉一反三,是以,我們需要告訴計算機詳細的步驟和資訊,不能隻有模棱兩可的内容。

例如,在北京開車從建國門北上到奧林匹克公園,行車路線如下所示。

step02step01從二環出發向北開。

step03進入安定門外大街(安定門橋)。

進入安定路。

step04直行到路口後,右轉進入安慧橋,然後直行。

step05左轉進入大屯路後直行到終點。

上述步驟告訴我們人類的話,所提供的資訊已經足以讓我們開車到達目的地,但是如果将這些步驟告訴計算機,計算機一定不知道如何開車到達目的地,因為它還需要更多的資訊,如下所示。

從哪裡開始開車?二環路上需向北開幾千米?

如何分辨十字路口?如何從十字路口下來?

在安定門高架橋開幾公裡可以到安定路出口?如何下去?

從安慧橋直行幾公裡可以看到紅綠燈?

開多少公裡可以看到大屯路?如何左轉?接着需要如何開?如何停車?

換句話說,編寫程式代碼時需要告訴計算機非常詳細的步驟,如同教導小孩去做一件他從沒有做過的事。所謂程式設計就是在解決問題,你需要将解決問題的詳細步驟一一寫下來(即算法,第2.1.3小節将介紹),然後将它轉換成程式代碼即可。

2.1.2 程式設計的基礎

如前所述,程式設計是将需要解決的問題轉換成程式代碼,程式代碼不隻能夠在計算機上正确執行,而且還應可以驗證程式執行的正确性。基本上,程式設計的過程主要可以分成5個階段,如圖2-1所示。

1.需求

需求(requirements)是為了了解問題本身,以便确切獲得程式需要輸入的資料和預期應産生的結果,如圖2-2所示。

《Java和Android開發實戰詳解》——2.1節如何建構應用程式

在輸入資料後,執行程式應可以輸出執行結果,這就是程式設計的需求。例如,要計算從1加到100的總和,程式輸入資料應是相加求和的數值,範圍為1~100,執行程式則可以輸出計算結果5050。

2.設計

了解程式設計(design)的需求後,我們就可以開始找尋解決問題的方法和政策。簡單地說,設計實際是在找出解決問題的步驟,如圖2-3所示。

《Java和Android開發實戰詳解》——2.1節如何建構應用程式

圖2-3的資料需要經過處理才能轉換成有用的資訊,也就是輸出結果。例如,為了求1加到100即1+2+3+4+…+100的結果,可以在程式中使用數學運算的加法來解決問題,或第4章的循環來執行計算。

再看一個例子,如果需要将華氏溫度轉換成攝氏溫度,所輸入資料當是華氏溫度,溫度轉換則使用一個數學公式,經過運算後,就可以得到攝氏溫度,也就是我們所需的資訊。

換句話說,為了解決需求,程式需要執行資料的運算或比較等操作,将詳細的執行步驟和順序寫下來,這就是設計解決問題的方法,也就是第2.1.3小節的算法。

3.分析

解決需求時是不是隻有一種解決方法?未必。例如,有100個資料需要存儲,我們既可以定義100個變量儲存資料,也可以使用第6章的數組(一種資料結構)來儲存。分析(analysis)階段是将所有可能解決問題的算法都寫下來,然後分析哪一種方法比較好,選擇最好的算法來編寫程式代碼。

如果一時不能分辨出哪一種方法比較好,不妨直接選擇一種方法繼續下一個階段,因為在編寫程式代碼時,如果發現另一種方法比較好,我們可以馬上改用另一種方法來編寫程式代碼。

4.編寫程式代碼

現在我們就可以使用程式語言來進行編碼(coding)工作,例如本書使用的是java語言。在實際編寫程式時,可能發現另一種方法比較好,因為設計歸設計,有時在實際編寫程式時才會發現其優劣,如果是一個良好的設計方法,就算改成其他方法也不會太困難。

設計者有時很難下決定,繼續此方法,還是改為其他方法而重新開始。此時需視情況而定。不過每次編寫程式代碼最好隻使用一種方法,而不要同時使用多種方法。當發現問題需要重新開始時,已經有了編寫一種方法的經驗,第2次将會更加容易。

5.驗證

驗證(verification)是為了證明程式執行的結果是否符合需求的輸出資料,在這個階段可以再細分成3個子階段。

證明:執行程式時需要證明它的執行結果是正确的,所輸入資料符合既定組合,程式規格說明也都符合算法的需求。

測試:程式需要測試各種可能情況、條件和輸入資料,以測試程式執行無誤。如果有錯誤産生,就需要除錯來解決問題。

調試:如果程式無法輸出正确結果,通過調試來找出錯誤的地方。我們不但需要找出錯誤,還需要找出更正錯誤的方法。

上述5個階段是設計每一個程式和開發應用程式都需經曆的階段,不論大型應用程式或一個小程式,都可以套用相同流程。首先針對問題定義需求,接着找尋各種解決方法,在編寫程式代碼的過程中找出最佳的解決方法,最後經過重重驗證,就可以建構正确執行的程式。

2.1.3 算法

解決問題的步驟、政策或方法就是“算法”(algorithm),其基本定義如下:

算法是用于完成目标工作且步驟有限的一組指令。除此之外,算法還必須滿足一些條件,如下所示。

輸入(input):數個外界的輸入資料。也可以沒有。

輸出(output):至少有一個輸出結果。

明确性(definiteness):每一個指令步驟都十分明确,不能模棱兩可。

有限性(finiteness):這組指令一定會結束。

有效性(effectiveness):每一個步驟都可行,可以追蹤其結果。

根據上述算法設計的程式一定會結束,但并非所有程式都滿足這項特性。例如,早期的ms-dos作業系統,除非系統當機,否則它永遠執行一個等待循環,等待使用者輸入指令。

因為算法隻是将解決問題的步驟詳細寫出來,是以并沒有固定方式,基本上隻要能夠描述指令的執行過程即可。常用算法描述方式有如下幾種。

一般語言文字:直接使用文字描述來說明執行的步驟。

僞碼(pseudo code):一種接近程式語言的描述方法,它并沒有固定文法,每一行約可轉換成一行程式代碼,如下所示:

/ 計算1加到10 /

流程圖(flow chart):使用結構化的圖表描述執行過程,以各種不同形狀的圖形表示不同的操作,使用箭頭直線标示執行方向。例如,圖2-4即為上述僞碼的流程圖。

《Java和Android開發實戰詳解》——2.1節如何建構應用程式