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