1. 程式人生 > >四步輕鬆實現用Visio畫UML類圖

四步輕鬆實現用Visio畫UML類圖

本節和大家一起學習一下用Visio畫UML類圖的方法,主要有四個步驟,這裡和大家分享一下,相信通過本節的學習,你對Visio畫UML類圖的步驟一定會有所瞭解。 

用Visio畫UML類圖 

對於畫類圖的工具很多,曾經學過用starUML畫類圖,但這個是用於Java語言的,對於用vs程式設計C++語言,個人感覺用visio會好一點。以下用以前面的俄羅斯方塊遊戲中的一個Block類為例來講述。

1.首先建立一個類圖。接下來我們要做一下準備工作,因為我們這裡用了PSDK中的POINT型別,在種資料型別在visio資料型別中找不到,所以我們先得追加這個資料型別。為了便於管理我們會先建立PSDK資料型別包.

建立資料包:選單->UML->包.開啟[UML包]對話方塊.點選[新建]按鈕,在[包]列中輸入[PSDK資料型別],並確定

2.追加POINT資料型別

這時我們可以看到模型資源管理器(若左邊視窗沒有,可以在從選單->UML->檢視->模型資源管理器調出)中選中剛建的PSDK資料型別,再右擊->新建->資料型別,開啟UML資料型別屬性對話方塊。選擇[資料型別]專案,在名稱專案中填寫[POINT],選擇[確定]結束.

注意:在PSDK中POINT是一個結構體,但是由於我們並不關心POINT的細節,所以把POINT作為簡單資料型別來處理。

類:Visio畫UML類圖時新增一個類很簡單,從形狀視窗中[UML靜態結構]分類中拖動物件就可以了。

3.設定類的詳細資訊:設定類的詳細資訊的大部分工作都是同時屬性對話方塊實現的.對於C++程式設計師來說,需要設定的內容包括類名,資料成員,成員函式.。

雙擊類或右擊->屬性開啟UML類屬性對話方塊。在[類別]中選擇[類]專案,然後在右面的名稱欄目中寫入類名就可以了。這裡還可以設定類的一些屬性,可以暫時先不管。

新增資料成員在右面的表格中追加成員函式。。[特性]欄目中寫入變數名,[型別]是用來選擇資料型別的。這裡我們選擇[POINT]。[可見性]欄目選擇的是這個成員是公共的(private)。[多重性]是指,在類中,資料成員的個數。[1]代表在這個類中,有而且只有一個數據成員。[0..1]表示,沒有或者有一個。可以在[初始值]中輸入資料成員的初值。同樣新增其它資料成員。

4.新增成員函式:在[類別]視窗中選擇[操作]專案。在右邊表格中追加成員函式。在[操作]寫函式名,在[可見性]中選擇函式是,共有,保護還是私有的。[多型]也就是使否是虛擬函式。[範圍]表示一個函式是屬於例項,還是屬於類,靜態函式,也被稱為類的成員函式,普通的成員函式也被稱為例項的成員函式。所以如過,在這裡選中了[分類器],就說明這個函式是靜態函式。

Visio畫UML類圖時,對於上面的操作,只是設定函式的一些基本資訊,更詳細的資訊可以通過選中函式後,點選[屬性]按鈕,在出現的[UML操作屬性]視窗中設定。首先是設定函式的基本資訊。和上面的視窗重複的內容,我們不再說明。我們只說明[字首]和[字尾]。如果我們想要返回的型別是指標型別或者是應用型別的話,只要在[字尾]中填寫[*]或[&]就可以了。

下圖是用Visio畫UML類圖完成之後的效果。

==============================

Uml 關係主要有四大類: 依賴,關聯,泛化,實現。

其中 依賴和關聯是事物之間語義上的橫向關係,泛化和實現是事物之間的縱向關係。

一:依賴 Dependency

圖示:----->

定義:關係最為鬆散的,單向的,暫時產生關係的事物之間使用。

使用圖例:在靜態圖、元件圖、部署圖中兩事物的弱依賴關係用此圖示。

二:關聯 Association

圖示:此圖為visio中畫法(在uml靜態結構中,拖動複合圖例,然後雙擊此圖例,將出現下圖,在關聯端list中,聚合列都選擇無,然後在isNavigable列中選擇劃箭頭的端。然後點選確定,就出現右側的關聯圖例)。

定義:兩事物之間的比較密切關係。

實體之間的一個結構化關係表明物件是相互連線的。箭頭是可選的,它用於指定導航能力。如果沒有箭頭,暗示是一種雙向的導航能力。關聯轉換為一個例項作用域的變數。可為一個關聯附加其他修飾符。多重性(Multiplicity)修飾符暗示著例項之間的關係。

使用圖例:在靜態圖中使用,其他圖中也有類似的關聯關係,但細化為其他關係。

其中具體細分了兩種關係:聚合和組合。

1聚合 Aggregation

圖示:此圖為visio中畫法(在uml靜態結構中,拖動複合圖例,然後雙擊此圖例,將出現下圖,在關聯端list中,在聚合列中在需劃箭頭端選擇共享選項。然後點選確定,就出現左側的聚合圖例)。

定義:整體和個體之間的關係,個體生命週期的消亡對整體生命週期沒有太大的影響。has a的關係。

聚合是關聯的一種形式,代表兩個類之間的整體/區域性關係。聚合暗示著整體在概念上處於比區域性更高的一個級別,而關聯暗示兩個類在概念上位於相同的級別。聚合也轉換成一個例項作用域變數。 關聯和聚合的區別純粹是概念上的,而且嚴格反映在語義上。聚合還暗示著例項圖中不存在迴路。換言之,只能是一種單向關係。

2組合 Composition

圖示:此圖為visio中畫法(在uml靜態結構中,直接拖動複合圖例)

定義:整體和個體之間的關係,contains a 的關係。

組合是聚合的一種特殊形式,暗示“區域性”在“整體”內部的生存期職責。組合也是非共享的。所以,雖然區域性不一定要隨整體的銷燬而被銷燬,但整體要麼負責保持區域性的存活狀態,要麼負責將其銷燬。區域性不可與其他整體共享。但是,整體可將所有權轉交給另一個物件,後者隨即將承擔生存期職責。

在visio中 聚合和組合關係被分別稱之為共享和複合關係。主要在靜態圖中使用。菱形為整體一端,另一端為個體。

三:泛化 Generalization

圖示:此圖為visio中畫法(在uml靜態結構中,直接拖動歸納圖例)

定義:特殊到一般的關係。在軟體開發中被稱為繼承關係,is a 的關係。

四:實現 Realization

圖示:此圖為visio中畫法(右擊類,然後選擇形狀顯示選項,然後再勾選如左邊所示的實現連結,點選確定,此時選擇此類例圖,將出現黃色菱形,點選黃色菱形,然後劃線到要關聯的事物中。即出現此虛箭頭線)。

定義:類元之間的實現關係,在軟體開發中被稱為實現介面,或者抽象類之間的實現關係。

另外在用例圖中,存在3種關係

1:參與者與參與者之間泛化關係,即visio中的歸納圖例。

2:參與者與用例之間用依賴關係。即visio中的通訊圖例。

3:用例與用例之間用關聯關係,即拖拽visio中的擴充套件圖例。有時也可以用泛化關係。

其中關聯分為兩類:include關係,extends關係。

1)包含關係:把幾個用例的公共步驟分離成一個被包含的用例,用例間的包含關係允許包含提供者用例的行為到客戶用例中.把包含用例稱為客戶用例,被包含用例稱為提供者用例.包含用例提供功能給客戶用例。通俗一點講就是把一個複雜的事物,拆分成幾部分,整體和部分之間用包含關係。

2)擴充套件關係:是把新行為插入到已有用例中的方法.基礎用例提供了一組擴充套件點.這些擴充套件點可以新增新的行為.而擴充套件用例提供了一組插入片段.這些片段能插入到基礎用例的擴充套件點。將基用例中一段相對獨立並且可選的動作,用擴充套件(Extension)用例加以封裝,再讓它從基用例中宣告的擴充套件點(Extension Point)上進行擴充套件,從而使基用例行為更簡練和目標更集中,做基事件之後,我可能做擴充套件事件,也可能不做(在特殊情況下需要的新功能,擴充套件點就是特殊情況)。通俗一點講就是一個操作,可以有多種選擇方式,每種方式都可以實現此功能。多個實現和功能介面之間是一種擴充套件關係。

3)泛化關係:用例的泛化關係與類的泛化關係相似,即在用例泛化中,子用例表示父用例的特殊形式,子用例從父用例繼承了行為和屬性,還可以新增行為和屬性,改變已繼承的行為。子用例可以使用父用例的一段行為,也可以過載它。父用例通常是抽象的。在實際應用中很少使用泛化關係,子用例中的特殊行為都可以作為父用例中的備選流存在。

包含以及擴充套件過程與泛化過程類似

共性:都是從現有的用例中抽取出公共的那部分資訊,作為一個單獨的用例,然後通後過不同的方法來重用這個公共的用例,以減少模型維護的工作量

但三者對用例關係的優化側重點是不同的。如下:
          ●泛化側重表示子用例間的互斥性;
          ●包含側重表示被包含用例對Actor提供服務的間接性;
          ●擴充套件側重表示擴充套件用例的觸發不定性;詳述如下:

 既然用例是系統提供服務的UML表述,那麼服務這個過程在所有用例場景中是必然發生的,但發生按照發生條件可分為如下兩種情況:         

⒈無條件發生:肯定發生的;         

⒉有條件發生:未必發生,發生與否取決於系統狀態;

         因此,針對用例的三種關係結合系統狀態考慮,泛化與包含用例屬於無條件發生的用例,而擴充套件屬於有條件發生的用例。進一步,用例的存在是為Actor提供服 務,但用例提供服務的方式可分為間接和直接兩種,依據於此,泛化中的子用例提供的是直接服務,而包含中的被包含用例提供的是間接服務。同樣,擴充套件用例提供的也是直接服務,但擴充套件用例的發生是有條件的。

 另外一點需要提及的是:泛化中的子用例和擴充套件中的擴充套件用例均可以作為基本用例事件的備選擇流而存在。

備註:預設情況下visio沒有include關係,可以通過一下方式來新增,選擇工具欄uml,再選擇構造型,新增如圖所示的一行,點選確定。此後將可以引用此include關係。

拖一個擴充套件圖例,然後雙擊,如下圖,構造型中就多出一個list include,選擇include,點選確定。此時右側擴充套件圖例上的文字將變為include.