小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

UML類圖關(guān)系大全二

 My鏡像站 2011-12-26

雙向(標(biāo)準(zhǔn))的關(guān)聯(lián)
關(guān)聯(lián)是兩個(gè)類間的聯(lián)接。關(guān)聯(lián)總是被假定是雙向的;這意味著,兩個(gè)類彼此知道它們間的聯(lián)系,除非你限定一些其它類型的關(guān)聯(lián)。回顧一下Flight 的例子,圖 6 顯示了在Flight類和Plane類之間的一個(gè)標(biāo)準(zhǔn)類型的關(guān)聯(lián)。



圖 6:在一個(gè)Flight類和Plane類之間的雙向關(guān)聯(lián)的實(shí)例

一 個(gè)雙向關(guān)聯(lián)用兩個(gè)類間的實(shí)線表示。在線的任一端,你放置一個(gè)角色名和多重值。圖 6 顯示Flight與一個(gè)特定的Plane相關(guān)聯(lián),而且Flight類知道這個(gè)關(guān)聯(lián)。因?yàn)榻巧訮lane類表示,所以Plane承擔(dān)關(guān)聯(lián)中的 “assignedPlane”角色。緊接于Plane類后面的多重值描述0...1表示,當(dāng)一個(gè)Flight實(shí)體存在時(shí),可以有一個(gè)或沒有Plane與 之關(guān)聯(lián)(也就是,Plane可能還沒有被分配)。圖 6 也顯示Plane知道它與Flight類的關(guān)聯(lián)。在這個(gè)關(guān)聯(lián)中,F(xiàn)light承擔(dān)“assignedFlights”角色;圖 6 的圖告訴我們,Plane實(shí)體可以不與flight關(guān)聯(lián)(例如,它是一架全新的飛機(jī))或與沒有上限的flight(例如,一架已經(jīng)服役5年的飛機(jī))關(guān)聯(lián)。

由于對(duì)那些在關(guān)聯(lián)尾部可能出現(xiàn)的多重值描述感到疑惑,下面的表3列出了一些多重值及它們含義的例子。

表 3: 多重值和它們的表示

可能的多重值描述
表示 含義
0..1 0個(gè)或1個(gè)
1 只能1個(gè)
0..* 0個(gè)或多個(gè)
* 0個(gè)或多個(gè)
1..* 1個(gè)或我個(gè)
3 只能3個(gè)
0..5 0到5個(gè)
5..15 5到15個(gè)

單向關(guān)聯(lián)

在一個(gè)單向關(guān)聯(lián)中,兩個(gè)類是相關(guān)的,但是只有一個(gè)類知道這種聯(lián)系的存在。圖 7 顯示單向關(guān)聯(lián)的透支財(cái)務(wù)報(bào)告的一個(gè)實(shí)例。



圖 7: 單向關(guān)聯(lián)一個(gè)實(shí)例:OverdrawnAccountsReport 類 BankAccount 類,而 BankAccount 類則對(duì)關(guān)聯(lián)一無所知。

一 個(gè)單向的關(guān)聯(lián),表示為一條帶有指向已知類的開放箭頭(不關(guān)閉的箭頭或三角形,用于標(biāo)志繼承)的實(shí)線。如同標(biāo)準(zhǔn)關(guān)聯(lián),單向關(guān)聯(lián)包括一個(gè)角色名和一個(gè)多重值描 述,但是與標(biāo)準(zhǔn)的雙向關(guān)聯(lián)不同的時(shí),單向關(guān)聯(lián)只包含已知類的角色名和多重值描述。在圖 7 中的例子中,OverdrawnAccountsReport 知道 BankAccount 類,而且知道 BankAccount 類扮演“overdrawnAccounts”的角色。然而,和標(biāo)準(zhǔn)關(guān)聯(lián)不同,BankAccount 類并不知道它與 OverdrawnAccountsReport 相關(guān)聯(lián)。2

軟件包
不可避免,如果你正在為一個(gè)大的系統(tǒng)或大的業(yè)務(wù)領(lǐng)域建模,在你的模型中將會(huì)有許多不同的分類器。管理所有的類將是一件令人生畏的任務(wù);所以,UML 提供一個(gè)稱為軟件包的組織元素。軟件包使建模者能夠組織模型分類器到名字空間中,這有些象文件系統(tǒng)中的文件夾。把一個(gè)系統(tǒng)分為多個(gè)軟件包使系統(tǒng)變成容易理 解,尤其是在每個(gè)軟件包都表現(xiàn)系統(tǒng)的一個(gè)特定部分時(shí)。3

在圖中存在兩種方法表示軟件包。并沒有規(guī)則要求使用哪種標(biāo)記,除了用你個(gè)人的判斷:哪種更便于閱讀你畫的類圖。兩種方法都是由一個(gè)較小的長方形(用于定位)嵌套在一個(gè)大的長方形中開始的,如圖 8 所示。但是建模者必須決定包的成員如何表示,如下:

  • 如果建模者決定在大長方形中顯示軟件包的成員,則所有的那些成員4 需要被放置在長方形里面。另外,所有軟件包的名字需要放在軟件包的較小長方形之內(nèi)(如圖 8 的顯示)。
  • 如果建模者決定在大的長方形之外顯示軟件包成員,則所有將會(huì)在圖上顯示的成員都需要被置于長方形之外。為了顯示屬于軟件包的分類器屬于,從每個(gè)分類器畫一條線到里面有加號(hào)的圓周,這些圓周粘附在軟件包之上(圖9)。



圖 8:在軟件包的長方形內(nèi)顯示軟件包成員的軟件包元素例子



圖 9:一個(gè)通過連接線表現(xiàn)軟件包成員的軟件包例子

了解基礎(chǔ)重要性

在 UML 2 中,了解類圖的基礎(chǔ)更為重要。這是因?yàn)轭悎D為所有的其他結(jié)構(gòu)圖提供基本的構(gòu)建塊。如組件或?qū)ο髨D(僅僅是舉了些例子)。

超過基礎(chǔ)
到此為止,我已經(jīng)介紹了類圖的基礎(chǔ),但是請(qǐng)繼續(xù)往下讀!在下面的部分中,我將會(huì)引導(dǎo)你到你會(huì)使用的類圖的更重要的方面。這些包括UML 2 規(guī)范中的接口,其它的三種關(guān)聯(lián)類型,可見性和其他補(bǔ)充。

接口
在本文的前面,我建議你以類來考慮分類器。事實(shí)上,分類器是一個(gè)更為一般的概念,它包括數(shù)據(jù)類型和接口。

關(guān) 于何時(shí)、以及如何高效地在系統(tǒng)結(jié)構(gòu)圖中使用數(shù)據(jù)類型和接口的完整討論,不在本文的討論范圍之內(nèi)。既然這樣,我為什么要在這里提及數(shù)據(jù)類型和接口呢?你可能 想在結(jié)構(gòu)圖上模仿這些分類器類型,在這個(gè)時(shí)候,使用正確的記號(hào)來表示,或者至少知道這些分類器類型是重要的。不正確地繪制這些分類器,很有可能將使你的結(jié) 構(gòu)圖讀者感到混亂,以后的系統(tǒng)將不能適應(yīng)需求。

一個(gè)類和一個(gè)接口不同:一個(gè)類可以有它形態(tài)的真實(shí)實(shí)例,然而一個(gè)接口必須至少有一個(gè)類來實(shí)現(xiàn)它。在 UML 2 中,一個(gè)接口被認(rèn)為是類建模元素的特殊化。因此,接口就象類那樣繪制,但是長方形的頂部區(qū)域也有文本“interface”,如圖 10 所示5




圖 10:Professor類和Student類實(shí)現(xiàn)Person接口的類圖實(shí)例

在 圖 10 中顯示的圖中,Professor和Student類都實(shí)現(xiàn)了Person的接口,但并不從它繼承。我們知道這一點(diǎn)是由于下面兩個(gè)原因:1) Person對(duì)象作為接口被定義 -- 它在對(duì)象的名字區(qū)域中有“interface”文本,而且我們看到由于Professor和Student對(duì)象根據(jù)畫類對(duì)象的規(guī)則(在它們的名字區(qū)域中沒 有額外的分類器文本)標(biāo)示,所以它們是 類對(duì)象。 2) 我們知道繼承在這里沒有被顯示,因?yàn)榕c帶箭頭的線是點(diǎn)線而不是實(shí)線。如圖 10 所示,一條帶有閉合的單向箭頭的點(diǎn) 線意味著實(shí)現(xiàn)(或?qū)嵤徽缥覀冊(cè)趫D 4 中所見到的,一條帶有閉合單向箭頭的實(shí)線表示繼承。

更多的關(guān)聯(lián)
在上面,我討論了雙向關(guān)聯(lián)和單向關(guān)聯(lián)?,F(xiàn)在,我將會(huì)介紹剩下的三種類型的關(guān)聯(lián)。

關(guān)聯(lián)類
在關(guān)聯(lián)建模中,存在一些情況下,你需要包括其它類,因?yàn)樗岁P(guān)于關(guān)聯(lián)的有價(jià)值的信息。對(duì)于這種情況,你會(huì)使用 關(guān)聯(lián)類 來綁定你的基本關(guān)聯(lián)。關(guān)聯(lián)類和一般類一樣表示。不同的是,主類和關(guān)聯(lián)類之間用一條相交的點(diǎn)線連接。圖 11 顯示一個(gè)航空工業(yè)實(shí)例的關(guān)聯(lián)類。



圖 11:增加關(guān)聯(lián)類 MileageCredit

在 圖 11 中顯示的類圖中,在Flight類和 FrequentFlyer 類之間的關(guān)聯(lián),產(chǎn)生了稱為 MileageCredit的關(guān)聯(lián)類。這意味當(dāng)Flight類的一個(gè)實(shí)例關(guān)聯(lián)到 FrequentFlyer 類的一個(gè)實(shí)例時(shí),將會(huì)產(chǎn)生 MileageCredit 類的一個(gè)實(shí)例。

聚合
聚合是一種特別類型的關(guān)聯(lián),用于描述“總體到局部”的關(guān)系。在基本的聚合關(guān)系中, 部分類 的生命周期獨(dú)立于 整體類 的生命周期。

舉 例來說,我們可以想象,車 是一個(gè)整體實(shí)體,而 車輪輪胎是整輛車的一部分。輪胎可以在安置到車時(shí)的前幾個(gè)星期被制造,并放置于倉庫中。在這個(gè)實(shí)例中,Wheel類實(shí)例清楚地獨(dú)立地Car類實(shí)例而存在。 然而,有些情況下, 部分 類的生命周期并 不 獨(dú)立于 整體 類的生命周期 -- 這稱為合成聚合。舉例來說,考慮公司與部門的關(guān)系。 公司和部門都建模成類,在公司存在之前,部門不能存在。這里Department類的實(shí)例依賴于Company類的實(shí)例而存在。

讓我們更進(jìn)一步探討基本聚合和組合聚合。

基本聚合
有聚合關(guān)系的關(guān)聯(lián)指出,某個(gè)類是另外某個(gè)類的一部分。在一個(gè)聚合關(guān)系中,子類實(shí)例可以比父類存在更長的時(shí)間。為了表現(xiàn)一個(gè)聚合關(guān)系,你畫一條從父類到部分類的實(shí)線,并在父類的關(guān)聯(lián)末端畫一個(gè)未填充棱形。圖 12 顯示車和輪胎間的聚合關(guān)系的例子。



圖 12: 一個(gè)聚合關(guān)聯(lián)的例子

組合聚合
組合聚合關(guān)系是聚合關(guān)系的另一種形式,但是子類實(shí)例的生命周期依賴于父類實(shí)例的生命周期。在圖13中,顯示了Company類和Department類之間的組合關(guān)系,注意組合關(guān)系如聚合關(guān)系一樣繪制,不過這次菱形是被填充的。



圖 13: 一個(gè)組合關(guān)系的例子

在 圖 13 中的關(guān)系建模中,一個(gè)Company類實(shí)例至少總有一個(gè)Department類實(shí)例。因?yàn)殛P(guān)系是組合關(guān)系,當(dāng)Company實(shí)例被移除/銷毀 時(shí),Department實(shí)例也將自動(dòng)地被移除/銷毀。組合聚合的另一個(gè)重要功能是部分類只能與父類的實(shí)例相關(guān)(舉例來說,我們例子中的Company 類)。

反射關(guān)聯(lián)
現(xiàn)在我們已經(jīng)討論了所有的關(guān)聯(lián)類型。就如你可能注意到的,我們的所有例子已經(jīng)顯示了兩個(gè)不同類之間的關(guān)系。然而,類也可以使用反射關(guān)聯(lián)與它本身相關(guān)聯(lián)。起 先,這可能沒有意義,但是記住,類是抽象的。圖 14 顯示一個(gè)Employee類如何通過manager / manages角色與它本身相關(guān)。當(dāng)一個(gè)類關(guān)聯(lián)到它本身時(shí),這并不意味著類的實(shí)例與它本身相關(guān),而是類的一個(gè)實(shí)例與類的另一個(gè)實(shí)例相關(guān)。



14:一個(gè)反射關(guān)聯(lián)關(guān)系的實(shí)例

圖14:描繪的關(guān)系說明一個(gè)Employee實(shí)例可能是另外一個(gè)Employee實(shí)例的經(jīng)理。然而,因?yàn)椤癿anages”的關(guān)系角色有%200..*的多重性描述;一個(gè)雇員可能不受任何其他雇員管理。

可見性
在面向?qū)ο蟮脑O(shè)計(jì)中,存在屬性及操作可見性的記號(hào)。UML識(shí)別四種類型的可見性:public,protected,private及package。

UML 規(guī)范并不要求屬性及操作可見性必須顯示在類圖上,但是它要求為每個(gè)屬性及操作定義可見性。為了在類圖上的顯示可見性,放置可見性標(biāo)志于屬性或操作的名字之 前。雖然UML指定四種可見性類型,但是實(shí)際的編程語言可能增加額外的可見性,或不支持%20UML%20定義的可見性。表4顯示了UML支持的可見性類 型的不同標(biāo)志。

表4:UML支持的可見性類型的標(biāo)志

標(biāo)志 可見性類型
+ Public
# Protected
- Private
~ Package

現(xiàn)在,讓我們看一個(gè)類,以說明屬性及操作的可見性類型。在圖 15 中,所有的屬性及操作都是public,除了 updateBalance 操作。updateBalance 操作是protected。



圖 15:一個(gè) BankAccount 類說明它的屬性及操作的可見性

UML 2 補(bǔ)充
既然我們已經(jīng)覆蓋了基礎(chǔ)和高級(jí)主題,我們將覆蓋一些由UML 1. x增加的類圖的新記號(hào)。

實(shí)例
當(dāng)一個(gè)系統(tǒng)結(jié)構(gòu)建模時(shí),顯示例子類實(shí)例有時(shí)候是有用的。為了這種結(jié)構(gòu)建模,UML 2 提供 實(shí)例規(guī)范 元素,它顯示在系統(tǒng)中使用例子(或現(xiàn)實(shí))實(shí)例的值得注意的信息。

實(shí)例的記號(hào)和類一樣,但是取代頂端區(qū)域中僅有的類名,它的名字是經(jīng)過拼接的:

Instance Name : Class Name

舉例來說:

Donald : Person

因?yàn)轱@示實(shí)例的目的是顯示值得注意的或相關(guān)的信息,沒必要在你的模型中包含整個(gè)實(shí)體屬性及操作。相反地,僅僅顯示感興趣的屬性及其值是完全恰當(dāng)?shù)?。如圖16所描述。



圖 16:Plane類的一個(gè)實(shí)例例子(只顯示感興趣的屬性值)

然 而,僅僅表現(xiàn)一些實(shí)例而沒有它們的關(guān)系不太實(shí)用;因此,UML 2 也允許在實(shí)體層的關(guān)系/關(guān)聯(lián)建模。繪制關(guān)聯(lián)與一般的類關(guān)系的規(guī)則一樣,除了在建模關(guān)聯(lián)時(shí)有一個(gè)附加的要求。附加的限制是,關(guān)聯(lián)關(guān)系必須與類圖的關(guān)系相一 致,而且關(guān)聯(lián)的角色名字也必須與類圖相一致。它的一個(gè)例子顯示于圖 17 中。在這個(gè)例子中,實(shí)例是圖 6 中類圖的例子實(shí)例。



圖 17:圖 6 中用實(shí)例代替類的例子

圖 17 有Flight類的二個(gè)實(shí)例,因?yàn)轭悎D指出了在Plane類和Flight類之間的關(guān)系是 0或多。因此,我們的例子給出了兩個(gè)與NX0337 Plane實(shí)例相關(guān)的Flight實(shí)例。

角色
建模類的實(shí)例有時(shí)比期望的更為詳細(xì)。有時(shí),你可能僅僅想要在一個(gè)較多的一般層次做類關(guān)系的模型。在這種情況下,你應(yīng)該使用 角色記號(hào)。角色記號(hào)類似于實(shí)例記號(hào)。為了建立類的角色模型,你畫一個(gè)方格,并在內(nèi)部放置類的角色名及類名,作為實(shí)體記號(hào),但是在這情況你不能加下劃線。圖 18 顯示一個(gè)由圖 14 中圖描述的雇員類扮演的角色實(shí)例。在圖 18 中,我們可以認(rèn)為,即使雇員類與它本身相關(guān),關(guān)系確實(shí)是關(guān)于雇員之間扮演經(jīng)理及團(tuán)隊(duì)成員的角色。



圖 18:一個(gè)類圖顯示圖14中扮演不同角色的類

注意,你不能在純粹類圖中做類角色的建模,即使圖 18顯示你可以這么做。為了使用角色記號(hào),你將會(huì)需要使用下面討論的內(nèi)部結(jié)構(gòu)記號(hào)。

內(nèi)部的結(jié)構(gòu)
UML 2 結(jié)構(gòu)圖的更有用的功能之一是新的內(nèi)部結(jié)構(gòu)記號(hào)。它允許你顯示一個(gè)類或另外的一個(gè)分類器如何在內(nèi)部構(gòu)成。這在 UML 1. x 中是不可能的,因?yàn)橛浱?hào)限制你只能顯示一個(gè)類所擁有的聚合關(guān)系?,F(xiàn)在,在 UML 2 中,內(nèi)部的結(jié)構(gòu)記號(hào)讓你更清楚地顯示類的各個(gè)部分如何保持關(guān)系。

讓 我們看一個(gè)實(shí)例。在圖 18 中我們有一個(gè)類圖以表現(xiàn)一個(gè)Plane類如何由四個(gè)引擎和兩個(gè)控制軟件對(duì)象組成。從這個(gè)圖中省略的東西是顯示關(guān)于飛機(jī)部件如何被裝配的一些信息。從圖 18 的圖,你無法說明,是每個(gè)控制軟件對(duì)象控制兩個(gè)引擎,還是一個(gè)控制軟件對(duì)象控制三個(gè)引擎,而另一個(gè)控制一個(gè)引擎。



圖 19: 只顯示對(duì)象之間關(guān)系的類圖

繪制類的內(nèi)在結(jié)構(gòu)將會(huì)改善這種狀態(tài)。開始時(shí),你通過用二個(gè)區(qū)域畫一個(gè)方格。最頂端的區(qū)域包含類名字,而較低的區(qū)域包含類的內(nèi)部結(jié)構(gòu),顯示在它們父類中承擔(dān)不同角色的部分類,角色中的每個(gè)部分類也關(guān)系到

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多