【正文】
上運行的軟件構件以及軟件構件包含的邏輯單元 (如對象 、類 )等 。 配置圖可以幫助用戶理解分布式系統(tǒng) 。 結點 (Node)代表一個物理設備以及運行于其上的軟件系統(tǒng),如一臺 Unix主機、一個 PC終端、一臺打印機、一個傳感器等。如圖 , “ 客戶端 PC”和 “ 保險后臺服務器 ”就是兩個結點。結點表示為一個立方體,結點名放在左上角。 第 7章 面向對象開發(fā)方法與 UML 結點之間的連線表示系統(tǒng)之間進行交互的通信路徑,在UML中稱為連接 (Connection)。通信類型則放在連接旁邊的“ 《》 ”之間,表示所用的通信協(xié)議或網(wǎng)絡類型。 在配置圖中,構件代表可執(zhí)行的物理代碼模塊,如一個可執(zhí)行程序。邏輯上它可以與類圖中的包或類對應。因此,配置圖中顯示運行時各個包或類在結點中的分布情況。如在圖 , “ 保險后臺服務器 ” 結點中包含 “ 保險系統(tǒng) ” 、“ 保險對象數(shù)據(jù)庫 ” 和 “ 保險系統(tǒng)配置 ” 3個構件。 第 7章 面向對象開發(fā)方法與 UML 客戶端 PC保險單填寫界面保險系統(tǒng)保險對象數(shù)據(jù)庫保險系統(tǒng)配置配置保險政策配置用戶保險后臺服務器配置構件中包含的對象結點連接《 T C P / I P 》構件的界面 構件圖 配置圖 第 7章 面向對象開發(fā)方法與 UML 在配置圖中 , 構件代表可執(zhí)行的物理代碼模塊 , 如一個可執(zhí)行程序 。 邏輯上它可以與類圖中的包或類對應 。 因此 , 配置圖中顯示運行時各個包或類在結點中的分布情況 。 如在圖 中 , “ 保險后臺服務器 ” 結點中包含 “ 保險系統(tǒng) ” 、 “ 保險對象數(shù)據(jù)庫 ” 和 “ 保險系統(tǒng)配置 ” 3個構件 。 在面向對象方法中,類和構件等元素并不是所有的屬性和操作都對外可見。它們對外提供了可見操作和屬性,稱之為類和構件的界面。界面可以表示為一頭是小圓圈的直線。圖 中, “ 保險系統(tǒng) ” 構件提供了一個 “ 配置 ” 界面。配置圖中還顯示了構件之間的依賴關系, “ 保險系統(tǒng)配置 ” 構件依賴于這個 “ 配置 ” 界面。 第 7章 面向對象開發(fā)方法與 UML 一個面向對象軟件系統(tǒng)中可以運行很多對象 。 由于構件可以看作與包或類對應的物理代碼模塊 , 因此 , 構件中應包含一些運行的對象 。 配置圖中的對象與對象圖中的對象表示法一樣 。 圖 , “ 保險系統(tǒng)配置 ” 構件包含 “ 配置保險政策 ” 和 “ 配置用戶 ” 兩個對象 。 標準建模語言 UML的靜態(tài)建模機制是采用 UML進行建模的基礎 。 熟練掌握基本概 念 、 區(qū)分不同抽象層次以及在實踐中靈活運用 , 是三條最值得注意的基本原則 。 第 7章 面向對象開發(fā)方法與 UML UML動態(tài)建模機制簡介 UML的動態(tài)建模機制通過狀態(tài)圖 、 序列圖 、 協(xié)作圖和活動圖來實現(xiàn) 。 這四個動態(tài)模型中均用到面向對象技術中消息這個概念 。 前面我們已經(jīng)講過 , 對象間的交互是通過對象間消息的傳遞來完成的 , 當一個對象調用另一個對象中的操作時 , 即完成了一次消息傳遞 。 當操作執(zhí)行后 , 控制便返回到調用者 。 對象通過相互間的通信 (消息傳遞 )進行合作 , 并在其生命周期中根據(jù)通信的結果不斷改變自身的狀態(tài) 。 在 UML中,消息是用帶有箭頭的線段將消息的發(fā)送者和接收者相聯(lián)系來表示的,箭頭的類型表示消息的類型,如圖 所示。 第 7章 面向對象開發(fā)方法與 UML 簡單消息同步消息異步消息圖 消息的類型 第 7章 面向對象開發(fā)方法與 UML UML定義的消息類型有三種: (1) 簡單消息 (Simple Message) :表示簡單的控制流 , 用于描述控制如何在對象間進行傳遞 , 而不考慮通信的細節(jié) 。 (2) 同步消息 (Synchronous Message):調用者發(fā)出消息后必須等待消息返回 , 只有當處理消息的操作執(zhí)行完畢后 , 調用者才可繼續(xù)執(zhí)行自己的操作 。 操作的調用是一種典型的同步消息 。 (3) 異步消息 (Asynchronous Message):當調用者發(fā)出消息后不用等待消息的返回即可繼續(xù)執(zhí)行自己的操作,主要用于描述實時系統(tǒng)中的并發(fā)行為。 第 7章 面向對象開發(fā)方法與 UML 狀態(tài)圖 狀態(tài)圖 (State Diagram)用來描述一個特定對象的所有可能狀態(tài)及其引起狀態(tài)轉移的事件 。 大多數(shù)面向對象技術都用狀態(tài)圖表示單個對象在其生命周期中的行為 。 一個狀態(tài)圖包括一系列的狀態(tài)以及狀態(tài)之間的轉移 。 1) 狀態(tài) 所有對象都具有狀態(tài),狀態(tài)是對象執(zhí)行了一系列活動的結果。當某個事件發(fā)生后,對象的狀態(tài)將發(fā)生變化。狀態(tài)圖中定義的狀態(tài)有初態(tài)、終態(tài)、中間狀態(tài)和復合狀態(tài)。其中,初態(tài)是狀態(tài)圖的起始點,而終態(tài)則是狀態(tài)圖的終點。一個狀態(tài)圖只能有一個初態(tài),而終態(tài)則可以有多個。 第 7章 面向對象開發(fā)方法與 UML 圖 一個帶有動作域的狀態(tài) L o g i ne n try /ty p e “ lo g in ” ?e x i t / l o g i n ( u se r n a m e , p a ss w d )d o / g e t u se r n a m e第 7章 面向對象開發(fā)方法與 UML 中間狀態(tài)的圖形表示包括兩個區(qū)域:名字域和內部轉移域,如圖 。圖中內部轉移域是可選的,其中所列的動作將在對象處于該狀態(tài)時執(zhí)行,且該動作的執(zhí)行并不改變對象的狀態(tài)。 L o g i ne n try /ty p e “ lo g in ” ?e x i t / l o g i n ( u se r n a m e , p a ss w d )d o / g e t u se r n a m e圖 一個帶有動作域的狀態(tài) 第 7章 面向對象開發(fā)方法與 UML 一個狀態(tài)可以進一步地細化為多個子狀態(tài),我們將可以進一步細化的狀態(tài)稱為復合狀態(tài)。子狀態(tài)之間有 “ 或關系 ” 和“ 與關系 ” 兩種關系。或關系 (如圖 )說明在某一時刻僅可到達一個子狀態(tài)。例如,一個處于行駛狀態(tài)的汽車,在“ 行駛 ” 這個復合狀態(tài)中有向前和向后兩個不同的子狀態(tài),在某一時刻汽車要么向前,要么向后。與關系 (如圖 )說明復合狀態(tài)中在某一時刻可同時到達多個子狀態(tài) (稱為并發(fā)子狀態(tài) )。具有并發(fā)子狀態(tài)的狀態(tài)圖稱為并發(fā)狀態(tài)圖。 第 7章 面向對象開發(fā)方法與 UML 行駛向前 向后圖 “或關系 ” 的子狀態(tài) 第 7章 面向對象開發(fā)方法與 UML 行駛低速 高速向前 向后圖 一個具有并發(fā)子狀態(tài)的狀態(tài)圖 第 7章 面向對象開發(fā)方法與 UML 2) 轉移 狀態(tài)圖中狀態(tài)之間帶箭頭的連線稱為轉移。狀態(tài)的變遷通常是由事件觸發(fā)的,此時應在轉移上標出觸發(fā)轉移的事件表達式。如果轉移上未標明事件,則表示在源狀態(tài)的內部活動執(zhí)行完畢后自動觸發(fā)轉移。 第 7章 面向對象開發(fā)方法與 UML 序列圖 序列圖 (Sequence Diagram)用來描述對象之間動態(tài)的交互關系 , 體現(xiàn)對象間消息傳遞的時間序列 。 序列圖存在兩個軸:水平軸和垂直軸 。 水平軸表示不同的對象 , 垂直軸表示時間 。 序列圖中的對象用一個帶有垂直虛線的矩形框表示 , 并標有對象名和類名 。 垂直虛線是對象的生命線 , 用于表示在某段時間內對象是存在的 。 對象間的通信通過在對象的生命線間畫消息來表示。消息的箭頭指明消息的類型。圖 。 第 7章 面向對象開發(fā)方法與 UML a M e m be r : B ookB or r ow e rbor r ow ( t he C opy)1: okT oB or r ow2: B or r ow2. 1: B or r ow e d L i br a r yM e m be r t he L i br a r yM e m be r t he C opy : C opy t he B ook : B ook圖 序列圖 第 7章 面向對象開發(fā)方法與 UML 協(xié)作圖 協(xié)作圖 (Collaboration Diagram)用于描述相互協(xié)作的對象間的交互關系和鏈接關系 。 雖然序列圖和協(xié)作圖都用來描述對象間的交互關系 , 但側重點不一樣 。 序列圖著重體現(xiàn)交互的時間順序 , 協(xié)作圖則著重體現(xiàn)交互對象間的靜態(tài)鏈接關系 。 協(xié)作圖中對象的外觀與序列圖中的一樣 。 如果一個對象在消息的交互中被創(chuàng)建 , 則可在對象名稱之后標以 {new}。 類似地 , 如果一個對象在交互期間被刪除 , 則可在對象名稱之后標以 {destroy}。 對象間的鏈接關系類似于類圖中的聯(lián)系 (但無多重性標志 )。 通過在對象間的鏈接上標志帶有消息串的消息 (簡單 、異步或同步消息 )來表達對象間的消息傳遞 。 第 7章 面向對象開發(fā)方法與 UML 1) 鏈接 鏈接用于表示對象間的各種關系 , 包括組成關系的鏈接(Composition Link)、 聚集關系的鏈接 (Aggregation Link)、 限定關系的鏈接 (Qualified Link)以及導航鏈接 (Navigation Link)。 各種鏈接關系與類圖中的定義相同 , 在鏈接的端點位置可以顯示對象的角色名和模板信息 。 2) 消息流 在協(xié)作圖的鏈接線上,可以用帶有消息串的消息來描述對象間的交互。消息的箭頭指明消息的流動方向。消息串說明要發(fā)送的消息、消息的參數(shù)、消息的返回值以及消息的序列號等信息。 第 7章 面向對象開發(fā)方法與 UML 活動圖 活動圖 (Activity Diagram)既可用來描述操作 (類的方法 )的行為 , 也可以描述用例和對象內部的工作過程 。 活動圖是由狀態(tài)圖變化而來的 , 它們描述的內容的側重點不同 。 活動圖依據(jù)對象狀態(tài)的變化來捕獲動作 (將要執(zhí)行的工作或活動 )與動作的結果。一項操作可以描述為一系列相關的活動,一個活動結束后將立即進入下一個活動 (在狀態(tài)圖中狀態(tài)的變遷可能需要事件的觸發(fā) )。圖 。 第 7章 面向對象開發(fā)方法與 UML 圖 活動圖的例子 [ c os t $50]C a c ul a t e t ot a l c os t[ c os t = $50]C ha r ge a c c ount G e t a ut hor i z a t i on第 7章 面向對象開發(fā)方法與 UML 活動僅有一個起始點 , 但可以有多個結束點 。 一個活動可以順序地跟在另一個活動之后 , 這是簡單的順序關系 。 圖 使用了一個菱形的判斷標志 , 表示條件關系 , 判斷標志可以有多個輸入和輸出轉移 , 但在活動的運作中僅觸發(fā)其中的一個輸出轉移 。 活動圖還可以表示并發(fā)行為 。 這需要用到其他一些復雜的符號 , 本書不再詳細介紹 。 上面對 UML中用于描述系統(tǒng)動態(tài)行為的四個圖 (狀態(tài)圖、序列圖、協(xié)作圖和活動圖 )進行了簡單的介紹。這四個圖均可用于系統(tǒng)的動態(tài)建模,但它們各自的側重點不同,分別用于不同的目的,在實際的建模過程中要根據(jù)具體情況選擇運用。 第 7章 面向對象開發(fā)方法與 UML 習 題 一、問答題 1. 簡述面向對象方法的主要思想和主要開發(fā)過程。 2. 標準建模語言有什么特點?適用于哪些領域? 第 7章 面向對象開發(fā)方法與 UML 二 、 選擇題 1. 下面所列的性質中 , ______不屬于面向對象程序設計的特性 。 A) 繼承性 B) 重用性 C) 封裝性 D) 可視化 2. 管理信息系統(tǒng)設計方法之一的面向對象設計方法中 , 用適當?shù)淖匀徽Z言來概括描述要求解決的問題 。 具體來說 , 例如: Ⅰ “對象 ” 用帶下劃線的名詞或名詞子句表示; Ⅱ “操作 ” 用帶下劃線的動詞或動詞短語識別; Ⅲ “對象屬性”用帶下劃線的形容詞的全體辨認; 第 7章 面向對象開發(fā)方法與 UML Ⅳ “操作屬性 ” 用帶下劃線的所有副詞確定 。 這里 _______的說法是正確的 。 A) Ⅰ 和 Ⅱ B) Ⅲ 和 Ⅳ C) Ⅰ 、 Ⅱ 和 Ⅲ D) 都正確