軟件構建中的設計

一、設計的挑戰

1、設計中存在的一些問題是必須通過解決或者部分解決才能明確的問題,所以在實際設計中你必須把問題“解決”一遍,才能定義它,然後再次解決,循環往復,最終形成一個可行性方案。

2、設計師了無章法的過程,多次的犯錯時設計的關鍵所在。在設計階段犯錯並加以改正比在實際編碼中發現問題並改正花費的代價要低很多。

3、設計是確定取捨和不斷調整順序的過程。

二、關鍵的設計概念

## **1、設計的首要技術使命是 管理複雜度** ##

在設計程序的時候,我們不應該在同一時間把整個程序都塞進大腦裏面,而應該學會去分解程序,從而能在一個時刻專注於程序的某個模塊。

在軟件架構層次上,我們應該把整個系統分解成多個子系統,從而來降低問題的複雜度。

## 2、理想的設計特徵 ##
1、最小的複雜度。設計首要目標是降低複雜度
2、易於維護。
3、鬆散耦合。程序的模塊之間的關聯應該儘可能的小
4、可拓展性。增強系統結構而無須破壞其底層結構
5、可重用性。能提煉出公共模塊,供其它項目使用
6、高扇入。大量的類使用了系統底層的某些工具類。
7、低扇出。一個類中少量或者適量食用其他的類。
8、可移植性。
9、精簡性。設計的系統沒有多餘的部分
10、層次性。保持各個層次之間的獨立性
11、標準化的技術

## 3、設計的層次##
1、第一層:軟件系統層。系統的整體
2、第二層:分解爲子系統或包
該層主要確定 如何劃分各個子系統/子模塊, 以及 規定各個子系統之間如何通信/關聯/聯繫。
注:
子系統之間的 關係不能出現環形循環。
如果無法確定子系統之間的關係,可以對子系統之間的聯繫和通信進行限制,等需要的時候再一步步放開。

3、第三層:分解爲類
包擴整個系統的所有類和接口

4、第四層:類的子程序
5、第五層:類的子程序的內部實現
注:
整個層次設計都是一層層的不斷分解,由系統到函數的內部實現,在詳細設計時,最終都是要設計到具體的函數實現的。

三、設計實現的方法–啓發式方法

設計的首要技術依據始終是–管理複雜度。
下面是實現一個類封裝的步驟

1、找出現實的對象

  • 辨識出/提煉出對象及其屬性(方法和數據)
  • 確定可以對各個對象的操作場景
  • 確定出各個對象對其他對象的關係和操作
  • 確定對象的屬性的public/private
  • 定義每個對象的公開接口

從複雜度來看,提取對象能幫你劃分不同的複雜度層次。

2、形成一直的抽象

抽象是讓你關注某一概念時忽略其中一些細節的能力,即在不同的層次處理不同的細節。

基類是一種抽象,他讓你集中精力關注一組派生類所具有的共性,並在基類層次忽略各個派生類的各自不同部分的細節。

從複雜度來看,抽象的主要好處在於忽略該層次無關的細節。

3、封裝實現細節

封裝是抽象的補充。抽象是讓你從高層的細節來看一個對象,而封裝是除此之外你不能看到細節的其它層次。

從複雜度來看,封裝幫助你管理複雜度的方法是不讓你看到複雜度。

4、當繼承能簡化設計時,就繼承

5、信息隱藏/封裝接口

信息隱藏的可能是某些易變的區域,或者是隔離區域,類的功能就是把部分信息隱藏起來,但該區域改變時,不會對類提供的公共子接口產生影響,即私有數據的改變,不應該影響類的公共接口和使用接口的 程序。

設計類的接口和設計其他環節一樣,都是迭代過程。如果你第一次設計的類沒得到合適的接口,可以多試幾次,直到穩定。

信息隱藏的一些障礙:
1、信息過度分散。(可是嘗試分解爲多個類)
2、循環依賴。(要避免循環依賴)
3、把類內的數據誤認爲全局數據。(把全局數據轉變成類內部數據,避免全局數據造成的耦合問題)

信息隱藏問題是接口設計的核心:如果你能在給類的公開接口增加函數或者數據而不犧牲類的隱私性(不會隨意變化),那就做下去,否則,換種方法。

從發雜都來看,信息隱藏讓你不再關注類的複雜細節,除非你必須關注的時候;隱藏變化源,讓其影響只能在類內部,不會改變公共接口。

6、找出易變區域

好的設計就是能適應變化,能把不穩定的區域隔離,從而把變化的影響限制在一個函數、類或者包內。

找出易變區域的方法: 首先找出對用戶有用的最小子集,這一子集構成系統核心,不會輕易變化。然後以微小的步伐擴充系統,不斷改變,找出可變部分。

7、保持鬆散耦合

儘量創建不依賴或者少依賴其他模塊的模塊。

一個模塊越容易被其他模塊調用,那他們之間的 耦合就越鬆散。

要避免語義耦合

**對複雜度而言,鬆散耦合的好處你可以輕易的使用它,而不用關心他的具體實現的複雜程度。如果一個模塊要求你使用時同時關注:其內部的工作原理、對全局數據的修改、不確定的功能點等,那麼這個模塊就喪失了抽象能力。
類和函數是降低複雜度的首選工具,如果他們沒有幫你簡化複雜度,那他們就是失職的。**

8、使用設計模式

9、其他啓發方法

1、高內聚性。
內聚性是指類內部的子程序或者子程序之間的所有代碼都在支持一箇中心目標的緊密程度,即這個類的目標是否集中。

包含一組密切相關的功能的類被稱爲有高內聚性。

設計類的啓發方法是,朝着高內聚性考慮。

2、構造分層結構

分層結構是指一種分層的信息結構,其中最通用或者最抽象的部分位於層次的最上面,越來越詳細的具體的部分房子啊更低的層次。

四、設計實踐

1、迭代
當你首次嘗試得到某個足夠好的方案之後,不要停下來。第二個設計肯定好於第一個,而你也能從中得到收穫,有助於改善整體設計。

2、分而治之
分解處理

3、自上而下和自下而上的設計方法

自上而下設計是從很高的抽象層次開始。你定義出基類或者其他不特殊的設計元素,在開發過程中,逐漸增加細節層次,找出派生類、合作類以及其他細節元素。

自上而下分解成度:持續分解,直到下一層直接編碼比分解更容易爲止。

自下而上 是開始於細節部分,然後向一般性歸納延伸。通常是先找出具體細節對象,然後從細節生成基類。

2中模式一種是分解,一種是合成,自上而下能找出系統的通用特徵,而自下而上能直接分析系統的各種細節功能。
相互啓發試探,才能設計出一個最佳的類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章