第三部分 面向對象設計
3.1 面向對象設計(OOD)的定義?
在面向對象分析階段,已經針對用戶需求建立起用面向對象概念描述的系統分析模型。在設計階段,要考慮為實現系統而采用的計算機設備、操作系統、網絡、數據庫管理系統以及所采用的編程語言等有關因素,進一步運用面向對象的方法對系統進行設計,最后形成一個可以實現的設計模型,即面向對象設計模型。
3.2 面向對象設計(OOD)與面向對象分析(OOA)的關系?
在面向對象分析階段,針對的是現實世界,把需求轉化為面向對象概念所建立的模型,以易於理解問題域和系統責任,最終建立一個映射問題域,滿足用戶需求,獨立於實現的OOA模型,面向對象的設計就是在面向對象分析的基礎上運用面向對象方法主要解決與實現有關的問題,目標是產生一個符合具體實現條件的OOD模型。由於OOD以OOA為基礎,且OOA與OOD采用一致的表示法,使得從OOA到OOD不存在轉換,只需做必要的修改與調整。OOA與OOD之間不存在傳統方法中分析與設計之間的鴻溝,二者能夠緊密銜接。OOA與OOD之間不強調階段划分,但是OOA與OOD有着不同的側重點和不同的分工,並因此具有不同的開發過程及具體策略。“分析”只針對問題域和系統責任,不考慮實現有關的因素,建立一個獨立於實現的OOA模型;”設計“則考慮與實現有關的問題,如選用的編程語言、數據庫系統和圖形用戶界面等,建立一個針對具體實現的OOD模型。
3.3 面向對象設計(OOD)的特點?
- 以面向對象的分析為基礎,一般不依賴結構化分析
- 與相應的OOA方法共同構成OOA&D方法體系,OOA和OOD采用一致的概念與原則,但屬於軟件生命周期的不同階段,有不同的目標和策略
- 較全面地體現了面向對象方法的概念與原則
- 大多數OOD方法獨立於編程語言,但是具體應用OOD時,則要考慮特定編程語言,因為它通過面向對象的設計所得到的系統模型,要由確定的編程語言實現
3.4 面向對象設計(OOD)過程以及過程模型?
在OOA 階段只考慮問題域和系統責任,在OOD階段則要考慮與具體實現有關的問題,這樣做的目的是
- 使反映問題域本質的總體框架和組織結構長期穩定,而細節可變
- 把穩定部分(問題域部分)與可變部分(與實現有關的部分)分開,使得系統能從容地適應變化
- 有利於同一個分析模型用於不同的設計和實現
- 支持系統族和相似系統的分析與設計
- 使一個成功的系統具有超出其生存期的可擴展性
為達到上述目的,設計如下的面向對象設計模型

從一個側面觀察OOD模型,它包括一個核心部分,即問題域部分;還包括四個外圍部分,即人機交互部分、控制驅動部分、數據管理部分以及構件及部署部分。初始的問題域部分即為OOA模型,要按照實現條件對其進行補充與調整;人機交互部分即人機界面設計部分;控制驅動部分即用來定義和協調並發的各個控制流;數據管理部分用來對永久對象的存取建模;構件及部署部分中的構件模型用於描述構件以及構件之間的關系,部署模型用於描述結點、結點之間的關系以及構件在結點上的分布。
OOD過程
- 問題域部分的設計
- 人機交互部分的設計
- 控制驅動部分的設計
- 數據管理部分的設計
- 構件及部署部分的設計
3.4.1 問題域部分的設計
問題域部分是由與問題有關的對象構成,並且在特定的實現平台上提供用戶所需功能的組成部分。它是在OOA模型基礎上按實現的要求進行必要的修改、調整和細節補充而得到的。
問題域部分設計過程是:
- 輸入OOA模型,並進行必要的修改
- 逐一考察影響問題域部分設計的實現條件,對模型作相應的調整與補充
- 建立分析文檔和設計文檔之間的映射關系
設計內容及策略
(1)針對編程語言支持能力的調整:包括對繼承的調整和對多態性的調整
(2)增加一般類,提供共同協議
(3)為實現復用采取的設計策略:直接復用;刪除可復用類的多余信息;通過繼承復用;刪除多余信息,通過繼承而復用
(4)提高性能:從數據傳輸時間、數據存取時間、數據處理時間三個方面考慮
(5)為實現對象永久存儲所做的修改
(6)完善對象的細節:彌補OOA模型的不足;解決OOA結點推遲考慮的問題;設計對象的操作;設計表示關聯的屬性(一對一、一對多);設計表示整體-部分關系的屬性
(7)定義對象實例
(8)修改或補充輔助模型及模型規約
3.4.2 人機交互部分的設計
人機交互部分突出人如何命令系統以及系統如何向用戶提交信息。設計人機交互就是要設計輸入與輸出,其中所包含的對象(稱作界面對象)以及其間的關系構成了系統的人機交互部分的模型。
人機界面的OO設計:一般是以一種選定的界面支持系統為基礎,利用它所支持的界面構造成分,設計一個可滿足人機交互需求、適合使用者特點的人機界面設計模型。
- 界面支持系統:包括窗口系統、圖形用戶界面、可視化編程環境
- 界面元素:窗口、菜單、對話盒、滾動條、其他
設計過程和策略:
面向對象的人機界面設計是在人機交互需求分析的基礎上,以選定的界面支持系統為背景,選擇實現人機交互所需的界面元素來構造人機界面,並用面向對象的概念和表示法來表示這些界面元素以及它們之間的關系,從而形成整個系統的OOD模型的人機交互部分
- 選擇和掌握界面支持系統:考慮硬件、操作系統以及編程語言;界面實現的支持級別;界面風格與視感;其他(軟件價格、熟悉哪種操作系統)
- 根據人機交互需求選擇界面元素:系統的啟動;高層命令組織結構的實現;基本命令的執行;異常命令的輸入;詳細交互過程的輸入與輸出
- 用OO概念表示界面元素:對象和類;屬性與操作;整體-部分結構;一般-特殊結構;關聯;消息
- 設計原則:盡量減少用戶輸入;有效性檢查(如格式檢查、內容檢查);
人機交互部分設計准則
- 易學、易用、操作方便
- 盡量保持一致性
- 及時提供有意義的反饋
- 盡量減少用戶的記憶
- 減少重復的輸入和操作
- 提供具有語境敏感的功能
- 防止災難性錯誤
ps:命令
基本命令:使用一項獨立的系統功能的命令
命令步:在執行一條基本命令的交互過程中所包含的具體輸入步驟
高層命令:一條命令是在另一條命令的引導下完成的
3.4.3 控制驅動部分的設計
控制驅動部分由系統中全部主動類構成,這些主動類描述了系統中所有的主動對象,每個主動對象是系統中一個控制流的驅動者。一個控制流就是一個進程(既是處理機資源的分配單位又是其他資源的分配單位)或者線程(僅僅是處理機資源的分配單位)
設計過程和策略:
- 選擇軟件體系結構風格:綜合考慮各種因素,做出合理的權衡
- 確定系統分布方案:從數據分布和功能分布考慮,包括對象的分布、類的分布、類圖的分布和在類規約中的表示
- 識別控制流:以結點為單位識別控制流;從用戶需求、用例來認識控制流;實現並行計算、結點之間通信的控制流;對其他控制流進行協調的控制流
- 用主動對象表示控制流
- 把控制驅動看成一個包
3.4.4 數據管理部分的設計
數據管理部分負責將應用系統中的對象在選定的數據管理系統中進行存儲,並將存儲結果恢復到應用系統,將實現數據存儲、檢索、管理、維護的系統稱為數據管理系統,包括文件系統和數據庫系統兩大類。
由於目前面向對象數據庫還沒有廣泛使用,所以我們還是以關系型數據庫為主,存儲檢索數據。
數據庫(DB):數據庫是長期存儲在計算機內、有組織、可共享的數據集合
數據庫管理系統(DBMS):DBMS是用於建立、使用和維護數據庫的軟件。它對數據庫進行統一的管理和控制,以保證數據庫的安全性和完整性
關系數據庫與面向對象方法不匹配,原因在於:關系數據庫不是全面支持面向對象中的全部概念,如類間關系(繼承、多態)
非關系型數據庫:優點是存儲任何對象,缺點是對非關系型數據庫很難進行結構化操作
面向對象數據庫:采用面向對象數據模型的數據庫稱為面向對象數據庫,支持面向對象的基本概念
數據庫設計的基本流程:
- 概念設計階段:將用戶下信息要求統一到一個整體邏輯結構中,此結構能表達用戶的要求,且獨立於任何DBMS軟件和硬件
- 邏輯設計階段:將概念設計階段得到的結果轉換為與選用的DBMS所支持的數據模型向符合的邏輯結構
- 物理設計階段:對給定的邏輯數據模型選取一個最適合應用要求的物理結構。數據庫的物理結構包括數據庫的存儲記錄格式、存儲記錄安排、存取方法等,它是完全依賴於給定的硬件環境和數據庫產品的
3.4.5 構件及部署部分的設計
構件圖和部署圖分別用於對系統進行構件設計和部署設計。
構件圖設計:利用構件對面向對象系統物理實現方面建模,其中一個主要建模元素是制品,可以把制品分為工作產品制品(開發過程的產物,如源代碼及數據文件等),可部署的制品(如動態鏈接庫dll或可執行程序exe文件)。對具體的物理構件進行建模,直至能對產生的構件進行部署。
部署圖設計:對系統的網絡結構進行拓撲,也可以用它展示部署在結點上的構件。主要用於對嵌入式系統和分布式系統進行建模
具體可參考構件圖和部署圖的設計
參考書籍
《面向對象的系統分析》(第2版) 邵維忠 楊芙清 著
《UML面向對象技術教程》 王少鋒 編著
