一個狀態可以進一步地細化為多個子狀態,我們將可以進一步細化的狀態稱作復合狀 態。子狀態之間有"或關系"和"與關系"兩種關系。
或關系(如 圖4)說明在某一時刻僅可 到達一個子狀態。
例如,一個處于行駛狀態的汽車,在"行駛"這個復合狀態中有向前和向 后兩個不同的子狀態,在某一時刻汽車要么向前,要么向后。與關系( 如圖5)說明復合狀 態中在某一時刻可同時到達多個子狀態(稱為并發子狀態)。具有并發子狀態的狀態圖稱 為并發狀態圖。


(2) 轉移 狀態圖中狀態之間帶箭頭的連線被稱為轉移。狀態的變遷通常是由事件 觸發的,此時應在轉移上標出觸發轉移的事件表達式。如果轉移上未標明事件,則表示在 源狀態的內部活動執行完畢后自動觸發轉移。
3. 順序圖 順序圖(Sequence Diagram)用來描述對象之間動態的交互關系,著重體現對象間消息 傳遞的時間順序。
順序圖存在兩個軸:水平軸表示不同的對象,垂直軸表示時間。
順序圖 中的對象用一個帶有垂直虛線的矩形框表示,并標有對象名和類名。垂直虛線是對象的生 命線,用于表示在某段時間內對象是存在的。對象間的通信通過在對象的生命線間畫消息 來表示。消息的箭頭指明消息的類型。
順序圖中的消息可以是信號(Signal)、操作調用或類似于C++中的RPC(RemoteProce dure Calls)和Java中的RMI(Remote Method Invocation)。當收到消息時,接收對象立即 開始執行活動,即對象被激活了。
通過在對象生命線上顯示一個細長矩形框來表示激活。 消息可以用消息名及參數來標識。
消息也可帶有順序號,但較少使用。消息還可帶有 條件表達式,表示分支或決定是否發送消息。如果用于表示分支,則每個分支是相互排斥 的,即在某一時刻僅可發送分支中的一個消息。
在順序圖的左邊可以有說明信息,用于說明消息發送的時刻、描述動作的執行情況以 及約束信息等。一個典型的例子就是用于說明一個消息是重復發送的。
另外,可以定義兩 個消息間的時間限制。
一個對象可以通過發送消息來創建另一個對象,當一個對象被刪除或自我刪除時,該 對象用"X"標識。
另外,在很多算法中,遞歸是一種很重要的技術。當一個操作直接或間接調用自身時 ,即發生了遞歸。
產生遞歸的消息總是同步消息,返回消息應是一個簡單消息。
4. 合作圖 合作圖(Collaboration Diagram)用于描述相互合作的對象間的交互關系和鏈接關系 。
雖然順序圖和合作圖都用來描述對象間的交互關系,但側重點不一樣。順序圖著重體現 交互的時間順序,合作圖則著重體現交互對象間的靜態鏈接關系。
合作圖中對象的外觀與順序圖中的一樣。如果一個對象在消息的交互中被創建,則可 在對象名稱之后標以{new}。
類似地,如果一個對象在交互期間被刪除,則可在對象名稱之 后標以{destroy}。對象間的鏈接關系類似于類圖中的聯系(但無多重性標志)。通過在對 象間的鏈接上標志帶有消息串的消息(簡單、異步或同步消息)來表達對象間的消息傳遞 。
(1) 鏈接 鏈接用于表示對象間的各種關系,包括組成關系的鏈接(Composition Li nk)、聚集關系的鏈接(Aggregation Link)、限定關系的鏈接(Qualified Link)以及導航 鏈接(Navigation Link)。
各種鏈接關系與類圖中的定義相同,在鏈接的端點位置可以顯 示對象的角色名和模板信息。
(2) 消息流 在合作圖的鏈接線上,可以用帶有消息串的消息來描述對象間的交互。 消息的箭頭指明消息的流動方向。
消息串說明要發送的消息、消息的參數、消息的返回 值以及消息的序列號等信息。