程式設計原理
一、問題求解
1、問題求解(Problem Solving):指描述問題,以及開發計算機程式來解決問題的整個過程。
這個過程經曆多個階段,包括了解待解決問題、設計概念化解決方案,以及用計算機程式實作解決方案。
2、解決方案(solution)通常由“算法”和“資料存儲方式”兩部分組成。
“算法”是對于在有限時間内問題求解方法的分布描述。算法常執行的操作是在資料集合上進行的。
3、在建構解決方案時,必須組織資料集合,進而按算法要求的方式簡單地操作資料。
二、軟體的生命周期
軟體生命周期(software's life cycles):該過程以初始規劃起,經曆程式編寫和調試,最後修改和增強。
描述-->設計-->風險分析-->驗證-->編碼-->測試-->完善-->生産-->維護
以“文檔記錄”為核心。
三、優秀解決方案的定義
要評估一個好的解決方案,必須考慮開發解決方案的各階段,以及在編寫出實作解決方案的原始程式後的各階段。
這些階段都需要考慮成本。解決方案的總成本必須考慮開發、完善、編碼、調試和測試人員的時間價值,以及維護、修改和擴充軟體的成本。
如果一個解決方案在生命周期所有階段引發的總成本最低,則這個方案就是一個“好”的解決方案。
時代的發展摒棄了“效率最高的解決方案一定最優”的觀念。
解決方案的成本應看作是多元成本。
四、子產品化設計
1、抽象和資訊隐藏
“抽象”分離子產品的功能和實作;子產品化和抽象相輔相成。
子產品化将解決方案分解為若幹各子產品;抽象在用程式設計語言實作子產品前明确指定各個子產品。
資訊隐藏限制了處理方法和資料所需要的方式。
2、面向對象的設計
1)封裝:對象組合資料和操作;
2)繼承:累可從其它類繼承屬性;
3)多态:對象可在執行時确定适當操作。
3、自上而下的設計(top-down design,TDD):在逐級下降的明細級别完成任務。
4、一般設計原則
1)同時使用OOD和TDD,生成子產品化的解決方案;
2)為主要設計資料的問題使用OOD;
3)使用TDD,為對象操作設計算法;
4)使用TDD,為強調算法的問題設計解決方案;
5)在設計ADT和算法時,側重“做什麼”,而不是“如何做”;
6)考慮将前面編寫的軟體組合包含到設計方案中。
五、關鍵程式設計問題
有六點:
1)子產品化;
2)可修改;
3)易用;
4)防故障程式設計;
5)風格;
6)調試。
六、總結
1)循環不變式是一個算法屬性,在循環每次疊代前後為true。
2)在評估解決方案品質時,必須考慮各組因素:解決方案的正确性、效率、進入開發的時間、易用性及修改和擴充成本。
3)面向對象與自上而下設計技術相輔相成,互相促進,生成了子產品化解決方案。
4)要謹慎設計,盡量提高最終解決方案的可修改性。
5)方法要盡可能獨立,并執行一個意義明确的任務。
6)方法一定要包含初始注釋,聲明方法的作用、初始條件和結束條件。
7)程式應盡可能預防故障的發生。
8)已有診斷工具的有效使用是調試的一個關鍵。
9)為便于在調試時分析數組和其它更複雜資料結構的内容,應編寫轉儲方法來顯示資料結構的内容。