




已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
如何設(shè)計第一個程序 測繪遙感信息工程國家重點實驗室 目前你已經(jīng)學(xué)習(xí)了一些編程基礎(chǔ) 讓我們來進一步看看如何設(shè)計一個具體的程序 當你坐下準備寫一個程序 通常你對于想解決的問題 或者想模擬的情況多少有一些想法 新手程序員經(jīng)常感到在解決如何把想法變換成實際代碼的問題上存在困難 但結(jié)果卻是 你已經(jīng)從日常學(xué)習(xí)生活中獲得了很多你所需要的解決問題的技術(shù) 請記住最重要的事情是要在你開始編寫代碼之前設(shè)計好你的程序 而這也是最困難的 在很多注意中 編程就像是蓋房子 如果你在沒有建筑設(shè)計平面圖的情況下試圖建造一個房子 那會發(fā)生什么 除非你是個天才 否則你會得到一所問題重重的房子 漏水的屋頂 凹凸不平的墻壁等等 同樣的 如果你在設(shè)計好計劃之前就開始編寫程序 你會發(fā)現(xiàn)你所編寫的代碼有很多問題 你必須花費很多時間來修改問題 這本來是可以通過提前設(shè)計避免的 一個預(yù)先的計劃會長遠的節(jié)約你的時間 避免挫折 第一步 明確問題 首先你要明確你的程序要解決什么問題 理論上 你應(yīng)該能夠用一兩句話進行描述 例如 我想寫一個電話簿記錄我的朋友的電話號碼 我想寫一個能隨機地下發(fā)生器 它可以產(chǎn)生看起來有趣的洞穴 我想寫一個程序 可以提供股票信息以及預(yù)測我該買那些股票 盡管這一步似乎顯而易見 但它還是十分重要的 你能做到的最壞的情況就是寫一個實際上不是你或你的老板想要的程序 第二步 明確你的目標 當你是一個富有經(jīng)驗的程序員時 在此時會有很多其他典型的步驟 其中包括 了解你的目標使用者是誰定義目標架構(gòu)和 或你的程序涉及的操作系統(tǒng)確定你將用到的所有工具確定你是獨自編寫程序還是作為團隊中的一員收集需求 一個關(guān)于程序要做什么的文件記錄列表 然而 作為一個新手程序員 這些問題的答案是簡單的 你是在為你自己寫一個程序 獨自的 用你自己的方法 利用你購買或下載的集成開發(fā)環(huán)境 這使得情況變得簡單 所以我們不會在這一步花費時間 第三步 將任務(wù)分出層次 在現(xiàn)實生活中 我們經(jīng)常需要完成十分復(fù)雜的任務(wù) 嘗試去解決如何做這些任務(wù)是很有挑戰(zhàn)性的 在這種情況下 我們經(jīng)常使用自頂向下的方法來解決問題 也就是說 我們不是解決一個單一的復(fù)雜的任務(wù) 而是將任務(wù)分解成多個更容易解決的子任務(wù) 如果這些子任務(wù)仍然很難解決 則可以進一步分解 通過不斷的將復(fù)雜的任務(wù)分解成簡單的任務(wù) 最終你可以得到的每一個單獨的任務(wù)都是容易進行的 讓我們來看一個關(guān)于這一點的例子 我們想寫一個關(guān)于胡蘿卜的報告 當前的任務(wù)層次是這樣的 寫關(guān)于胡蘿卜的報告一次性寫一個關(guān)于胡蘿卜的報告是一個很難的任務(wù) 所以我們把它分解成子任務(wù) 寫報告 做調(diào)查 寫概述 填寫關(guān)于胡蘿卜的細節(jié) 我們現(xiàn)在有三個可以分別集中研究的任務(wù) 這是很容易辦到的 然而 在這種情況下 做關(guān)于胡蘿卜的研究是模糊不清的 所以我們可以進一步分解 寫關(guān)于胡蘿卜的報告 做關(guān)于胡蘿卜的調(diào)查 去圖書館找有關(guān)于胡蘿卜的書 在網(wǎng)上搜索有關(guān)于胡蘿卜的信息 寫概述 關(guān)于生長的信息 關(guān)于加工的信息 關(guān)于營養(yǎng)的信息 填寫關(guān)于胡蘿卜的細節(jié) 現(xiàn)在我們有了一個任務(wù)的層次 每個子任務(wù)都不是特別困難 通過完成每個相對容易做的子項目 我們可以完成關(guān)于寫一個胡蘿卜報告的更困難的全部任務(wù) 創(chuàng)造任務(wù)層次的另一種方法是自底向上的方法 在這種方法中 我們從一個簡單任務(wù)的列表開始 通過將它們分組來構(gòu)造層次 舉個例子 很多人必須在工作日上班或者上學(xué) 所以我們想解決 從起床到上班 的問題 如果問早上從起床到上班你要做什么任務(wù) 你也許會想到如下的列表 挑選衣服 穿衣服 吃早飯 開車去工作 刷牙 起床 準備早飯 進入車里 洗淋浴 使用自底向上的方法 我們可以通過尋找相似點把項目組織起來的方法 將這些整理成一個項目層次 從起床到上班 臥室的事情 起床 挑選衣服 浴室的事情 洗淋浴 刷牙 早餐 準備早餐 吃早餐 交通的事情 進入車里 開車去工作 結(jié)果表明 這些任務(wù)層次對程序設(shè)計非常有用 因為一旦你有了一個任務(wù)層次 你就基本明確了整個程序的結(jié)構(gòu) 最高級別的任務(wù) 在本例中 寫一個關(guān)于胡蘿卜的報告 或者 從起床到上班 成為main 因為它是你要解決的主要項目 子項目成為程序中的函數(shù) 如果其中一個項目 或函數(shù) 太難實現(xiàn) 僅僅是把這個項目分解成多個子項目 再函數(shù)調(diào)用多個子項目來實現(xiàn)這些新任務(wù) 最終 你應(yīng)該達到的目標是在你的程序中的每一個函數(shù)實現(xiàn)起來都是瑣碎的 第四步 確定項目的順序 現(xiàn)在你的程序有了一個結(jié)構(gòu) 然后就該確定如何將所有的任務(wù)聯(lián)系在一起 第一步是確定項目的執(zhí)行順序 例如 當你早上起床 是什么決定了你做以上任務(wù)的順序 順序或許是這樣的 起床 挑選衣服 洗淋浴 穿衣服 準備早餐 吃早餐 刷牙 進入車里 開車去工作 現(xiàn)在你的程序有了一個結(jié)構(gòu) 然后就該確定如何將所有的任務(wù)聯(lián)系在一起 第一步是確定項目的執(zhí)行順序 例如 當你早上起床 是什么決定了你做以上任務(wù)的順序 順序或許是這樣的 起床 挑選衣服 洗淋浴 穿衣服 準備早餐 吃早餐 刷牙 進入車里 開車去工作 這個列表基本上定義了將要進入main 函數(shù)中的東西 01intmain 02 03GetOutOfBed 04PickOutClothes 05TakeAShower 06GetDressed 07PrepareBreakfast 08EatBreakfast 09BrushTeeth 10GetInCar 11DriveToWork 12 或者在計算機的情況下 01intmain 02 03 Getfirstnumberfromuser04GetUserInput 0506 Getmathematicaloperationfromuser07GetMathematicalOperation 0809 Getsecondnumberfromuser10GetUserInput 1112 Calculateresult13CalculateResult 1415 Printresult16PrintResult 17 第五步 確定每個任務(wù)的數(shù)據(jù)輸入和輸出 一旦你有了層次結(jié)構(gòu)和項目順序 下一件事就是確定每個任務(wù)需要操作的輸入數(shù)據(jù) 以及他產(chǎn)生的數(shù)據(jù) 如果有的話 如果你已經(jīng)從以前的步驟得到輸入數(shù)據(jù) 那么輸入數(shù)據(jù)將會變成參數(shù) 如果你通過其它函數(shù)計算輸出以供使用 那么通常輸出會成為返回值 當做完這些 我們應(yīng)該有了每個函數(shù)的原型 假如你忘記了 函數(shù)原型是一個函數(shù)的聲明 它包括了函數(shù)名 參數(shù)和返回值 但是并不執(zhí)行函數(shù) 讓我們舉一個例子 GetUserInput 是相當簡單的 我們將要從用戶那里得到一個數(shù) 然后返回調(diào)用程序 因此 函數(shù)原型就像這樣 1intGetUserInput 在計算機例子中 CalculateResult 函數(shù)將會需要獲得三塊輸出 兩個數(shù)和一個數(shù)學(xué)運算符 當我們指出這個函數(shù)的位置時 我們應(yīng)該已經(jīng)有了這三項 所以這三塊數(shù)據(jù)將會是函數(shù)參數(shù) CalculateResult 函數(shù)會計算結(jié)果的值 但它不會顯示結(jié)果本身 因此 我們需要將結(jié)果作為返回值返回以便其它函數(shù)使用 鑒于此 我們可以寫一個函數(shù)原型 如下所示 1intCalculateResult intnInput1 charchOperator intnInput2 第六步 寫任務(wù)細節(jié) 在這一步里 對每一個任務(wù) 你要寫它的具體實施 如果你已經(jīng)把任務(wù)分解成為足夠小的部分 每一個任務(wù)都應(yīng)該相當簡單明確 如果所給任務(wù)仍然過度復(fù)雜 可能它需要分解成子項目以便更加簡單的實現(xiàn) 例如 01charGetMathematicalOperation 02 03cout chOperation 0708 Whatiftheuserentersaninvalidcharacter 09 We llignorethispossibilityfornow10returnchOperation 11 第七步 連接數(shù)據(jù)輸入和輸出 最后一步是將每個任務(wù)的輸入和輸出以適當?shù)姆绞竭B接起來 例如 你會把CalculateResult 的輸出發(fā)送到PrintResult 的輸入中 所以它可以輸出計算的結(jié)果 這通常包含存儲臨時結(jié)果的中間變量的使用 所以它可以在函數(shù)之間交換 例如 1 nResultisatemporaryvalueusedtotransfertheoutputofCalculateResult 2 intoaninputofPrintResult 3intnResult CalculateResult nInput1 chOperator nInput2 4PrintResult nResult 這與不使用時間變量的可選濃縮版本相比更傾向于可讀性 1PrintResult CalculateResult nInput1 chOperator nInput2 找到竅門對于一個新手程序員來講是最困難的步驟 編寫程序時的一些建議 1 開始時要使你的程序保持簡潔 新手程序員經(jīng)常會關(guān)注所有他們想讓程序?qū)崿F(xiàn)的東西 我想利用圖形學(xué)寫一個角色扮演游戲 以及音頻 隨機怪獸和地下城 附帶一個可以訪問并出售你在地下城找到的物品的城鎮(zhèn) 如果剛開始時你就試圖編寫過于復(fù)雜的東西 你會由于你的毫無進展而受到打擊并感到氣餒 相反的 讓你的第一目標盡可能的簡單 確定它在你所能達到的范圍之內(nèi) 例如 我想能夠在屏幕上顯示二維表征的世界地圖 2 隨著時間增加特征 一旦你有一個簡單程序并且運行良好 然后你就可以對它增加一些特征 例如 一旦你可以顯示你的二維世界地圖 那么就增加一個可以四處走動的人物 一旦你可以走動 增加一個可以阻礙你行動的墻壁 一旦你有了墻壁 在他們之外建立一個簡單的城鎮(zhèn) 一旦你有了一個城鎮(zhèn) 增加商人 通過逐漸增加每一種特征 你的程序就會逐漸的變得更加復(fù)雜 并且在這個過程中沒有東西能壓倒你 3 分散在多個任務(wù)上 每次只集中于一個任務(wù) 使它盡可能的順利實現(xiàn) 擁有一個充分的工作任務(wù)就更好了 如果你分散了你的注意力 你就更可能犯錯誤 并且忘記重要的細節(jié) 4 隨著你的進展測試每一段代碼 新手程序員經(jīng)常寫完全部程序并且一次通過 然后當他們第一次編譯時 編譯器會報告幾百個錯誤 這不只是嚇人的 如果你的代碼無法運行 要想出原因就可能十分困難 相反的 寫一段代碼 然后立即編譯并檢驗 如果你的代碼無法運行 你會準確地知道問題在哪里 并且容易修改 一旦你確定代碼可以運行 轉(zhuǎn)移到下一段并重復(fù)一遍 這樣也許會花費你更多的時間編寫代碼 但
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家電二維碼管理制度
- 應(yīng)付賬賬款管理制度
- 張勇海底撈管理制度
- 影像科預(yù)約管理制度
- 微商公司化管理制度
- 心理vr室管理制度
- 快艇安全全管理制度
- 快餐店員工管理制度
- 總公司資金管理制度
- 總經(jīng)理資格管理制度
- 焊接安全知識考核試題及答案
- 2025燃氣電廠智能巡檢系統(tǒng)技術(shù)方案
- 高中學(xué)校托管協(xié)議書范本
- ICU譫妄管理課件
- 2025至2030年COB產(chǎn)品項目投資價值分析報告
- 河南會考地理試題及答案2024
- 智慧社區(qū)人臉識別門禁系統(tǒng)改造方案
- 痛風(fēng)結(jié)石病人的術(shù)后護理
- 室內(nèi)拆除及裝修方案
- 養(yǎng)殖業(yè)技術(shù)知識培訓(xùn)課件
- 慢性傷口護理中的柔性可穿戴設(shè)備應(yīng)用
評論
0/150
提交評論