本節和你們一塊兒學習一下用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],選擇[肯定]結束.3d
注意:在PSDK中POINT是一個結構體,可是因爲咱們並不關心POINT的細節,因此把POINT做爲簡單數據類型來處理。指針
類:Visio畫UML類圖時添加一個類很簡單,從形狀窗口中[UML靜態結構]分類中拖動對象就能夠了。對象
3.設定類的詳細信息:設定類的詳細信息的大部分工做都是同時屬性對話框實現的.對於C++程序員來講,須要設定的內容包括類名,數據成員,成員函數.。blog
雙擊類或右擊->屬性打開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.