1. 程式人生 > >UML 基礎: 類圖

UML 基礎: 類圖

UML 基礎: 類圖

developerWorks

級別: 高Illustration這是關於統一建模語言、即UML 裡採用的基本圖的一系列文章的一部分。在我 先前關於序列圖的文章 裡,我把重點從 UML 1.4 版,轉移到 OMG的採用UML 2.0版草案規範(又稱為UML 2)。在這篇文章中,我將會討論結構圖,這是已經在 UML 2 中提出的一種新圖種類。由於本系列文章的目的是使人們瞭解記號元素及它們的含意,該文主要關注類圖。你很快就會知道這樣做的理由。隨後的文章將會覆蓋結構範疇中包含的其它圖。

我也想提醒讀者,這一系列文章是關於 UML 記號元素的,所以這些文章並不意味著為建模的最好方式提供指導方針,或是該如何決定哪些內容應該首先被建模。相反的,該文及本系列文章的目的主要是幫助大家對於記號元素 -- 語法和含義有一個基本的理解。藉由這些知識,你應該可以閱讀圖,並使用正確的記號元素建立你自己的圖。

這篇文章假定你對面向物件的設計已經有了基本的理解。你們當中如果有人需要一些面向物件概念的幫助,那麼可以訪問 http://java.sun.com/docs/books/tutorial/java/concepts/,來獲得Sun公司關於面向物件程式設計的簡短指導。閱讀 “什麼是類?” 什麼是繼承?” 章節,將提供給你足夠的理解,並對該文的閱讀會有所幫助。另外,David Taylor的書《 Object-Oriented Technologies: A Manager's Guide》提供了面向物件設計的優秀,高水平的說明,而無需對計算機程式設計有高深的理解。

在 UML 2 中有二種基本的圖範疇:結構圖和行為圖。每個 UML 圖都屬於這二個圖範疇。結構圖的目的是顯示建模系統的靜態結構。它們包括類,元件和(或)物件圖。另一方面,行為圖顯示系統中的物件的動態行為,包括如物件的方法,協作和活動之類的內容。行為圖的例項是活動圖,用例圖和序列圖。





回頁首


如同我所說的,結構圖顯示建模系統的靜態結構。關注系統的元件,無需考慮時間。在系統內,靜態結構通過顯示型別和它們的例項進行傳播。除了顯示系統型別和它們的例項,結構圖至少也顯示了這些元素間的一些關係,可能的話,甚至也顯示它們的內部結構。

貫穿整個軟體生命週期,結構圖對於各種團隊成員都是有用的。一般而言,這些圖支援設計驗證,和個體與團隊間的設計交流。舉例來說,業務分析師可以使用類或物件圖,來為當前的資產和資源建模,例如分類賬,產品或地理層次。架構師可以使用元件和部署圖,來測試/確認他們的設計是否充分。開發者可以使用類圖,來設計併為系統的程式碼(或即將成為程式碼的)類寫文件。

特殊的類圖

UML 2 把結構圖看成一個分類;這裡並不存在稱為“結構圖”的圖。然而,類圖提供結構圖型別的一個主要例項,併為我們提供一組記號元素的初始集,供所有其它結構圖使用。由於類圖是如此基本,本文的剩餘部分將會把重點集中在類圖記號集。在本文的結尾,你將對於如何畫UML 2類圖有所瞭解,而且對於理解在後面文章中將涉及的其他結構圖有一個穩固的基礎。





回頁首


基礎

如先前所提到的,類圖的目的是顯示建模系統的型別。在大多數的 UML 模型中這些型別包括:


  • 介面
  • 資料型別
  • 元件

UML 為這些型別起了一個特別的名字:“分類器”。通常地,你可以把分類器當做類,但在技術上,分類器是更為普遍的術語,它還是引用上面的其它三種類型為好。

類名

類的 UML 表示是一個長方形,垂直地分為三個區,如圖 1 所示。頂部區域顯示類的名字。中間的區域列出類的屬性。底部的區域列出類的操作。當在一個類圖上畫一個類元素時,你必須要有頂端的區域,下面的二個區域是可選擇的(當圖描述僅僅用於顯示分類器間關係的高層細節時,下面的兩個區域是不必要的)。圖 1 顯示一個航線班機如何作為 UML 類建模。正如我們所能見到的,名字是 Flight,我們可以在中間區域看到Flight類的3個屬性:flightNumber,departureTime 和 flightDuration。在底部區域中我們可以看到Flight類有兩個操作:delayFlight 和 getArrivalTime。

圖 1: Flight類的類圖

圖 1: Flight類的類圖

類屬性列表

類的屬性節(中部區域)在分隔線上列出每一個類的屬性。屬性節是可選擇的,要是一用它,就包含類的列表顯示的每個屬性。該線用如下格式:

name : attribute type

flightNumber : Integer

繼續我們的Flight類的例子,我們可以使用屬性型別資訊來描述類的屬性,如表 1 所示。

表 1:具有關聯型別的Flight類的屬性名字

屬性名稱屬性型別
flightNumber Integer
departureTime Date
flightDuration Minutes

在業務類圖中,屬性型別通常與單位相符,這對於圖的可能讀者是有意義的(例如,分鐘,美元,等等)。然而,用於生成程式碼的類圖,要求類的屬性型別必須限制在由程式語言提供的型別之中,或包含於在系統中實現的、模型的型別之中。

在類圖上顯示具有預設值的特定屬性,有時是有用的(例如,在銀行賬戶應用程式中,一個新的銀行賬戶會以零為初始值)。UML 規範允許在屬性列表節中,通過使用如下的記號作為預設值的標識:

name : attribute type = default value

舉例來說:

balance : Dollars = 0

顯示屬性預設值是可選擇的;圖 2 顯示一個銀行賬戶類具有一個名為 balance的型別,它的預設值為0。

圖 2:顯示預設為0美元的balance屬性值的銀行賬戶類圖。

圖 2:顯示預設為0美元的balance屬性值的銀行賬戶類圖。

類操作列表

類操作記錄在類圖長方形的第三個(最低的)區域中,它也是可選擇的。和屬性一樣,類的操作以列表格式顯示,每個操作在它自己線上。操作使用下列記號表現:

	name(parameter list) : type of value returned

下面的表 2 中Flight類操作的對映。

表 2:從圖 2 對映的Flight類的操作

操作名稱 返回引數 值型別
delayFlight
Name Type
numberOfMinutes Minutes
N/A
getArrivalTime N/A Date

圖3顯示,delayFlight 操作有一個Minutes型別的輸入引數 -- numberOfMinutes。然而,delayFlight 操作沒有返回值。 1當一個操作有引數時,引數被放在操作的括號內;每個引數都使用這樣的格式:“引數名:引數型別”。

圖 3:Flight類操作引數,包括可選擇的“in”標識。

圖 3:Flight類操作引數,包括可選擇的“in”標識。

當文件化操作引數時,你可能使用一個可選擇的指示器,以顯示引數到操作的輸入引數、或輸出引數。這個可選擇的指示器以“in”或“out”出現,如圖3中的操作區域所示。一般來說,除非將使用一種早期的程式程式語言,如Fortran ,這些指示器可能會有所幫助,否則它們是不必要的。然而,在 C++和Java中,所有的引數是“in”引數,而且按照UML規範,既然“in”是引數的預設型別,大多數人將會遺漏輸入/輸出指示器。

繼承

在面向物件的設計中一個非常重要的概念,繼承,指的是一個類(子類)繼承另外的一個類(超類)的同一功能,並增加它自己的新功能(一個非技術性的比喻,想象我繼承了我母親的一般的音樂能力,但是在我的家裡,我是唯一一個玩電吉他的人)的能力。為了在一個類圖上建模繼承,從子類(要繼承行為的類)拉出一條閉合的,單鍵頭(或三角形)的實線指向超類。考慮銀行賬戶的型別:圖 4 顯示 CheckingAccount 和 SavingsAccount 類如何從 BankAccount 類繼承而來。

圖 4: 繼承通過指向超類的一條閉合的,單箭頭的實線表示。

圖 4: 繼承通過指向超類的一條閉合的,單箭頭的實線表示。

在圖 4 中,繼承關係由每個超類的單獨的線畫出,這是在IBM Rational Rose和IBM Rational XDE中使用的方法。然而,有一種稱為 樹標記的備選方法可以畫出繼承關係。當存在兩個或更多子類時,如圖 4 中所示,除了繼承線象樹枝一樣混在一起外,你可以使用樹形記號。圖 5 是重繪的與圖 4 一樣的繼承,但是這次使用了樹形記號。

圖 5: 一個使用樹形記號的繼承例項

圖 5: 一個使用樹形記號的繼承例項

抽象類及操作
細心的讀者會注意到,在圖 4 和 圖5 中的圖中,類名BankAccount和withdrawal操作使用斜體。這表示,BankAccount 類是一個抽象類,而withdrawal方法是抽象的操作。換句話說,BankAccount 類使用withdrawal規定抽象操作,並且CheckingAccount 和 SavingsAccount 兩個子類都分別地執行它們各自版本的操作。

然而,超類(父類)不一定要是抽象類。標準類作為超類是正常的。

關聯
當你係統建模時,特定的物件間將會彼此關聯,而且這些關聯本身需要被清晰地建模。有五種關聯。在這一部分中,我將會討論它們中的兩個 -- 雙向的關聯和單向的關聯,而且我將會在Beyond the basics部分討論剩下的三種關聯型別。請注意,關於何時該使用每種型別關聯的詳細討論,不屬於本文的範圍。相反的,我將會把重點集中在每種關聯的用途,並說明如何在類圖上畫出關聯。

雙向(標準)的關聯
關聯是兩個類間的聯接。關聯總是被假定是雙向的;這意味著,兩個類彼此知道它們間的聯絡,除非你限定一些其它型別的關聯。回顧一下Flight 的例子,圖 6 顯示了在Flight類和Plane類之間的一個標準型別的關聯。

圖 6:在一個Flight類和Plane類之間的雙向關聯的例項

圖 6:在一個Flight類和Plane類之間的雙向關聯的例項

一個雙向關聯用兩個類間的實線表示。線上的任一端,你放置一個角色名和多重值。圖 6 顯示Flight與一個特定的Plane相關聯,而且Flight類知道這個關聯。因為角色名以Plane類表示,所以Plane承擔關聯中的“assignedPlane”角色。緊接於Plane類後面的多重值描述0...1表示,當一個Flight實體存在時,可以有一個或沒有Plane與之關聯(也就是,Plane可能還沒有被分配)。圖 6 也顯示Plane知道它與Flight類的關聯。在這個關聯中,Flight承擔“assignedFlights”角色;圖 6 的圖告訴我們,Plane實體可以不與flight關聯(例如,它是一架全新的飛機)或與沒有上限的flight(例如,一架已經服役5年的飛機)關聯。

由於對那些在關聯尾部可能出現的多重值描述感到疑惑,下面的表3列出了一些多重值及它們含義的例子。

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

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

單向關聯
在一個單向關聯中,兩個類是相關的,但是隻有一個類知道這種聯絡的存在。圖 7 顯示單向關聯的透支財務報告的一個例項。

圖 7: 單向關聯一個例項:OverdrawnAccountsReport 類 BankAccount 類,而 BankAccount 類則對關聯一無所知。

圖 7: 單向關聯一個例項:OverdrawnAccountsReport 類 BankAccount 類,而 BankAccount 類則對關聯一無所知。

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

軟體包
不可避免,如果你正在為一個大的系統或大的業務領域建模,在你的模型中將會有許多不同的分類器。管理所有的類將是一件令人生畏的任務;所以,UML 提供一個稱為 軟體包的組織元素。軟體包使建模者能夠組織模型分類器到名字空間中,這有些象檔案系統中的資料夾。把一個系統分為多個軟體包使系統變成容易理解,尤其是在每個軟體包都表現系統的一個特定部分時。 3

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

  • 如果建模者決定在大長方形中顯示軟體包的成員,則所有的那些成員 4需要被放置在長方形裡面。另外,所有軟體包的名字需要放在軟體包的較小長方形之內(如圖 8 的顯示)。
  • 如果建模者決定在大的長方形之外顯示軟體包成員,則所有將會在圖上顯示的成員都需要被置於長方形之外。為了顯示屬於軟體包的分類器屬於,從每個分類器畫一條線到裡面有加號的圓周,這些圓周粘附在軟體包之上(圖9)。
圖 8:在軟體包的長方形內顯示軟體包成員的軟體包元素例子

圖 8:在軟體包的長方形內顯示軟體包成員的軟體包元素例子

圖 9:一個通過連線線表現軟體包成員的軟體包例子

圖 9:一個通過連線線表現軟體包成員的軟體包例子

瞭解基礎重要性

在 UML 2 中,瞭解類圖的基礎更為重要。這是因為類圖為所有的其他結構圖提供基本的構建塊。如元件或物件圖(僅僅是舉了些例子)。





回頁首


超過基礎

到此為止,我已經介紹了類圖的基礎,但是請繼續往下讀!在下面的部分中,我將會引導你到你會使用的類圖的更重要的方面。這些包括UML 2 規範中的介面,其它的三種關聯型別,可見性和其他補充。

介面
在本文的前面,我建議你以類來考慮分類器。事實上,分類器是一個更為一般的概念,它包括資料型別和介面。

關於何時、以及如何高效地在系統結構圖中使用資料型別和介面的完整討論,不在本文的討論範圍之內。既然這樣,我為什麼要在這裡提及資料型別和介面呢?你可能想在結構圖上模仿這些分類器型別,在這個時候,使用正確的記號來表示,或者至少知道這些分類器型別是重要的。不正確地繪製這些分類器,很有可能將使你的結構圖讀者感到混亂,以後的系統將不能適應需求。

一個類和一個介面不同:一個類可以有它形態的真實例項,然而一個介面必須至少有一個類來實現它。在 UML 2 中,一個介面被認為是類建模元素的特殊化。因此,介面就象類那樣繪製,但是長方形的頂部區域也有文字“interface”,如圖 10 所示。 5

圖 10:Professor類和Student類實現Person介面的類圖例項

圖 10:Professor類和Student類實現Person介面的類圖例項

在圖 10 中顯示的圖中,Professor和Student類都實現了Person的介面,但並不從它繼承。我們知道這一點是由於下面兩個原因:1) Person物件作為介面被定義 -- 它在物件的名字區域中有“interface”文字,而且我們看到由於Professor和Student物件根據畫類物件的規則(在它們的名字區域中沒有額外的分類器文字)標示,所以它們是 物件。 2) 我們知道繼承在這裡沒有被顯示,因為與帶箭頭的線是點線而不是實線。如圖 10 所示,一條帶有閉合的單向箭頭的 線意味著實現(或實施);正如我們在圖 4 中所見到的,一條帶有閉合單向箭頭的線表示繼承。

更多的關聯
在上面,我討論了雙向關聯和單向關聯。現在,我將會介紹剩下的三種類型的關聯。

關聯類
在關聯建模中,存在一些情況下,你需要包括其它類,因為它包含了關於關聯的有價值的資訊。對於這種情況,你會使用 關聯類 來繫結你的基本關聯。關聯類和一般類一樣表示。不同的是,主類和關聯類之間用一條相交的點線連線。圖 11 顯示一個航空工業例項的關聯類。

圖 11:增加關聯類 MileageCredit

圖 11:增加關聯類 MileageCredit

在圖 11 中顯示的類圖中,在Flight類和 FrequentFlyer 類之間的關聯,產生了稱為 MileageCredit的關聯類。這意味當Flight類的一個例項關聯到 FrequentFlyer 類的一個例項時,將會產生 MileageCredit 類的一個例項。

聚合
聚合是一種特別型別的關聯,用於描述“總體到區域性”的關係。在基本的聚合關係中, 部分類 的生命週期獨立於 整體類 的生命週期。

舉例來說,我們可以想象, 是一個整體實體,而 車輪 輪胎是整輛車的一部分。輪胎可以在安置到車時的前幾個星期被製造,並放置於倉庫中。在這個例項中,Wheel類例項清楚地獨立地Car類例項而存在。然而,有些情況下, 部分 類的生命週期並 獨立於 整體 類的生命週期 -- 這稱為合成聚合。舉例來說,考慮公司與部門的關係。 公司和部門 都建模成類,在公司存在之前,部門不能存在。這裡Department類的例項依賴於Company類的例項而存在。

讓我們更進一步探討基本聚合和組合聚合。

基本聚合
有聚合關係的關聯指出,某個類是另外某個類的一部分。在一個聚合關係中,子類例項可以比父類存在更長的時間。為了表現一個聚合關係,你畫一條從父類到部分類的實線,並在父類的關聯末端畫一個未填充稜形。圖 12 顯示車和輪胎間的聚合關係的例子。

圖 12: 一個聚合關聯的例子

圖 12: 一個聚合關聯的例子

組合聚合
組合聚合關係是聚合關係的另一種形式,但是子類例項的生命週期依賴於父類例項的生命週期。在圖13中,顯示了Company類和Department類之間的組合關係,注意組合關係如聚合關係一樣繪製,不過這次菱形是被填充的。

圖 13: 一個組合關係的例子

圖 13: 一個組合關係的例子

在圖 13 中的關係建模中,一個Company類例項至少總有一個Department類例項。因為關係是組合關係,當Company例項被移除/銷燬時,Department例項也將自動地被移除/銷燬。組合聚合的另一個重要功能是部分類只能與父類的例項相關(舉例來說,我們例子中的Company類)。

反射關聯
現在我們已經討論了所有的關聯型別。就如你可能注意到的,我們的所有例子已經顯示了兩個不同類之間的關係。然而,類也可以使用反射關聯與它本身相關聯。起先,這可能沒有意義,但是記住,類是抽象的。圖 14 顯示一個Employee類如何通過manager / manages角色與它本身相關。當一個類關聯到它本身時,這並不意味著類的例項與它本身相關,而是類的一個例項與類的另一個例項相關。

圖 14:一個反射關聯關係的例項

圖 14:一個反射關聯關係的例項

圖 14 描繪的關係說明一個Employee例項可能是另外一個Employee例項的經理。然而,因為“manages”的關係角色有 0..*的多重性描述;一個僱員可能不受任何其他僱員管理。

可見性
在面向物件的設計中,存在屬性及操作可見性的記號。UML 識別四種類型的可見性:public,protected,private及package。

UML 規範並不要求屬性及操作可見性必須顯示在類圖上,但是它要求為每個屬性及操作定義可見性。為了在類圖上的顯示可見性,放置可見性標誌於屬性或操作的名字之前。雖然 UML 指定四種可見性型別,但是實際的程式語言可能增加額外的可見性,或不支援 UML 定義的可見性。表4顯示了 UML 支援的可見性型別的不同標誌。

表 4:UML 支援的可見性型別的標誌

標誌可見性型別
+ Public
# Protected
- Private
~ Package

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

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

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




回頁首

既然我們已經覆蓋了基礎和高階主題,我們將覆蓋一些由UML 1. x增加的類圖的新記號。

例項
當一個系統結構建模時,顯示例子類例項有時候是有用的。為了這種結構建模,UML 2 提供 例項規範 元素,它顯示在系統中使用例子(或現實)例項的值得注意的資訊。

例項的記號和類一樣,但是取代頂端區域中僅有的類名,它的名字是經過拼接的:

Instance Name : Class Name

舉例來說:

Donald : Person

因為顯示例項的目的是顯示值得注意的或相關的資訊,沒必要在你的模型中包含整個實體屬性及操作。相反地,僅僅顯示感興趣的屬性及其值是完全恰當的。如圖16所描述。

圖 16:Plane類的一個例項例子(只顯示感興趣的屬性值)

圖 16:Plane類的一個例項例子(只顯示感興趣的屬性值)

然而,僅僅表現一些例項而沒有它們的關係不太實用;因此,UML 2 也允許在實體層的關係/關聯建模。繪製關聯與一般的類關係的規則一樣,除了在建模關聯時有一個附加的要求。附加的限制是,關聯關係必須與類圖的關係相一致,而且關聯的角色名字也必須與類圖相一致。它的一個例子顯示於圖 17 中。在這個例子中,例項是圖 6 中類圖的例子例項。

圖 17:圖 6 中用例項代替類的例子

圖 17:圖 6 中用例項代替類的例子

圖 17 有Flight類的二個例項,因為類圖指出了在Plane類和Flight類之間的關係是 0或多。因此,我們的例子給出了兩個與NX0337 Plane例項相關的Flight例項。

角色
建模類的例項有時比期望的更為詳細。有時,你可能僅僅想要在一個較多的一般層次做類關係的模型。在這種情況下,你應該使用 角色 記號。角色記號類似於例項記號。為了建立類的角色模型,你畫一個方格,並在內部放置類的角色名及類名,作為實體記號,但是在這情況你不能加下劃線。圖 18 顯示一個由圖 14 中圖描述的僱員類扮演的角色例項。在圖 18 中,我們可以認為,即使僱員類與它本身相關,關係確實是關於僱員之間扮演經理及團隊成員的角色。

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

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

注意,你不能在純粹類圖中做類角色的建模,即使圖 18顯示你可以這麼做。為了使用角色記號,你將會需要使用下面討論的內部結構記號。

內部的結構
UML 2 結構圖的更有用的功能之一是新的內部結構記號。它允許你顯示一個類或另外的一個分類器如何在內部構成。這在 UML 1. x 中是不可能的,因為記號限制你只能顯示一個類所擁有的聚合關係。現在,在 UML 2 中,內部的結構記號讓你更清楚地顯示類的各個部分如何保持關係。

讓我們看一個例項。在圖 18 中我們有一個類圖以表現一個Plane類如何由四個引擎和兩個控制軟體物件組成。從這個圖中省略的東西是顯示關於飛機部件如何被裝配的一些資訊。從圖 18 的圖,你無法說明,是每個控制軟體物件控制兩個引擎,還是一個控制軟體物件控制三個引擎,而另一個控制一個引擎。

圖 19: 只顯示物件之間關係的類圖

圖 19: 只顯示物件之間關係的類圖

繪製類的內在結構將會改善這種狀態。開始時,你通過用二個區域畫一個方格。最頂端的區域包含類名字,而較低的區域包含類的內部結構,顯示在它們父類中承擔不同角色的部分類,角色中的每個部分類也關係到其它類。圖 19 顯示了Plane類的內部結構;注意內部結構如何澄清混亂性。

圖 20:Plane類的內部結構例子。

圖 20:Plane類的內部結構例子。

在圖 20 中Plane有兩個 ControlSoftware 物件,而且每個控制二個引擎。在圖左邊上的 ControlSoftware(control1)控制引擎 1 和 2 。在圖右邊的 ControlSoftware(control2)控制引擎 3 和 4 。





回頁首


結論

至少存在兩個瞭解類圖的重要理由。第一個是它顯示系統分類器的靜態結構;第二個理由是圖為UML描述的其他結構圖提供了基本記號。開發者將會認為類圖是為他們特別建立的;但是其他的團隊成員將發現它們也是有用的。業務分析師可以用類圖,為系統的業務遠景建模。正如我們將會在本系列關於 UML 基礎的文章中見到的,其他的圖 -- 包括活動圖,序列圖和狀態圖——參考類圖中的類建模和文件化。

關於“UML 基礎”的本系列的後面的元件圖。




回頁首


1 delayFlight沒有返回值,因為我作出了設計決定,不要返回值。有一點可以爭論的是,延遲操作應該返回新的到達時間,而且,如果是這種情形,操作屬性將顯示為 delayFlight(numberOfMinutes : Minutes) : Date。

2可能看起來很奇怪, BankAccount 類不知道 OverdrawnAccountsReport 類。這個建模使報表類可以知道它們報告的業務類,但是業務類不知道它們正在被報告。這解開兩個物件的耦合,並因此使系統變得更能適應變化。

3 軟體包對於組織你的模型類是龐大的,但是記住重要的一點是,你的類圖應該是關於建模系統的容易交流的資訊。在你的軟體包有許多類的情況下,最好使用多個主題類圖,而不是僅僅產生一個大的類圖。

4 要理解重要一點,當我說“所有的那些成員”時,我僅僅意味著在當前圖中的類將顯示出來。顯示一個有內容的軟體包的圖,不需要顯示它的所有內容。它可以依照一些準則,顯示包含元素的子集,這個準則就是並非所有的軟體包分類器都是必需的。

5 當畫一個類圖時,在 UML 規範中,全部要做的只是把類放入長方形的頂部區域,而你同理處理介面;然而,UML 規範認為,在這個區域放置“class”文字是可選的,如果類沒有顯示,那麼它應該被假設。



腳註

相關推薦

UML 基礎:

UML 基礎: 類圖級別: 高這是關於統一建模語言、即UML 裡採用的基本圖的一系列文章的一部分。在我 先前關於序列圖的文章 裡,我把重點從 UML 1.4 版,轉移到 OMG的採用UML 2.0版草案規範(又稱為UML 2)。在這篇文章中,我將會討論結構圖,這是已經在 UM

20170908工作日記--UML、HTTP協議、Volley源碼走讀

width gen shtml 操作系統 android 瀏覽器中 系統 總結 http協議 隨手搜了一下,Android studio居然能夠自動幫追我們生成UML的類圖,簡直太棒了http://www.gcssloop.com/course/UsePlantUMLInA

powerdesign、navacat、ERuml、時序

dea timezone 初始化 num idt 找到 源地址 more 選擇 關於建表和生成實體以及ER圖的簡便方法 a:用navacat客戶端生成簡單的ER圖,並生成建表sql,執行生成表。 b:用powerdesign連接數據庫,反向生成帶有註釋的ER圖。 c:用id

UML常見關係

享受達到目標的這個過程,會讓自己變輕鬆! 1、UML類圖關係 1.1、泛化 1.2、實現 1.3、關聯 1.4、聚合 1.5、組合 1.6、依賴

UML介紹——

在UML類圖中,常見的有以下幾種關係: 泛化(Generalization), 實現(Realization),關聯(Association),聚合(Aggregation),組合(Composition),依賴(Dependency)。可以在powerdesigner軟體中使用,比較簡單。 1.

UML(四)-(機房)

概念 UML類圖:顯示了系統的靜態結構,而系統的靜態結構構成了系統的概念基礎。類圖用於對系統中的各種概念進行建模,並描繪他們之間的關係。 類圖的作用:類圖常用來描述業務或軟體系統的組成、結構和關係,我們通常通過下面三種方式使用類圖: (1)位系統詞彙建模型 (2)模型化簡單的協作 (3)

UML之——

         類圖——what          類是對現實生活中一類具有共同特徵的事物的抽象。類圖(Class diagram)是顯示系統的靜態結構,特別是系統中存在的類、類的內部結構以及它們與其他類的關係等。類圖是面向物件建模的主要組成部分。它既用於應用程式的系統分

UML(一) 間關係

UML類圖 UML類圖介紹 在UML 2.*的13種圖形中,類圖是使用頻率最高的UML圖之一。類圖用於描述系統中所包含的類以及它們之間的相互關係,幫助開發人員理解系統,它是系統分析和設計階段的重要產物,也是系統編碼和測試的重要模型依據。 類的U

UML繪製時如何表示可見性級別

用UML建模繪製類圖時,表示可見性級別分為兩種情況 一、用rose工具繪圖時表示方法 如圖 name列為類的屬性,string列為類的資料型別 類中屬性前的小圖表作用: 藍色小框表代表public(公有) 藍色小小框+鎖代表private(私有) 藍色小框+鑰匙代表protect

UML—【

【內容】 1.類和類圖 類:是對物件的抽象,具有相似結構、行為和關係的一組物件的描述符。類的圖示如下 類圖(class diagram)是描述類,介面,協作以及他們之間關係的圖,類圖主要用於描述系統的靜態結構。 類和類圖的關係: 在UML圖中,類加上他們之間的關係就構成了類

手把手教你使用start uml

在畫類圖之前,首先得了解類與類之間的關係,剛開始也是知道類與類之間就是繼承啊,什麼聚合 關聯,自關聯等,都不太懂,其實也不是不懂,是平時不知道這些名詞,但我們在寫程式碼中無時無刻在使用到了,如果是面試

UML——簡單學習

複習了一下類圖的畫法~ 就一張圖看看就明白啦~ 廢話不多說,哈哈~ Class類: 屬性和方法之前可附加的可見性修飾符: 加號(+)表示public;減號(-)表示private;#號表示pr

UML

UML定義了以下5類、10種模型圖。     第一類是用例圖,用例圖從使用者角度描述系統的功能,並指出各功能的操作者。     第二類是靜態圖,包括類圖,物件圖和包圖。其中類圖用於定義系統中的類

【二】、UML基礎知識——圖解乾坤

【二】、UML基礎知識 UML概述 UML是一個通用的視覺化建模語言,不同於程式語言,它通過一些標準的圖形符號和文字來對系統進行建模。用於對軟體進行描述、視覺化處理、構建軟體系統的文件。是一套總結了以往建模技術的經驗並吸收了當今最優秀成果的標準建模方法。 UML的結構 檢視 使用者檢視:以使用者的觀點表示

UML,方法,接口實現等基礎操作【入門】

style 怎麽辦 畫出 圖形 tro strong font .html 基礎操作 1.轉自:http://blog.sina.com.cn/s/blog_5bd6b4510101585x.html 在visio中畫類圖時,我們一般需要畫出接口和實現類並且表明他們的實

C++基礎——用C++例項理解UML

                     本文包括以下內容:類間存在哪幾種常見關係?它們之間的區別和聯絡是什麼?如何在程式碼中反映類間的關係?如何理解 IN/OUT mode型的引數?類展示class Circle{private:    double radius_;    Point center_;pu

UML的關係詳解(基礎知識)

在畫類圖的時候,理清類和類之間的關係是重點。類的關係有泛化(Generalization)、實現(Realization)、依賴(Dependency)和關聯(Association)。其中關聯又分為一般關聯關係和聚合關係(Aggregation),合成關係(Composi

運用GRASP原則來做uml交互-------pos機實例

enter 創建者模式 事件 高內聚 uml 創建 我們 gis nts 重要的幾個GRASP原則:1.控制器模式 2.創建者模式 (原則)3。信息專家模式(原則) 4. 高內聚 低耦合 這裏所說的模式並不是java中針對具體的事件的設計模式 主成功場景的幾個操作:

uml和er中主外鍵的表示區別

合同 數據 引用 cnblogs nbsp 單獨 .cn .com 圖表 在er圖也就是數據庫中,無論是mysql/oracle都是從表引用主表的pk作為外鍵。 而在uml類圖表示法中,他們的順序則剛好相反,從主對象導向到子對象,如下: 主體是資金借款方,征信信息和資金借

UML學習

耗時 什麽 col 重要 employee 需求 好的 程序 相互 UML類圖學習 類 類(Class)封裝了數據和行為,是面向對象的重要組成部分,它是具有相同屬性、操作、關系的對象集合的總稱。在系統中,每個類都具有一定的職責,職責指的是類要完成什麽樣的功能