物件導向的問題的處理的關鍵是建模問題。建模可以把在複雜世界的許多重要的細節給抽象出。許多建模工具封裝了UML(也就是Unified Modeling Language™),這篇課程的目的是展示出UML的精彩之處。
UML中有九種建模的圖示,即:
- 用例圖
- 類圖
- 物件圖
- 順序圖
- 協作圖
- 狀態圖
- 活動圖
- 元件圖
- 配置圖
本課程中的某些部分包含了這些圖的細節資訊的頁面連結。而且每個部分都有一個小問題,測試一下你對這個部分的理解。
為什麼UML很重要?
為了回答這個問題,我們看看建築行業。設計師設計出房子。施工人員使用這個設計來建造房子。建築越複雜,設計師和施工人員之間的交流就越重要。藍圖就成為了這個行業中的設計師和施工人員的必修課。
寫軟體就好像建造建築物一樣。系統越複雜,參與編寫與配置軟體的人員之間的交流也就越重要。在過去十年裡UML就成為分析師,設計師和程式設計師之間的“建築藍圖”。現在它已經成為了軟體行業的一部分了。UML提供了分析師,設計師和程式設計師之間在軟體設計時的通用語言。
UML被應用到物件導向的問題的解決上。想要學習UML必須熟悉物件導向解決問題的根本原則――都是從模型的建造開始的。一個模型model就是根本問題的抽象。域domain就是問題所處的真實世界。
模型是由物件objects組成的,它們之間通過相互傳送訊息messages來相互作用的。記住把一個物件想象成“活著的”。物件有他們知道的事(屬性attributes)和他們可以做的事(行為或操作behaviors or operations)。物件的屬性的值決定了它的狀態state。
類Classes是物件的“藍圖”。一個類在一個單獨的實體中封裝了屬性(資料)和行為(方法或函式)。物件是類的例項instances。
用例圖
用例圖Use case diagrams描述了作為一個外部的觀察者的視角對系統的印象。強調這個系統是什麼而不是這個系統怎麼工作。
用例圖與情節緊緊相關的。情節scenario是指當某個人與系統進行互動時發生的情況。下面是一個醫院門診部的情節。
“一個病人打電話給門診部預約一年一次的身體檢查。接待員找出在預約記錄本上找出最近的沒有預約過的時間,並記上那個時間的預約記錄。”
用例Use case是為了完成一個工作或者達到一個目的的一系列情節的總和。角色actor是發動與這個工作有關的事件的人或者事情。角色簡單的扮演著人或者物件的作用。下面的圖是一個門診部Make Appointment用例。角色是病人。角色與用例的聯絡是通訊聯絡communication association(或簡稱通訊communication)
角色是人狀的圖示,用例是一個橢圓,通訊是連線角色和用例的線。
一個用例圖是角色,用例,和它們之間的聯絡的集合。我們已經把Make Appointment作為一個含有四個角色和四個用例的圖的一部分。注意一個單獨的用例可以有多個角色。
用例圖在三個領域很有作用。
- 決定特徵(需求)。當系統已經分析好並且設計成型時,新的用例產生新的需求
- 客戶通訊。使用用例圖很容易表示開發者與客戶之間的聯絡。
- 產生測試用例。一個用例的情節可能產生這些情節的一批測試用例。
類圖
類圖Class diagram通過顯示出系統的類以及這些類之間的關係來表示系統。類圖是靜態的-它們顯示出什麼可以產生影響但不會告訴你什麼時候產生影響。
下面是一個顧客從零售商處預定商品的模型的類圖。中心的類是Order。連線它的是購買貨物的Customer和Payment。Payment有三種形式:Cash,Check,或者Credit。訂單包括OrderDetails(line item),每個這種類都連著Item。
UML類的符號是一個被劃分成三塊的方框:類名,屬性,和操作。抽象類的名字,像Payment是斜體的。類之間的關係是連線線。
類圖有三種關係。
- 關聯association-表示兩種類的例項間的關係。如果一個類的例項必須要用另一個類的例項才能完成工作時就要用關聯。在圖中,關聯用兩個類之間的連線表示。
- 聚合aggregation-當一個類屬於一個容器是的一種特殊關係。聚合用一個帶菱形的連線,菱形指向具有整體性質的類。在我們的圖裡,Order是OrderDetails的容器。
- 泛化generalization-一個指向以其他類作為超類的繼承連線。泛化關係用一個三角形指向超類。Payment是Cash,Check和Credit的超類。
一個關聯有兩個尾端。每個尾端可以有一個角色名role name來說明關聯的作用。比如,一個OrderDetail例項是一個Order例項的專案。
關聯上的方向性navigability箭頭表示該關聯傳遞或查詢的方向。OrderDetail類可以查詢他的Item,但不可以反過來查詢。箭頭方向同樣可以告訴你哪個類擁有這個關聯的實現;也就是,OrderDetail擁有Item。沒有方向性的箭頭的關聯是雙向。
關聯尾端的數字表示該關聯另一邊的一個例項可以對應的數字端的例項的格數,通過這種方式表達關聯的多樣性multiplicity。多樣性的數字可以是一個單獨的數字或者是一個數字的範圍。在例子中,每個Order只有一個Customer,但一個Customer可以有任意多個Order。
下面這個表給出了最普遍的多樣性示例。
多樣性 |
意義 |
---|
0..1 |
0或1個例項. n..m符號表示有n到m個例項 |
0..* or * |
沒有例項格數的限制(包括沒有). |
1 |
只有一個例項 |
1..* |
最少一個例項 |
每個類圖包括類,關聯和多樣性表示。方向性和角色是為了使圖示得更清楚時可選的專案。
包和物件圖
為了簡單地表示出複雜的類圖,可以把類組合成包packages。一個包是UML上有邏輯關係的元件的集合。下面這個圖是是一個把類組合成包的一個商業模型。
dependencies關係。如果另一個的包B改變可能會導致一個包A改變,則包A依賴包B。
包是用一個在上方帶有小標籤的矩形表示的。包名寫在標籤上或者在矩形裡面。點化線箭頭表示依賴
物件圖Object diagrams用來表示類的例項。他們在解釋複雜關係的細小問題時(特別是遞迴關係時)很有用。
這個類圖示一個大學的Department可以包括其他很多的Departments。
這個物件圖示上面類圖的例項。用了很多具體的例子。
UML中例項名帶有下劃線。只要意思清楚,類或例項名可以在物件圖中被省略。
每個類圖的矩形對應了一個單獨的例項。例項名稱中所強調的UML圖表。類或例項的名稱可能是省略物件圖表只要圖的意義仍然是明確的。
順序圖
類圖和物件圖是靜態模型的檢視。互動圖是動態的。他們描述了物件間的互動作用。
順序圖將互動關係表示為一個二維圖。縱向是時間軸,時間沿豎線向下延伸。橫向軸代表了在協作中各獨立物件的類元角色。類元角色用生命線表示。當物件存在時,角色用一條虛線表示,當物件的過程處於啟用狀態時,生命線是一個雙道線。
訊息用從一個物件的生命線到另一個物件生命線的箭頭表示。箭頭以時間順序在圖中從上到下排列。
協作圖
協作圖也是互動的圖表。他們像序列圖一樣也傳遞相同的資訊,但他們不關心什麼時候訊息被傳遞,只關心物件的角色。在序列圖中,物件的角色放在上面而訊息則是連線線。
物件角色矩形上標有類或物件名(或者都有)。類名前面有個冒號(:)。
協作圖的每個訊息都有一個序列號。頂層訊息的數字是1。同一個等級的訊息(也就是同一個呼叫中的訊息)有同樣的數字字首,再根據他們出現的順序增加一個字尾1,2等等。
狀態圖
物件擁有行為和狀態。物件的狀態是由物件當前的行動和條件決定的。狀態圖statechart diagram顯示出了物件可能的狀態以及由狀態改變而導致的轉移。
我們的模型例圖建立了一個銀行的線上登入系統。登入過程包括輸入合法的密碼和個人賬號,再提交給系統驗證資訊。
登入系統可以被劃分為四種不重疊的狀態:Getting SSN, Getting PIN, Validating, 以及 Rejecting。每個狀態都有一套完整的轉移transitions來決定狀態的順序。
狀態是用圓角矩形來表示的。轉移則是使用帶箭頭的連線表示。觸發轉移的事件或者條件寫在箭頭的旁邊。我們的圖上有兩個自轉移。一個是在Getting SSN,另一個則在上Getting PIN。
初始狀態(黑色圓圈)是開始動作的虛擬開始。結束狀態也是動作的虛擬結束。
事件或條件觸發動作時用(/動作)表示。當進入Validating狀態時,物件並不等外部事件觸發轉移。取而代之,它產生一個動作。動作的結果決定了下一步的狀態。
活動圖
活動圖activity diagram是一個很特別的流程圖。活動圖和狀態圖之間是有關係的。狀態圖把焦點集中在過程中的物件身上,而活動圖則集中在一個單獨過程動作流程。活動圖告訴了我們活動之間的依賴關係。
對我們的例子來說,我們使用如下的過程。
“通過ATM來取錢。”
這個活動有三個類Customer, ATM和 Bank。整個過程從黑色圓圈開始到黑白的同心圓結束。活動用圓角矩形表示。
活動圖可以被分解成許多物件泳道swimlanes ,可以決定哪些物件負責那些活動。每個活動都有一個單獨的轉移transition連線這其他的活動。
轉移可能分支branch成兩個以上的互斥的轉移。保護表示式(在[]中)表示轉移是從一個分支中引出的。分支以及分支結束時的合併merge在圖中用菱形表示。
轉移也可以分解fork成兩個以上的並行活動。分解以及分解結束時的執行緒結合join在圖中用粗黑線表示
元件與配置圖
元件component是程式碼模組。元件圖是是類圖的物理實現。
配置圖Deployment diagrams則是顯示軟體及硬體的配置。
下面的配置圖說明了與房地產事務有關的軟體及硬體元件的關係。
物理上的硬體使用節點nodes表示。每個元件屬於一個節點。元件用左上角帶有兩個小矩形的矩形表示。
原文連結:http://dn.codegear.com/article/31863
|