第九章,僞代碼編程過程
9.1 創建類和子程序的步驟概述
創建一個類可以有多種不同的方式,但一般而言這都是一個迭代過程,先對一個類做總體設計,列出這個類內部的特定子程序,創建這些子程序,然後從整個上覆查這個類的構建結果。
創建一個類的步驟
1、 創建類的總體設計:設計一個類的過程中包含一些特有的設計任務——定義類的特定職責,定義類說要隱藏的“祕密”,以及精確的定義類的接口所代表的抽象概念,決定這個類是否要從其他類派生出來,以及是否運行其他類從它派生;支持這個類中關鍵的公用方法,標識並設計出類所需要的重要的數據成員。
2、 創建類的子程序:
3、 複查並測試。
創建子程序的步驟:
創建類的步驟:確定類的職責;確定類對外的接口;確定類隱藏的數據;設計對外接口,包括設計數據;爲對外接口編寫僞代碼;爲支持對外接口,編寫使用接口。
9.2 僞代碼
僞代碼編寫原則:
1、 用類似英語的語句精確描述特定的操作。可以使用中文。
2、 避免使用目標編程語言中的語法元素。使用比代碼層次略高的語言來描述。
3、 在本意(意圖)上編寫僞代碼。用僞代碼去描述解決問題的方法意圖。
4、 在一個足夠低的層次上編寫僞代碼,以便可以近乎自動地從它生成代碼。如果層次過高,會隱藏代碼中的問題細節。
9.3 通過僞代碼編程過程創建子程序
設計子程序:
1、 檢查先決條件。
2、 定義子程序需要解決的問題。
1) 這一子程序將要隱藏的信息。
2) 傳給這項子程序的各項輸入。
3) 從子程序得到的輸出。
4) 在調用程序之前確保有關的前條件成立。
5) 在子程序將控制權交回給後條件之前,確保其後條件成立。
3、 爲子程序命名。好的子程序名是優秀子程序的標誌之一。如果你在給程序起名的時候犯難,通常就表明這個子程序的目標還沒有明確。
4、 決定如何測試子程序。
5、 在標準庫中搜尋可用的功能。
6、 考慮錯誤處理。
7、 考慮效率問題。效率上最主要的優化還在於高層的設計,不要在微不足道的點滴上浪費時間。
8、 研究算法和數據類型。
9、 編寫僞代碼。首先寫一個函數頭部註釋。要能夠一句話描述程序的目的。
10、考慮數據。
11、檢查僞代碼,在僞代碼中試驗一些想法,留下最好的想法。最初的僞代碼可能層次還是很高,要進行持續的分解。持續的精化和分解僞代碼,知道你覺得再寫僞代碼實在是浪費時間爲止。
編寫子程序的代碼:
檢查代碼:
1、 在腦海中檢查程序的錯誤。
2、 編譯子程序。在構建的後期纔開始進行編譯。在編譯之前要確保代碼錯誤很少。不要陷入“拼湊加編譯”開發怪圈。匆匆忙忙的更改以使編譯通過往往後遺留很多後面需要花費大量精力去修改的BUG。
3、 測試代碼
4、 修改錯誤。
收尾工作:
1、 檢查子程序的接口:確認所有的輸入,輸出數據都參與了計算,並且所有的參數也都用到了。
2、 檢查整體的設計質量。
3、 檢查變量。
4、 檢查邏輯和語句。
5、 檢查佈局。
6、 檢查文檔。
7、 出去冗餘註釋。
可以嘗試一下僞代碼編程過程。
CHECKLIST: The Pseudocode Programming Process覈對表:僞代碼編程過程1、 是否檢查已滿足的所有的先決條件? 2、 定義好這個類要解決的問題了嗎? 3、 高層次的設計是否足夠清晰?能給這個類和其中的每一個子程序起一個好的名字嗎? 4、 考慮如何測試整個類及其中的每一個子程序了嗎? 5、 關於效率的問題,你主要從穩定的接口和可讀的實現這兩個角度考慮嗎?還是主要從滿足資源和速度的預期目標的角度考慮過那? 6、 在標準函數庫和其他代碼庫中找過可用的子程序或組件了嗎? 7、 在參考書籍中查找過有用的算法了嗎? 8、 是否用詳盡的僞代碼設計好每一個子程序? 9、 你在腦海中檢查過僞代碼嗎?這些僞代碼容易理解嗎? 10、關注過那些可能讓你重複設計的告警了嗎? 11、是否把僞代碼正確的翻譯成代碼了? 12、你反覆使用僞代碼編程過程了嗎? 13、有沒有根據需要把一些子程序拆分成更小的子程序? 14、在做成假定的時候有沒有對他們加以說明? 15、已經刪除那些冗餘的註釋了嗎? 16、你是否採取了幾次迭代中仲好的那個結果?還是在第一次迭代後就停止了? 17、你完全理解你的代碼嗎?這些代碼是否容易理解? |
本章要點
1、 創建類和子程序的過程通常都是一個迭代的過程。在創建子程序的過程中獲得的認識通常會反過來影響類的設計。
2、 編寫好的僞代碼要使用易懂的英語,要避免使用特定的編程語言中才有的特性,同時要在意圖的層面上寫僞代碼(即描述該做上面,而不是怎麼去做)。
3、 僞代碼編程過程是一個行之有效的詳細工具。它同時讓編碼工作更容易。僞代碼直接轉化爲註釋,同時確保註釋的準確性和實用性。
4、 不要只停留在你第一次的設計方案上,反覆使用僞代碼做出多種方案,然後選出其中最佳的一種設計方案。
5、 每一個步驟完成後,都要檢查你的工作,並且鼓勵其他人來檢查。這樣可以用最低的成本發現錯誤。