OOA面向?qū)ο蠓治?/strong>
?
面向?qū)ο蠓治霎a(chǎn)生三種分析模型
?功能模型(即用例模型à作為輸入)
?對象模型:對用例模型進行分析,把系統(tǒng)分解成互相協(xié)作的分析類,通過類圖/對象圖描述對象/對象的屬性/對象間的關(guān)系,是系統(tǒng)的靜態(tài)模型
?動態(tài)模型:描述系統(tǒng)的動態(tài)行為,通過時序圖/協(xié)作圖描述對象的交互,以揭示對象間如何協(xié)作來完成扛鼉嚀宓撓美?單個對象的狀態(tài)變化/動態(tài)行為可以通過狀態(tài)圖來表達
OOD面向?qū)ο蟮脑O(shè)計
OOD是對OOA的細化
?沒有嚴格的界線
?OOD的結(jié)果直接用于編碼
?與OOA的輸出一樣,只是更加詳細完善
OOA與OOD的區(qū)別
?OOA偏重于理解問題,描述軟件要做什么,而OOD偏重于理解解決方案,描述軟件要如何做
?OOA只考慮理想的設(shè)計,不關(guān)心技術(shù)與實現(xiàn)底層的細節(jié),而OOD需要得到更具體詳細更接近于真實的代碼的設(shè)計方案
?在設(shè)計結(jié)果的描述上,OOA偏重于描述對象的行為,OOD偏重于描述對象的屬性與方法
?OOA只關(guān)注功能性需求,OOD還需要關(guān)注非功能性需求
OOA步驟
?從用例中提取實體對象/實體類
?添加邊界類
?添加控制類
?提取類的屬性(一般省略,放到OOD中)
?提取分析類間的關(guān)系
?繪制類圖/時序圖
?編制術(shù)語表(可選)
三種分析類
分析類
?實體類(Entity Class)
?邊界類
?控制類
實體類
?是應(yīng)用中的核心類
?與現(xiàn)實事物相對應(yīng)的類
?用于長期保存系統(tǒng)中的信息,以及針對這些信息的相關(guān)處理行為
?一般實體類的對象和應(yīng)用系統(tǒng)本身有相同的生命周期
邊界類
?從與那些系統(tǒng)和外界進行交互的對象中歸納和抽象出來的
?邊界類是系統(tǒng)內(nèi)的對象和系統(tǒng)外的參與者的聯(lián)系媒介
?外界的消息只有通過邊界類的對象才能發(fā)送給系統(tǒng)
?大多數(shù)為用戶界面(表示層)
控制類
?管理實體對象與邊界對象之間的交互的仲裁對象
?通過控制類協(xié)調(diào)系統(tǒng)內(nèi)邊界類與實體類之間的交互
1、提取實體類
?用例驅(qū)動:從用例模型中找名詞或名詞短語,再進行篩選
?候選實體類:用戶/帳戶/系統(tǒng)管理員/聊天服務(wù)器/消息
?用戶在系統(tǒng)中表現(xiàn)為帳戶,因此用戶就不需要了
?本項目中系統(tǒng)管理員僅完成啟動/關(guān)閉系統(tǒng)的作用,而沒有其他管理任務(wù),也不需要作為一個實體類
?聊天系統(tǒng):代表整個系統(tǒng),大多數(shù)情況這個實體對象不必存在
?聊天消息:聊天的內(nèi)容本項目不需要保存
?可以得到實體類: 帳戶類
2.添加邊界類
?交互型軟件的邊界類就是用戶界面
?邊界類:
?注冊界面:注冊類
?登陸界面:登陸類
?聊天界面:聊天類
3.添加控制類
?有人認為每個用例確定一個控制類,但可能會得到很小的控制類,應(yīng)該考慮進行恰當?shù)暮喜?nbsp;
?我們項目可以把注冊/登陸/聊天用例合并為一個控制器類
4、提取屬性
?建議放到設(shè)計時再提取,因為現(xiàn)在只能對屬性進行與語言無關(guān)的描述
5、提取分析類之間的關(guān)系
?一對一
?一對多
?多對對
?歸納關(guān)系
?
6、繪制類圖(參見demo)
7、繪制時序圖(流程簡單可省略)
8、編制術(shù)語表(羅列系統(tǒng)模型中需要澄清的術(shù)語)
架構(gòu)分析
?架構(gòu)分析主要從宏觀上考慮一個軟件系統(tǒng)應(yīng)該如何組織
?目的:通過科學的解析,將整個軟件系統(tǒng)劃分為不同的組件,并準確定義出組件和組件之間的接口
?最典型的架構(gòu)模式:分層模式(Layer),客戶/服務(wù)器模式,MVC模式等等
?獲得架構(gòu)圖
OOD步驟
?細化重組類
?細化和實現(xiàn)類間關(guān)系,明確其可見性
?增加屬性,指定屬性的類型與可見性
?分配職責,定義執(zhí)行每個職責的方法
?對消息驅(qū)動的系統(tǒng),明確消息傳遞方式
?利用設(shè)計模式進行局部設(shè)計
?畫出詳細的類圖與時序圖
本博客為學習交流用,凡未注明引用的均為本人作品,轉(zhuǎn)載請注明出處,如有版權(quán)問題請及時通知。由于博客時間倉促,錯誤之處敬請諒解,有任何意見可給我留言,愿共同學習進步。