成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

圖例解析UML包圖中的包引入和包合并使用

開發 架構
UML包圖的概念你是否熟悉,這里和大家分享一下UML包圖中的包引入和包合并兩大部分內容。希望本文的介紹對你的學習有所幫助。

本文和大家重點討論一下UML包圖中的包引入和包合并問題,包引入是一種允許采用非限定性名稱訪問來自于另一個命名空間中的元素的關系,而UML包圖中包合并定義了一個包的內容是如何被另一個包擴展的關系。

UML包圖中的包引入和包合并

1包引入

包引入(packageimport,參見USS的7.3.39節)是一種允許采用非限定性名稱訪問來自于另一個命名空間中的元素的關系。假如我們有一個包A和一個包B,如果包A沒有引入包B,那么包A在訪問包B時,必須采用限定性名,比如B::Integer。當包A引入了包B以后,則可以采用非限定性名稱進行訪問,此時A可以直接用Integer來訪問包B中的Integer。對于包的引入,其如同C++語言中的usingnamespace關鍵字,也如同于Java語言中的import關鍵字。

圖1是UML包圖中包引入在UML規范中的語法定義,從圖中你可以看出它包含一個importingNamespace和一個importedPackage,其意思是將importedPackage引入到importingNamespace。此外,我們可以看出PackageImport“是一個”直接關系。還需注意的是PackageImport包含一個visibility屬性用于表示包引入關系的可見性。在UML規范中定義了這一屬性值可以是public或是private。其含義是:如果一個包引入可見性是public,那么,被引入的包可以被命名空間之外的其它元素訪問;如果一個包引入可見性是private,那么被引入的包只能被命名空間中的元素訪問,而命名空間外的元素不能訪問。這與我們編成語言中的public和private的含意是一樣的。

 

圖1包引入在UML規范中的語法

圖2是包引入的一個例子,其中也示例了包引入關系在UML中的表示方法??梢钥闯霭腙P系與依賴關系的表示方法是相同的。在包引入的表示方法中,帶有箭頭一側的包被引入到沒有箭頭一側的包中,這可以從圖1中的語法定義看出,因為importedPackage是target。你可能要問,圖1中只定義了包引入是將一個包引入到命名空間中,但圖2中卻是將包引入到包中,這樣對嗎?還記得《UML包圖中的包和命名空間》中所提及的包在UML中的語法定義嗎?因為包是從命令空間繼承來的,也就是說包“是一個”命名空間!

 

圖2包引入的一個例子

前面所說的包引入的可見性分為public和private,在UML中分別采用不通的圖型(sterotype)來區分。public對應<<import>>圖型,而private對應<<access>>圖型,這一點在圖2中也有示例。從圖2中我們可以看出,ShoppingCart包引入了Auxiliary包和Types包,當引入了以后在ShoppingCart包中可以直接采用非限定性名對兩個引入包中的元素進行訪問。此外,Types包還可以被ShoppingCart包之外的元素訪問,因為其引入關系的可見性是public,也就是說WebShop包引入了ShoppingCart包后,也可以直接采用非限定性名訪問Types包中的元素。由于Auxiliary包引入到ShoppingCart包的可見性是private,所以,雖然WebShop引入了ShoppingCart包,但并不能采用非限定性名訪問Auxiliary包。當然,WebShop包仍然采用Auxiliary::xyz這樣的限定性名訪問Auxiliary包中的元素。我們還可以理解為,<<import>>關系是可傳遞的,但<<access>>關系則不可以。#p#

2包合并

UML包圖中包合并(packagemerge,參見USS的7.3.40節)定義了一個包的內容是如何被另一個包擴展的關系。包合并關系表示將兩個包的內容合并在一起從而得到一個新的合并包,當然,這種合并關系也隱含了對被合并包的擴展。圖3列出了UML規范中包合并關系的語法。

圖3UML規范中可打包元素的語法

圖4是使用包合并的一個例子,包合并關系在UML圖中的表示與依賴關系是一樣的。從圖3中的語法可以看出箭頭(target)所指向的包是被合并的包。圖4中我們能看到三個包,即Merged包、Merging包和Importing包。我們還可以看到Merging包將Merged包合并了,以及Importing包引入了Merging包。三個包中都有一個A類,這里的A類只是為了說明方便,其實,包中可以有其它的元素,那三個包中的A類在合并前后有什么關系呢?

 

圖4包合并的一個例子

為了方便理解這一問題,請看圖5。UML包圖的包合并中的加號表示的是合并這個操作,等號的左邊表示合并之前,而等號的右邊表示合并之后。在合并之前,我們可以看出Merged::A和Merging::A分別是一個扇形,但合并之后Merging::A就變成了一個圓,因為Merged包被合并進了Merging包,這個合并操作是站在Merging包的角度來看的。從Merged包的角度來看,不論是合并前或是后,都是一個扇形,這還是比較好理解的,因為它是獨立的,并沒有合并其它的包。對于Merging包我們還可以這樣理解,在合并之前,無論是從包里頭看還是從包外頭看都是一個扇形。但在合并之后,從里面看來A還是一個扇形,但從外面來看卻是一個圓。

 

圖5

有了上面對于包合并的理解后,我們就不難理解Importing包中的A了,顯然它是一個圓,是從Merging包的外部來看引入的A。

3總結

UML包圖中包引入這一關系是為了讓一個命名空間能更方便的引用另一個包中的元素,其方便性在于對于引入的包中的元素可以采用非限定性名的訪問方式進行訪問。UML包圖中包合并關系概念的引入是為了建模包的增量式擴展,即我們可以在已有的一個包上通過包合并從而得到一個功能更加完整或是強大的新包。為了讀懂UML規范,我們需要對包引入和包合并有很好的了解。

【編輯推薦】

  1. 詳解創建UML包圖的簡明步驟
  2. 詳解類和用例的UML包圖應用
  3. 解析UML包圖的目的和準則
  4. UML包圖中的包引入和包合并
  5. UML包圖概念及常見問題解析

 

 

責任編輯:佚名 來源: 51cto.com
相關推薦

2010-07-01 17:24:23

UML包圖

2010-07-07 17:23:10

UML序列圖

2010-07-08 16:25:10

UML包圖

2010-07-12 09:52:24

UML包圖

2010-07-06 10:30:58

UML關系圖

2010-07-08 10:13:54

UML交互圖

2010-07-09 09:36:59

UML圖

2010-07-05 12:21:36

UML行為圖

2010-07-09 09:16:22

UML包圖

2010-07-07 15:17:47

UML順序圖

2010-07-01 17:05:34

UML包圖

2010-07-05 14:48:25

UML靜態結構圖

2010-07-09 17:13:56

UML用例圖

2010-07-07 17:05:26

UML序列圖

2010-07-01 17:43:23

UML包圖

2010-07-01 17:18:02

UML包圖

2010-07-08 16:34:01

UML包圖

2010-06-30 17:24:46

UML用例圖

2010-06-17 16:14:33

UML總結

2010-07-08 16:42:28

UML包圖
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色视频网站 | 日韩精品一区二区三区视频播放 | 色婷婷综合久久久久中文一区二区 | аⅴ资源新版在线天堂 | 夜夜久久 | 国产成人av电影 | 久久精品亚洲国产 | 一区在线免费视频 | 欧美一级片黄色 | 欧美99| 欧美一区二区三区 | 本道综合精品 | 日本成人一区二区 | 一区二区三区四区不卡 | 日韩精品在线一区二区 | 久久一起草 | 蜜桃精品视频在线 | 亚洲精品一区中文字幕 | 中文二区 | 久久99深爱久久99精品 | 国产成人精品综合 | 国产精品久久久久久吹潮日韩动画 | 日本精品一区二区 | 日韩成人在线视频 | 欧美成人免费在线视频 | www天天操 | 夜夜夜久久久 | 99久久99 | 亚洲一区二区免费视频 | 蜜桃精品在线 | 精品日本久久久久久久久久 | 中文字幕在线第二页 | 亚洲性视频 | 欧美日韩一区二区三区四区 | 成人亚洲 | 亚洲va国产日韩欧美精品色婷婷 | 久久久2o19精品 | 狠狠av| 亚洲 欧美 日韩 在线 | 亚洲精品中文字幕在线观看 | 国产乱码精品一区二区三区五月婷 |