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