陳小群博士
八十年代末以來,隨著物件導向技術成為研究的熱點出現了幾十種支援軟體開發的物件導向方法。其中,Booch, Coad/Yourdon, OMT, 和Jacobson的方法在物件導向軟體開發界得到了廣泛的認可。特別值得一提的是統一的建模語言UML
(Unified Modeling Language),該方法結合了Booch, OMT, 和Jacobson方法
的優點,統一了符號體系,並從其它的方法和工程實踐中吸收了許多經過實際檢驗的概念和技術。UML方法自去年提出後到現在已發展到1.1版,並已提交給對象管理集團OMG,申請成為物件導向方法的標準。
物件導向方法都支援三種基本的活動:識別對象和類,描述對象和類之間的關係,以及通過描述每個類的功能定義對象的行為。
為了發現對象和類,開發人員要在系統需求和系統分析的文檔中尋找名詞和名詞短語,包括可感知的事物(汽車、壓力、感應器);角色(母親、教師、政治家);事件(著陸、中斷、請求);互相作用(借貸、開會、交叉);人員;場所;組織;裝置;和地點。通過瀏覽使用系統的指令碼發現重要的對象和其責任,是物件導向分析和設計過程的初期重要的技術。
當重要的對象被發現後,通過一組互相關聯的模型詳細表示類之間的關係和對象的行為,這些模型從四個不同的側面表示了軟體的體繫結構:靜態邏輯、動態邏輯、靜態物理和動態物理。
靜態邏輯模型描述執行個體化(類別成員關係)、關聯、聚集(整體/部分)、和一般化(繼承)等關係。這被稱為物件模型。一般化關係表示屬性和方法的繼承關係。定義物件模型的圖形符號體系通常是從用於資料建模的實體關聯圖匯出的。對設計十分重要的約束,如基數(一對一、一對多、多對多),也在物件模型中表示。
動態邏輯模型描述對象之間的互相作用。互相作用通過一組協同的對象,對象之間訊息的有序的序列,參與對象的可見度定義,來定義系統運行時的行為。Booch方法中的對象互動作用圖被用來描述重要的互相作用,顯示參與的對象和對象之間按時間排序的訊息。可見度圖用來描述互相作用中對象的可見度。對象的可見度定義了一個對象如何處於向它發送訊息的方法的範圍之中。例如,它可以是方法的參數、局部變數、新的對象、或當前執行方法的對象的部分。
靜態物理模型通過模組描述代碼的布局。動態物理模型描述軟體的進程和線程體繫結構。
以下章節我們將簡要介紹上述物件導向方法,並對這些方法進行比較。
***********************************************************************
Booch方法的過程包括以下步驟:
. 在給定的抽象層次上識別類和對象
. 識別這些對象和類的語義
. 識別這些類和對象之間的關係
. 實作類別和對象
這四種活動不僅僅是一個簡單的步驟序列,而是對系統的邏輯和物理視圖不斷細化的迭代和漸增的開發過程。
類和對象的識別包括找出問題空間中關鍵的抽象和產生動態行為的重要機制。開發人員可以通過研究問題域的術語發現關鍵的抽象。語義的識別主要是建立前一階段識別出的類和對象的含義。開發人員確定類的行為(即方法)和類及對象之間的互相作用(即行為的規範描述)。該階段利用狀態轉移圖描述對象的狀態的模型,利用時態圖(系統中的時態約束)和對象圖(對象之間的互相作用)描述行為模型。
在關係識別階段描述靜態和動態關聯式模式。這些關係包括使用、執行個體化、繼承、關聯和聚集等。類和對象之間的可見度也在此時確定。
在類和對象的實現階段要考慮如何用選定的程式設計語言實現,如何將類和對象組織成模組。
在物件導向的設計方法中,Booch強調基於類和對象的系統邏輯視圖與基於模組和進程的系統物理視圖之間的區別。他還區別了系統的靜態和動態模型。然而,他的方法偏向於系統的靜態描述,對動態描述支援較少。
Booch方法的力量在於其豐富的符號體系,包括:
. 類圖(類結構-靜態視圖)
. 對象圖(對象結構-靜態視圖)
. 狀態轉移圖(類結構-動態視圖)
. 時態圖(對象結構-動態視圖)
. 模組圖(模組體繫結構)
. 進程圖(進程體繫結構)
用於類和對象建模的符號體系使用注釋和不同的圖符(如不同的箭頭)表達詳細的資訊。Booch建議在設計的初期可以用符號體系的一個子集,隨後不斷添加細節。對每一個符號體系還有一個文本的形式,由每一個主要結構的描述模板組成。符號體系由大量的圖符定義,但是,其文法和語義並沒有嚴格地定義。
***********************************************************************
Rumbaugh的OMT方法從三個視角描述系統,相應地提供了三種模型,物件模型,動態模型和功能模型。物件模型描述對象的靜態結構和它們之間的關係。主要的概念包括:
. 類
. 屬性
. 操作
. 繼承
. 關聯(即關係)
. 聚集
動態模型描述系統那些隨時間變化的方面,其主要概念有:
. 狀態
. 子狀態和超狀態
. 事件
. 行為
. 活動
功能模型描述系統內部資料值的轉換,其主要概念有:
. 加工
. 資料存放區
. 資料流
. 控制流程
. 角色(源/潭)
該方法將開發過程分為四個階段:
1 分析
基於問題和使用者需求的描述,建立現實世界的模型。分析階段的產物有:
. 問題描述
. 物件模型=對象圖+資料詞典
. 動態模型=狀態圖+全域事件流圖
. 功能模型=資料流圖+約束
2 系統設計
結合問題域的知識和目標系統的體繫結構(求解域),將目標系統分解為子系統。
3 對象設計
基於分析模型和求解域中的體繫結構等添加的實現細節,完成系統設計。主要產物包括:
. 細化的物件模型
. 細化的動態模型
. 細化的功能模型
4 實現
將設計轉換為特定的程式設計語言或硬體,同時保持可追蹤性、靈活性和可擴充性。
***********************************************************************
Coad/Yourdon方法嚴格區分了物件導向分析OOA和物件導向設計OOD。該方法利用五個層次和活動定義和記錄系統行為,輸入和輸出。這五個層次的活動包括:
. 發現類及對象。描述如何發現類及對象。從應用領域開始識別類及對象,形成整個應用的基礎,然後,據此分析系統的責任。
. 識別結構。該階段分為兩個步驟。第一,識別一般-特殊結構,該結構捕獲了識別出的類的階層;第二,識別整體-部分結構,該結構用來表示一個對象如何成為另一個對象的一部分,以及多個對象如何組裝成更大的對象。
. 定義主題。主題由一組類及對象組成,用於將類及物件模型劃分為更大的單位,便於理解。
. 定義屬性。其中包括定義類的執行個體(對象)之間的執行個體串連。
. 定義服務。其中包括定義對象之間的訊息串連。
在物件導向分析階段,經過五個層次的活動後的結果是一個分成五個層次的問題領域模型,包括主題、類及對象、結構、屬性和服務五個層次,由類及對象圖表示。五個層次活動的順序並不重要。
物件導向設計模型需要進一步區分以下四個部分:
.問題域部分(PDC)。物件導向分析的結果直接放入該部分。
.人機互動部分(HIC)。這部分的活動包括對使用者分類,描述人機互動的指令碼,設計命令階層,設計詳細的互動,產生使用者介面的原型,定義HIC類。
.任務管理部分(TMC)這部分的活動包括識別任務(進程)、任務所提供的服務、任務的優先順序、進程是事件驅動還是時鐘驅動、以及任務與其它進程和外界如何通訊。
.資料管理部分(DMC)。這一部分依賴於儲存技術,是檔案系統,還是關聯式資料庫管理系統,還是物件導向資料庫管理系統。
***********************************************************************
Jacobson方法與上述三種方法有所不同,它涉及到整個軟體生命週期,包括需求分析、設計、實現和測試等四個階段。需求分析和設計密切相關。需求分析階段的活動包括定義潛在的角色(角色指使用系統的人和與系統互相作用的軟、硬體環境),識別問題域中的對象和關係,基於需求規範說明和角色的需要發現use case,詳細描述use case。設計階段包括兩個主要活動,從需求分析模型中發現設計對象,以及針對實現環境調整設計模型。第一個活動包括從use case的描述發現設計對象,並描述對象的屬性、行為和關聯。在這裡還要把use case的行為指派給對象。
在需求分析階段的識別領域對象和關係的活動中,開發人員識別類、屬性和關係。關係包括繼承、熟悉(關聯)、組成(聚集)和通訊關聯。定義use case的活動和識別設計對象的活動,兩個活動共同完成行為的描述。Jacobson方法還將對象區分為語意物件(領域對象)、介面對象(如使用介面物件)和控制對象(處理介面對象和領域對象之間的控制)。
在該方法中的一個關鍵概念就是use case。use case是指行為相關的事務(transaction)序列,該序列將由使用者在與系統對話中執行。因此,每一個use case就是一個使用系統的方式,當使用者給定一個輸入,就執行一個use case的執行個體並引發執行屬於該use case的一個事務。基於這種系統檢視表,Jacobson將use case模型與其它五種系統模型關聯:
. 領域物件模型。use case模型根據領域來表示。
. 分析模型。use case模型通過分析來構造。
. 設計模型。use case模型通過設計來具體化。
. 實現模型。該模型依據具體化的設計來實現use case模型。
. 測試模型。用來測試具體化的use case模型。