亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-09-16 17:00:03 來源:億速云 閱讀:173 作者:chen 欄目:開發技術

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

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

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

圖2是包引入的一個例子,其中也示例了包引入關系在UML中的表示方法。可以看出包引入關系與依賴關系的表示方法是相同的。在包引入的表示方法中,帶有箭頭一側的包被引入到沒有箭頭一側的包中,這可以從圖1中的語法定義看出,因為importedPackage是target。你可能要問,圖1中只定義了包引入是將一個包引入到命名空間中,但圖2中卻是將包引入到包中,這樣對嗎?還記得《UML包圖中的包和命名空間》中所提及的包在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>>關系則不可以。

2包合并

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

UML包圖中的包引入和包合并講解 
圖3UML規范中可打包元素的語法

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

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

圖4包合并的一個例子

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

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

圖5

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

3總結

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

“UML包圖中的包引入和包合并講解”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

uml
AI

玉环县| 郎溪县| 安徽省| 广饶县| 施秉县| 黄骅市| 灵丘县| 互助| 乌拉特中旗| 建德市| 南通市| 车致| 新乡县| 方正县| 石城县| 黄陵县| 大洼县| 会泽县| 新竹县| 柘荣县| 尉氏县| 驻马店市| 云龙县| 商洛市| 博乐市| 平陆县| 锡林浩特市| 招远市| 桐城市| 云阳县| 夏津县| 洛宁县| 苏尼特左旗| 广宗县| 江油市| 宁武县| 东兰县| 金平| 修水县| 安岳县| 健康|