PS:引號是書中內容
5.軟件構建中的設計
1)設計中的挑戰
設計是一個險惡的問題:這個問題只有在“解決”過一次後才能明確定義它,然後再次解決它;(書中的例子很有趣)
設計是個了無章法的過程:採取很多方法,好的,壞的,對的,錯的;
設計就是確定取捨和調整順序的過程:平衡各項需求;
設計受到諸多限制:時間,空間;
設計是不確定的:條條大路通羅馬;
設計是一個啓發式過程:試一試,也許可行?
2)關鍵的設計概念
軟件的首要技術使命:管理複雜度
理想的設計特徵:最小複雜度、易維護、松耦合、可擴展、高扇入低扇出、可移植、精簡、層次、標準
設計的層次:1)軟件系統 2)分解爲子系統 3)分解爲類 4)分解成子程序 5)子程序內部的設計
3)設計構造塊:啓發式方法
尋找現實世界的對象
形成一致的抽象
封裝實現細節
在可能的情況下繼承
信息隱藏
找出容易改變的區域
保持鬆散耦合
探尋通用的設計模式
4)設計實踐
迭代
分而治之
自上而下和自下而上的設計方法
建立實驗性原型
合作設計
6.可以工作的類
1)類的基礎:抽象數據類型,ADT
“抽象數據類型是指一些數據以及對這些數據所進行的操作的集合”,類還涉及繼承和多態這兩個概念
ADT的好處:隱藏實現細節、改動不會影響到整個程序、讓接口能提供更多信息、更容易提高性能、讓程序的正確性更顯而易見、程序更具自我說明性、無須在程序內到處傳遞數據、可以像在現實世界中那樣操作實體,而不用在底層實現上操作它(總結來看,ADT的好處就是封裝的好處)
2)良好的類接口
好的抽象
良好的封裝
3)有關設計和實現的問題
包含(“有一個......”的關係)
繼承(“是一個......”的關係)
(繼承的使用更需要技巧,務必小心使用!)
7.高質量的子程序
子程序名使用常見的對仗詞組:
add/remove increment/decrement open/close
begin/end insert/delete show/hide
create/destroy lock/unlock source/target
first/last min/max start/stop
get/put next/previous up/down
get/set old/new
“理論上認爲子程序最佳最大長度通常是一屏代碼或打印出來一到兩頁的代碼,也就是約50~150行代碼”
8.防禦式編程
“處理錯誤最恰當的方式要根據出現錯誤的軟件類別而定”
大致上: 1)人身安全攸關的軟件往往更傾向於正確性而非健壯性,如放射線治療儀
2)消費類應用軟件往往更注重健壯性而非正確性,如文字處理軟件
9.僞代碼編程過程
僞代碼主要以意圖描述爲主,不要與編程語言相關,說明思路,後期可以作爲註釋使用