面向對象分析和設計簡介(《UML和模式應用》讀書筆記)

分析和設計這兩個術語經(jīng)常出現(xiàn)在一起,人們也很常?;煜叩暮x,其他它們是完全不同的概念。分析是對需求(或問題)的調查研究。設計是已經(jīng)定義的問題,構造一個邏輯上的解決方案。分析讓我們知道面臨著什么問題,設計告訴我們要如何去解決。這樣看來,分析在設計之前,設計在分析之后。實際上人們對問題和解的認識是不斷細化和深入的,因此在工作中往往是分析、設計、分析、設計不斷循環(huán),直到問題和解足夠的“好”。什么是“好”呢?就是得到涉眾的一致認可。面向對象分析和設計就是使用面向對象這個工具進行分析和設計。對象這個詞在分析和設計階段具有不同的含義。在分析階段,對象是業(yè)務領域內的概念。在設計階段,對象指軟件對象,如模塊、組件、類等。面向對象分析就是從使用者的視角出發(fā),發(fā)現(xiàn)和描述業(yè)務領域內的概念,建立一個業(yè)務模型。面向對象分析的的主要工作內容是編寫用例,并通過用例發(fā)現(xiàn)和建立領域模型。面向對象設計將業(yè)務領域概念映射為可以編碼實現(xiàn)的軟件對象。主要的工作包括分配軟件對象職責、確定軟件對象協(xié)作方式和詳細設計軟件類。在使用面向對象這個工具時,熟練地為對象分配職責是一項非常重要的能力。

為了展示面向對象分析和設計的工具和方法,我們來看一個簡單的例子。

示例:骰子游戲。

玩家擲2個骰子,如果總點數(shù)為7則玩家獲得勝利,否則輸?shù)粲螒?。我們先從定義用例開始。用例(use case)是用戶使用系統(tǒng)(或解決方案)的場景和情節(jié)。

我們先從定義用例開始。用例(use case)是用戶使用系統(tǒng)(或解決方案)的場景和情節(jié)。下面我們用這個骰子游戲來展示如何面向對象分析和設計。在這個例子里,我們把工作分為定義用例、定義領域模型、分配對象職責并繪制交互圖和定義設計類圖4個步驟。定義用例和領域模型屬于分析階段,分配對象職責并繪制交互圖和設計類圖是設計階段。第一個步驟是定義用例。用例描述了使用者(利益相關者)和軟件交互的場景。用例告訴我們,使用者是如何使用軟件達成業(yè)務目標的。用例是捕獲需求和記錄需求的重要工具。下面是擲骰子游戲的一個用例:

用例1:玩家請求擲骰子。系統(tǒng)展示結果。如果總點數(shù)是7則玩家勝,否則玩家輸。

第二個步驟是定義領域模型。這個步驟需要從用例中提取概念、屬性和關聯(lián),并抽象成領域模型(domain model)。在擲骰子游戲中有3個概念,分別是玩家、骰子、游戲。三者的關聯(lián)是游戲包含一個玩家和兩個骰子。玩家有名字,骰子有點數(shù),這些都是屬性。這一步驟完成后,我們得到了一個領域模型,標志著面向對象分析工作結束。

下一個步驟是分配對象職責并繪制交互圖。從這里我們開始進入設計階段。前面提到過,設計階段討論的對象主要指軟件對象。這一步驟我們主要關注如何將概念、關聯(lián)以及交互映射成軟件對象。通常一個概念(領域對象)對應一個軟件對象,但這不是絕對的。這個步驟不會關注某個類的具體細節(jié),而是考察各個類在軟件中如何協(xié)作。下面描述了游戲中各個概念的職責和概念之間的交互:

玩家:玩游戲 
游戲:擲骰子1 
游戲:獲得骰子1點數(shù) 
游戲:擲骰子1 
游戲:獲得骰子2點數(shù) 
游戲:判斷并展示結果

使用UML可以更直觀的展示概念和交互,比如下面的時序圖

image.png

可能你已經(jīng)注意到,這里的描述和領域模型稍有不同。在領域模型中,“擲骰子”行為是“玩家”所擁有的。這是因為在設計階段必須考慮方案的實施(編碼),不能簡單的將領域對象直接映射為軟件對象。軟件設計可以從真實世界中獲得靈感,但絕不是對真實世界的簡單模擬。

最后一個步驟是,定義設計類圖。在這里對具體的類進行詳細設計,以指導后續(xù)的編碼工作。

類:DiceGame
屬性:die1 類型:Die
屬性:die2 類型:Die
行為:play()

類:Die
屬性:faceValue 類型:int
行為:getFaceValue(): int
行為:roll()

至此分析和設計工作告于段落。這里再說一點,分析和設計工作的產(chǎn)出物可以使用任何形式來展示。這里之所以選擇UML,是因為UML具有直觀形象、應用廣泛、提供多層次視角等優(yōu)點。

一個成功的軟件必須是貼合用戶實際需求的。面向對象分析和設計可以幫助開發(fā)團隊做到這一點,面向對象分析和設計產(chǎn)出的軟件模型更接近領域模型。領域驅動設計是另一種提高軟件價值的開發(fā)方法,在這里不做討論。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容