[UML]UML系列——用例图中的各种关系(include、extend)
用例圖中的各種關(guān)系
一、參與者與用例間的關(guān)聯(lián)關(guān)系
???? ?參與者與用例之間的通信,也成為關(guān)聯(lián)或通信關(guān)系。
二、用例與用例之間的關(guān)系
- 包含關(guān)系(include)
- 擴(kuò)展關(guān)系(extend)
包含關(guān)系
????????(1)? 概念
??????? 包含關(guān)系描述的是一個(gè)用例需要某種功能,而該功能被另外一個(gè)用例定義,那么在用例的執(zhí)行過(guò)程中,就可以調(diào)用已經(jīng)定義好的用例。
?????? (2)表示符號(hào)<<include>>
?
??????? 再如上篇文章中飲料自動(dòng)售貨機(jī)的例子:
??????在代碼中用例的包含關(guān)系是什么呢?
1 class coat //外套 2 { 3 public string name; 4 public double price; 5 public coat(string myName, double myPrice) 6 { 7 name = myName; 8 price = myPrice; 9 } 10 public void pay() 11 { 12 discount(); 13 Console.WriteLine("該件外套的應(yīng)付款為:{0}", price); 14 } 15 public void discount() 16 { 17 price = price * 0.8; 18 } 19 }
????? 控制臺(tái)程序?
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 coat myCoat = new coat("勁霸", 1000); 6 Console.WriteLine("該外套的名稱為:{0}", myCoat.name); 7 Console.WriteLine("該外套的原價(jià)為:{0}", myCoat.price); 8 myCoat.pay(); 9 } 10 }
????? 用例圖:
?實(shí)例:圖書管理系統(tǒng)
????????????圖書管理員處理借書或者還書時(shí)的用例圖,借書與還書都要考慮是否有overtime的書。
實(shí)例:訂單管理系統(tǒng)
???? (3)使用場(chǎng)合
????????a.如果兩個(gè)以上用例有大量一致的功能,則可以將這個(gè)功能分解到另一個(gè)用例中,其他用例可以和這個(gè)用例建立包含關(guān)系(如之前介紹的飲料自動(dòng)售貨機(jī))。
??????? b.一個(gè)用例的功能太多時(shí),可以使用包含關(guān)系建立若干個(gè)更小的用例。(如學(xué)生管理系統(tǒng)的用例圖)
實(shí)例:學(xué)生管理系統(tǒng)
??????
???? (4)意義
?????? 它有助于將來(lái)實(shí)現(xiàn)系統(tǒng)時(shí),確定哪些功能可以重用,在編寫代碼時(shí)就可以實(shí)現(xiàn)代碼的重用,縮短開(kāi)發(fā)周期。
???????注意:執(zhí)行基用例時(shí),每次都必須調(diào)用被包含用例。
擴(kuò)展關(guān)系
???? (1)概念
?????? 用一個(gè)用例(可選)擴(kuò)展另一個(gè)用例(基本例)的功能。
????? (2)符號(hào)表示<<extend>>
??????? 代碼中是什么?
1 class coat //外套 2 { 3 public string name; 4 public float price; 5 6 public coat(string myName,float myPrice) 7 { 8 name = myName; 9 price = myPrice; 10 } 11 public void pay() 12 { 13 if (price > 800) 14 discount(0.9f); 15 Console.WriteLine("該件外套的應(yīng)付款為:{0}",price); 16 } 17 18 public void discount(float x) 19 { 20 price = price * x; 21 } 22 }
?????? 控制臺(tái)程序
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 coat myCoat=new coat ("勁霸",1000); 6 Console.WriteLine("該外套的名稱為:{0}",myCoat.name); 7 Console.WriteLine("該外套的原價(jià)為:{0}",myCoat.price); 8 myCoat.pay(); 9 } 10 }
????? 用例圖
????? 注意:擴(kuò)展關(guān)系的箭頭方向
????? (3)使用場(chǎng)合
????????對(duì)擴(kuò)展用例的限制規(guī)則:將一些常規(guī)的動(dòng)作放在一個(gè)基本用例中,將可選的或只在特定條件下才執(zhí)行的動(dòng)作放在它的擴(kuò)展用例中。
怎么區(qū)分是包含關(guān)系還是擴(kuò)展關(guān)系?
????????通過(guò)上面的例子,怎么區(qū)分它們,你心里也有數(shù)了,其實(shí)在擴(kuò)展關(guān)系中的使用場(chǎng)合也說(shuō)明了,擴(kuò)展關(guān)系的限制規(guī)則:將一些常規(guī)的動(dòng)作放在一個(gè)基本用例中,將可選的或只在特定條件下才執(zhí)行的動(dòng)作放在它的擴(kuò)展用例中。在使用的時(shí)候,你考慮這點(diǎn)就可以區(qū)分它們。
總結(jié)
???? 1.包含關(guān)系
?????? ?a.如果兩個(gè)以上用例有大量一致的功能,則可以將這個(gè)功能分解到另一個(gè)用例中,其他用例可以和這個(gè)用例建立包含關(guān)系(如之前介紹的飲料自動(dòng)售貨機(jī))。
??????? b.一個(gè)用例的功能太多時(shí),可以使用包含關(guān)系建立若干個(gè)更小的用例。(如學(xué)生管理系統(tǒng)的用例圖)
?????2.擴(kuò)展關(guān)系
??????? 對(duì)擴(kuò)展用例的限制規(guī)則:將一些常規(guī)的動(dòng)作放在一個(gè)基本用例中,將可選的或只在特定條件下才執(zhí)行的動(dòng)作放在它的擴(kuò)展用例中。
???? ?在分析的時(shí)候,參考他們的使用場(chǎng)合,你就會(huì)豁然開(kāi)朗......
????? 系列文章:
?????? [UML]UML系列——用例圖Use Case
posted on 2014-03-14 22:00 NET未來(lái)之路 閱讀(...) 評(píng)論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/3601374.html
總結(jié)
以上是生活随笔為你收集整理的[UML]UML系列——用例图中的各种关系(include、extend)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 生活就是这样是什么歌呢
- 下一篇: 【转】Linux Oracle服务启动停