程式碼大全 讀書筆記(3)軟體構建中的設計
1. 選擇程式語言
熟悉的語言
高階的語言
更能表達程式設計中各種概念的語言
每種語言都有自己的優點和弱點,要知道所選用語言的明確優點和弱點。
問問自己,採用的程式設計實踐是對你所用的程式語言的正確響應,還是受它的控制,記得“深入一種語言去程式設計”,不要僅“在一種語言上程式設計”。
有意識的選擇最適合你的專案的實踐方法。
2. 設計中的而挑戰
設計是一個險惡的問題,只有通過解決或者部分解決才能明確問題
設計是個了無章法的過程
設計就是確定取捨和調整順序的過程
設計受到諸多限制
設計是不確定的
設計是一個啟發式過程
設計是自然而然形成的
軟體的首要技術使命是管理複雜度,要把任何人在同一時間需要處理的本質(essential)複雜度的量減到最少,不要讓偶然性(accidental)的複雜度快速增長
3. 理想的設計特徵
最小的複雜度
易於維護
鬆散耦合
可重用性
高扇入
低扇出
可移植性
精簡性
層次性
標準技術
4. 設計的層次
第1層:軟體系統,就是整個系統
第2層:分解為子系統或包,確定如何把程式分為主要的子系統,比如說資料庫、使用者介面、業務規則、命令直譯器、報表引擎等。確定不同子系統之間相互通訊的規則。為了讓系統之間的連線簡單且易於維護,就要儘量簡化子系統之間的互動關係。最簡單的互動關係是讓一個子系統去呼叫另一個子系統中的子程式;稍微複雜一點的互動關係是在一個子系統中包含另一個子系統中的類,最複雜的互動關係是讓一個子系統中的類繼承自另一個子系統中的類。
第3層:分解為類, 確定好類的介面,把所有的子系統進行適當的分解,確保所分解出的細節恰到好處,能夠用單個類實現。
第4層:分解成子程式,把每個類細分為子程式。
第5層:子程式內部的設計,包括編寫虛擬碼、選擇演算法、組織子程式內部的程式碼塊等。
5. 設計構造塊:啟發式方法
5.1 找出現實世界中的物件
確定設計方案時,最流行的一種常規做法就是面向物件設計方法,要點是辨識現實世界中的物件以及人造的物件。
設計步驟:
辨識物件機器屬性(method)和資料(data)
確定可以對各個物件進行的操作
確定各個物件能對其它物件進行的操作
確定物件的哪些部分對其它物件可見----哪些部分是public的,哪些部分是private的
定義每個物件的公開介面(public interface)