基本概念
對象建模技術包括三種模型,即對象模型、動態模型和功能模型。對象模型是通過描述系統中的對象、對象間的關係,標識類中的對象的屬性和操作表組織系統的靜態結構,是三種模型中最重要的模型,它為動態模型和功能模型提供了實質性框架。動態模型描述與時間操作和次序有關的系統屬性,它關心的是控制,從事件和狀態的角度描述系統的數據結構。功能模型從值和功能的角度描述系統的計算結構,它不考慮系統乾什麼或如何乾。一個典型的軟體肯定包含了這三種性質: 它使用數據結構(對象模型),順序執行操作(動態模型),並且完成值的變化(功能模型)。這三種模型描述的是系統的不同方面,但各種模型之間又互相聯繫,對象模型描述了動態模型和功能模型中操作的數據結構,對象模型中的操作對應於動態模型中的事件及功能模型中的功能。而功能模型描述了對象模型中的對象喚醒和動態模型中行為喚醒的功能。
方法研究
三種模型
OMT 方法用三種類型的模型刻畫一個系統:對象模型、動態模型和功能模型。對象模型描述系統中的對象和它們之間的聯繫;動態模型描述系統對象間的相互作用;功能模型描述系統中數據的變化。每種模型套用於開發的不同階段,以幾種不同的觀點來刻畫不同的模型,一個軟體系統的完全描述要求包含所有這三種模型。
(1)對象模型。對象模型是三種模型中最重要的,通過描述系統中的對象、對象之間的聯繫、屬性以及刻畫每個對象類的屬性和操作來表示系統的靜態結構。系統建模圍繞對象來構造系統而不是圍繞功能來構造系統,對象模型更接近實際套用,而且容易修改,能快速地對變化做出反應。對象模型提供一種直觀的圖形表示,並且文檔化系統結構有利於與用戶之間進行有針對性的交流,從而有利於系統模型的修改和完善。
(2)動態模型。動態模型描述了系統時間空間內對象的變化和對象之間關係的變遷,即系統所關注的時序關係。動態模型的主要概念是表示外部觸發的事件和表示對象值的狀態,它採用狀態圖來描述一個特定類的事件、狀態和狀態變遷的模式。狀態圖就是狀態和事件的網路,動態模型由多個狀態圖組成,從而顯示了整個系統活動的模式。
(3)功能模型。功能模型描述系統內的計算。功能模型由多個數據流圖組成,這些數據流圖描述數據流從外部輸入值,經過計算和內部數據存儲,再向外部輸出的全過程。功能模型也包含了對象模型中值之間的約束。三種模型的關係如圖所示。
關係
(1)連結和關聯。
連結(Link)和關聯(Association)是建立對象之間、類之間以及對象和類之間的聯繫。連結是在對象實例之間的一種物理或概念連線。在數學上,一個連結是一個元組,即一個對象實例的有序列表。一個連結是一個關聯的實例。關聯描述了具有公共結構和共同語義的連結的組合。所有在關聯中的連結都與相同類的對象組連線。關聯和連結經常在問題敘述中以動詞身份出現,一個關聯描述了用相同方式的可能的連結的集合,這種方式就是一個類描述所有可能的對象的一個集合。在類圖中每個關聯相對應於實例圖的連結集合,就好像每個類相對應於對象集合一樣。一個關聯的OMT表示是在類與類之間畫一條線,連線是在對象與對象之間畫一條線,關聯名用斜體字。如果類與類之間只有一種關聯(單一關聯),則關聯名可以省略。
(2)概括和繼承。
概括(Generalization)和繼承(Inheritance)是在類與類之間相似與共享的強有力的抽象,並保留它們自己的不同之處。概括是描述在一個類和提取該類的一個或更多版本之間的關係。這個被提取的類稱為“超類”(SuperClass),而每個被提取的版本稱為子類(Sub Class)。把子類的公共屬性和操作放在超類,可以被每個子類共享;每個子類則繼承它所屬超類的特徵。因為子類的一個實例同時也是超類的一個實例,因此概括也稱為“is-a”關係。
概括和繼承可以蘊含在任意層次之中,術語祖先和子孫涉及多層次的一類概括,子類的一個實例同時也是所有它的祖先類的一個實例,一個實例的狀態包含了每個祖先類的每個屬性的一個值。在任一祖先類上的任一操作可用於一個實例,每個子類不僅繼承所有祖先的特徵,而且還可以加入它自己本身的屬性和操作。
模型設計
系統分析
一個現實問題可以更自然更實際地被看成一組對象及其相關方法的集合。面向對象設計的初始元素是對象。以後,隨著對通用性的標識,對象聚集成類,然後又進一步子類化成更抽象的類,最高層的抽象稱為一個框架。一個框架就是一個類集,這些類表達了對一組相關應用程式的設計。從實質上講面向對象的問題求解是從已有的類庫開始並重用它們,根據系統要求剪裁這些通用類。這種方法就需要提供標識定義和組織類及其方法和訊息的規則,還需要能提供組織類庫的策略和從已有的框架或類庫建造應用程式的準則。
(1)構造對象模型
分析需求的第一步是構造對象模型,對象模型表示了客觀系統的靜態數據結構,它描述了現實世界的對象、類及它們之間的關係屯其信息來源於問題陳述,套用領域的專業知識和客觀世界的一般性知識,初始的分析模型很中能包含錯誤,這些錯誤必須在以後的反覆分析中加以更正。在構造對象模型時,首先確定對象、類; 然後確定對象之間的關聯,包括聚集。也要確定對象屬性和鏈。使用繼承來組織和細化對象、類。將緊耦合的類和關聯的構造成模組,可以用簡潔的文字,對對象模型中的信息加以補充。
(2)開發動態模型
動態模型表示了系統的行為及其對象。在分析階段不考慮算法的執行,算法是實現模型中的一部分,對於靜態數據存儲來說(如資料庫),動態模型毫無意義。動態模型對相互作用的系統具有很重要的意義。構造動態模型時先準備典型情況的腳本,然後確定系統和外部事物之間的外部檔案,為各個主對象建立狀
態圖,以表示對象接收和傳送的檔案模式及其檔案執行的動作,狀態圖的結果集合構成了動態模刑。
(3)構造功能模型
功能模型是用來說明位是如何計算的,而不考慮動作順序。它表明了值之間的依賴關係及其相關的功能,功能模型的構造按如下步驟進行:
a.確定輸入、輸出值;
b.建立數據流圖(DFD);
c.描述函式;
d.確定約束條件;
e.確定最佳化標準。
分析的最後階段,還要驗證、重複並完善,細化上述三種模型。
系統設計
系統分析完畢就進入系統設計。系統設計是問題求解及建立解答的高級策略。它包括將系統分解成子系統的策略,子系統的硬、軟體配置,詳細設計框架的構造等方法策略。系統設計要制定解決問題的基本方法。將系統分解成子系統的全面組織結構。目的是使多個設計者能各自獨立地進一步設計各個子系統,應當制定以下策略:
(1)系統分解。可將系統分成水平層次和垂直塊。系統自身也就是層次和塊的混合物。
(2)確定固有的並發性;
(3)處理器任務的分配;
(4)數據存儲的管理。可以用記憶體數據結構、檔案、資料庫來實現。
(5)全局資源的處理
(6)選擇軟體控制機制
(7)邊界條件的處理
(8)設定折衷優先權
對象設計
對象設計時對分析模型進行詳細分析和闡述,並幾奠定實現的基礎。它要制定出實現系統所必須的策略但不涉及語言的具體細節。分析階段確定所實現的內容,系統設計階段確定實現策略,而對象設計則確定對實現要用到的類,關聯的完整定義,實現操作的算法。對象設計與傳統結構的初步階段相似。實現對象設計的步驟如一下:
(1)將三種模型結合起來。。在分析階段我們得到了對象、動態和功能模型。其中對象模型是組織對象設計的主要框架,將動態模型中的動作及活動以及功能模型中的處理轉換成操作,加人到對象的類中。
(2)實現算法的設計。功能模型中的各個操作都要用算法來表示。算法是用來說明如何執行操作的。算法
設計首光要選擇最小開銷的算法,要考慮到計算複雜度,易理解,易實現這些因素。在選擇算法時,涉及到選擇算法使用的數據結構的問題。在對象設計階段,必須為有效的算法選擇其數據結構形式。常見的數據結構都是包容類的實例。如數組、表、佇列、棧、集合、字典,關聯等,定義新的內部類和操作,在展開算法時,可能需要引人一些新的對象、類,用來存放中間結果。在分解高層操作時,也可能引人一些新的底層操作。
(3)最佳化設計。分析模型概括了系統的邏輯信息,但設計模則必須加人詳細內容以支持有效的信息訪問。效率低但語法正確的分析模型應當進行最佳化,日的是實現更為有效。最佳化時要考慮增加冗餘關聯,以減少訪問開銷,重新調整執行次序以提高效率。定義新的對象或新類來隱藏或存儲在計算形式中,避免重複計算的開銷。
(4)實現系統設計中的軟體控制。
(5)調整繼承。隨著對象設計過程的深八,經常調整類及操作的定義以提高繼承的數目。
(6)設計關聯的實現。關聯是對象模型的紐帶,它提供了對一象之間的訪問路徑。
(7)確定對象表示。對象大多數是直接實現的,但設計者必須決定何時使用基本類型來表示對象,何時將相關對象組合起來。
(8)物理組裝。程式必須組裝成物理模組,將類、關聯封裝起來。