學(xué)習(xí)筆記 UML類圖詳解
本節(jié)和大家一起學(xué)習(xí)一下UML類圖,主要包括UML2中的類圖,大體上的結(jié)構(gòu)圖,類的屬性列表等內(nèi)容。相信通過本文的你對UML類圖一定會有深刻的認(rèn)識。
UML類圖詳解
這是關(guān)于統(tǒng)一建模語言、即UML里采用的基本圖的文章。在這篇文章中,我將會討論結(jié)構(gòu)圖,這是已經(jīng)在UML2中提出的一種新圖種類。由于本系列文章的目的是使人們了解記號元素及它們的含意,該文主要關(guān)注類圖。你很快就會知道這樣做的理由。隨后的文章將會覆蓋結(jié)構(gòu)范疇中包含的其它圖。
我也想提醒讀者,這一系列文章是關(guān)于UML記號元素的,所以這些文章并不意味著為建模的最好方式提供指導(dǎo)方針,或是該如何決定哪些內(nèi)容應(yīng)該首先被建模。相反的,該文及本系列文章的目的主要是幫助大家對于記號元素--語法和含義有一個基本的理解。借由這些知識,你應(yīng)該可以閱讀圖,并使用正確的記號元素創(chuàng)建你自己的圖。
這篇文章假定你對面向?qū)ο蟮脑O(shè)計已經(jīng)有了基本的理解。你們當(dāng)中如果有人需要一些面向?qū)ο蟾拍畹膸椭?,那么可以訪問http://java.sun.com/docs/books/tutorial/java/concepts/,來獲得Sun公司關(guān)于面向?qū)ο缶幊痰暮喍讨笇?dǎo)。閱讀“什么是類?”和什么是繼承?”章節(jié),將提供給你足夠的理解,并對該文的閱讀會有所幫助。另外,DavidTaylor的書《Object-OrientedTechnologies:AManager'sGuide》提供了面向?qū)ο笤O(shè)計的優(yōu)秀,高水平的說明,而無需對計算機(jī)編程有高深的理解。
UML2中的陰和陽
在UML2中有二種基本的圖范疇:結(jié)構(gòu)圖和行為圖。每個UML圖都屬于這二個圖范疇。結(jié)構(gòu)圖的目的是顯示建模系統(tǒng)的靜態(tài)結(jié)構(gòu)。它們包括UML類圖,組件和(或)對象圖。另一方面,行為圖顯示系統(tǒng)中的對象的動態(tài)行為,包括如對象的方法,協(xié)作和活動之類的內(nèi)容。行為圖的實例是活動圖,用例圖和序列圖。
大體上的結(jié)構(gòu)圖
如同我所說的,結(jié)構(gòu)圖顯示建模系統(tǒng)的靜態(tài)結(jié)構(gòu)。關(guān)注系統(tǒng)的元件,無需考慮時間。在系統(tǒng)內(nèi),靜態(tài)結(jié)構(gòu)通過顯示類型和它們的實例進(jìn)行傳播。除了顯示系統(tǒng)類型和它們的實例,結(jié)構(gòu)圖至少也顯示了這些元素間的一些關(guān)系,可能的話,甚至也顯示它們的內(nèi)部結(jié)構(gòu)。
貫穿整個軟件生命周期,結(jié)構(gòu)圖對于各種團(tuán)隊成員都是有用的。一般而言,這些圖支持設(shè)計驗證,和個體與團(tuán)隊間的設(shè)計交流。舉例來說,業(yè)務(wù)分析師可以使用類或?qū)ο髨D,來為當(dāng)前的資產(chǎn)和資源建模,例如分類賬,產(chǎn)品或地理層次。架構(gòu)師可以使用組件和部署圖,來測試/確認(rèn)他們的設(shè)計是否充分。開發(fā)者可以使用類圖,來設(shè)計并為系統(tǒng)的代碼(或即將成為代碼的)類寫文檔。
特殊的類圖
UML2把結(jié)構(gòu)圖看成一個分類;這里并不存在稱為“結(jié)構(gòu)圖”的圖。然而,類圖提供結(jié)構(gòu)圖類型的一個主要實例,并為我們提供一組記號元素的初始集,供所有其它結(jié)構(gòu)圖使用。由于類圖是如此基本,本文的剩余部分將會把重點集中在類圖記號集。在本文的結(jié)尾,你將對于如何畫UML2類圖有所了解,而且對于理解在后面文章中將涉及的其他結(jié)構(gòu)圖有一個穩(wěn)固的基礎(chǔ)。
基礎(chǔ)
如先前所提到的,類圖的目的是顯示建模系統(tǒng)的類型。在大多數(shù)的UML模型中這些類型包括:
類
接口
數(shù)據(jù)類型
組件
UML為這些類型起了一個特別的名字:“分類器”。通常地,你可以把分類器當(dāng)做類,但在技術(shù)上,分類器是更為普遍的術(shù)語,它還是引用上面的其它三種類型為好。
類名
UML類圖的UML表示是一個長方形,垂直地分為三個區(qū),如圖1所示。頂部區(qū)域顯示類的名字。中間的區(qū)域列出類的屬性。底部的區(qū)域列出類的操作。當(dāng)在一個類圖上畫一個類元素時,你必須要有頂端的區(qū)域,下面的二個區(qū)域是可選擇的(當(dāng)圖描述僅僅用于顯示分類器間關(guān)系的高層細(xì)節(jié)時,下面的兩個區(qū)域是不必要的)。圖1顯示一個航線班機(jī)如何作為UML類建模。正如我們所能見到的,名字是Flight,我們可以在中間區(qū)域看到Flight類的3個屬性:flightNumber,departureTime和flightDuration。在底部區(qū)域中我們可以看到Flight類有兩個操作:delayFlight和getArrivalTime。
圖1:Flight類的類圖
類屬性列表
UML類圖的屬性節(jié)(中部區(qū)域)在分隔線上列出每一個類的屬性。屬性節(jié)是可選擇的,要是一用它,就包含類的列表顯示的每個屬性。該線用如下格式:
name:attributetype
flightNumber:Integer
繼續(xù)我們的Flight類的例子,我們可以使用屬性類型信息來描述類的屬性,如表1所示。
表1:具有關(guān)聯(lián)類型的Flight類的屬性名字
#p#
在業(yè)務(wù)類圖中,屬性類型通常與單位相符,這對于圖的可能讀者是有意義的(例如,分鐘,美元,等等)。然而,用于生成代碼的類圖,要求類的屬性類型必須限制在由程序語言提供的類型之中,或包含于在系統(tǒng)中實現(xiàn)的、模型的類型之中。
在UML類圖上顯示具有默認(rèn)值的特定屬性,有時是有用的(例如,在銀行賬戶應(yīng)用程序中,一個新的銀行賬戶會以零為初始值)。UML規(guī)范允許在屬性列表節(jié)中,通過使用如下的記號作為默認(rèn)值的標(biāo)識:
name:attributetype=defaultvalue
舉例來說:balance:Dollars=0
顯示屬性默認(rèn)值是可選擇的;圖2顯示一個銀行賬戶類具有一個名為balance的類型,它的默認(rèn)值為0。
圖2:顯示默認(rèn)為0美元的balance屬性值的銀行賬戶UML類圖。
類操作記錄在類圖長方形的第三個(最低的)區(qū)域中,它也是可選擇的。和屬性一樣,類的操作以列表格式顯示,每個操作在它自己線上。操作使用下列記號表現(xiàn):
name(parameterlist):typeofvaluereturned
下面的表2中Flight類操作的映射。
表2:從圖2映射的Flight類的操作
圖3顯示,delayFlight操作有一個Minutes類型的輸入?yún)?shù)--numberOfMinutes。然而,delayFlight操作沒有返回值。1當(dāng)一個操作有參數(shù)時,參數(shù)被放在操作的括號內(nèi);每個參數(shù)都使用這樣的格式:“參數(shù)名:參數(shù)類型”。
圖3:Flight類操作參數(shù),包括可選擇的“in”標(biāo)識。
當(dāng)文檔化操作參數(shù)時,你可能使用一個可選擇的指示器,以顯示參數(shù)到操作的輸入?yún)?shù)、或輸出參數(shù)。這個可選擇的指示器以“in”或“out”出現(xiàn),如圖3中的操作區(qū)域所示。一般來說,除非將使用一種早期的程序編程語言,如Fortran,這些指示器可能會有所幫助,否則它們是不必要的。然而,在C++和Java中,所有的參數(shù)是“in”參數(shù),而且按照UML規(guī)范,既然“in”是參數(shù)的默認(rèn)類型,大多數(shù)人將會遺漏輸入/輸出指示器。
【編輯推薦】