UML學習筆記之類圖與對象圖

什麼是類圖?

類圖顯示了系統的靜態結構,標識了不同的實體(人、事物和數據)是如何彼此相關聯的。在類途中不僅包含爲系統定義的各種類(其中包含了類的屬性和操作),也包含了他們之間的關係,如關聯、依賴和聚合等。

類圖和對象圖是用於描述系統靜態結構的兩種重要手段。類圖從抽象的角度描述系統的靜態結構,特別是模型中存在的類、類的內部結構以及他們與其他類之間的相互關係,而對象是類的實例化表示,對象圖是系統靜態結構的一個快照。

定義:

類圖中包含各種概念,這些概念包括真實世界中的概念、抽象的概念、實現方面的概念和計算機領域的概念。類圖就是用於對系統中的各種概念進行建模,並描繪出他們之間關係的圖。這些現實生活中的概念抽象到類圖中就分別對應了類、接口、數據結構以及構件。在UML中,這些類型統稱爲類元(Classifer)。類元是對有實例且有屬性形式的結構特徵和操作形式的行爲特徵的建模元素的統稱。所以,創建類圖的目的之一就是顯示建模系統的類型。

一個類圖通過系統中的類以及個各類之間的關係來描述系統的靜態方面。類不僅描述了系統內部信息的結構,也包含了系統的內部行爲,系統通過自身行爲與外部事物進行交互。

類圖中一共包含了以下幾種模型元素,分別是:類(class)、接口(Interface)、依賴(Dependency)關係、泛化(Generalization)關係、關聯關係(Association)以及實現(Realization)關係。

類圖的組成:

類是面向對象中系統組織結構的核心,在此不再贅述,相信學習過C++或者JAVA任何一個面嚮對象語言的讀者都能瞭解類是什麼。在UML中,類被表述成爲具有相同結構、行爲和關係的一組對象的描述符號。

UML的圖形表示中,類的表示法是一個矩形,這個矩形由三個部分組成,分別是類的名稱,類的屬性和類的操作。如圖:

對於類的組成不再贅述,和麪向對象中類的構成大致相同。

類之間的關係:

類之間的關係主要包含依賴關係,泛化關係,關聯關係和實現關係四種。

依賴關係:

依賴表示的是兩個或多個模型元素之間語義上的連接關係。提供者的某些變化會要求或指示依賴關係中客戶的變化,即依賴關係將行爲和實現與影響其他類的類聯繫起來。

依賴關係分爲以下五種類型:

綁定依賴

實現依賴

使用依賴

授權依賴

抽象依賴

我們主要討論前四個,抽象依賴不討論。

綁定依賴:對於綁定依賴,只包含綁定關係一種。綁定是將數值分配給模板的參數。它是具有精確語義的高度結構化關係,它表明對目標模板使用給定的實際參數進行實例化。例如:模板容器類和這個類的實例之間的關係被模型化爲綁定依賴。綁定包括一個映射到模板的形式參數到實際參數的列表。

實現依賴:對於實現來說,實現是類元之間的語義關係,關係中的一個類元描述了另一個類元(接口或者抽象類)實現的契約。也就是說,實現關係中的一個類只具有行爲的定義,而具體的結構和行爲,則是由另一個類來給出,例如我們在使用C++進行編程的時候可以定義一個包含虛函數的父類,父類本身不實現虛函數,只做一個聲明,在子類繼承父類過後對父類中的虛函數進行實現,他們之間就存在了一個實現依賴,對於JAVA來說,接口和繼承接口的類也是一個實現依賴,在其他編程語言中,抽象類和子類也可以構成實現依賴。如圖所示:


使用依賴:

使用依賴都是非常直接的,通常表示客戶使用提供者提供的服務以實現自身的行爲。使用依賴關係包含使用、調用、參數、發送和實例等:使用表示的是一個元素的行爲或實現會影響另一個元素的行爲或者實現。調用表示一個類中的方法調用另一個類的操作;參數表示類中的一個操作和它參數之間的關係;發送表示一個類中的方法把信號發送到相關接受目標;實例表示一個類的方法創建了另一個類的實例。舉個例子:比如說編譯器在編譯程序的時候在編譯A類的時候因爲A類用到了B類,所以要對B先進行定義,A和B之間就存在了一個使用依賴關係。

授權依賴:

授權依賴用來表示一個事物對另外一個事物進行訪問的能力。提供者通過設定客戶類的相關權限控制和限制對其內容訪問的方法。授權依賴關係包含訪問、導入、友元等依賴關係:訪問允許一個包引用另一個包中的元素;導入指的是提供者包中的元素名稱被加入到客戶包的命名空間中;友元是指允許客戶訪問提供者中的內容,即使客戶沒有足夠的訪問提供者的可見性。

2.泛化關係:

泛化關係用來描述類的一般和具體之間的關係。類似於面嚮對象語言中的繼承,具體描述建立在對類的一般描述的基礎之上,並對其進行了擴展,因此在具體描述中不僅包含一般描述中所擁有的所有特性、成員和關係、而且還包含了具體描述的補充信息,例如小客車,汽車都是交通工具的一種。

在泛化關係中,一般描述的類被稱作父類,具體描述的類被稱爲子類,這些也和麪向對象語言中的繼承概念類似,再此不再贅述。


3.關聯關係:

關聯關係是一種結構關係,指出了一個事物的對象與另一個事物的對象之間的語義上的連接,例如,類(library)圖書館類和(book)書類,就是一種一對多關聯,這表明每個Book實例僅被一個library實例所擁有。此外,給定book是能夠找到他所屬的library,給定library,能夠找到他的全部book。

由於類是抽象的,所以類也可以與它本身相關聯,當一個類關聯到他本身時,並不意味着類的實例與他本身相關,而是類的一個實例與類的另一個實例相關。

關聯關係還擁有兩種非常重要的形式,就是聚集(aggregation)關係和組成(composition)關係。

聚集關係描述的是部分與整體關係的關聯,簡單地說,他將一組元素通過關聯組成一個更大更復雜的單元,這種關聯關係就是聚集。

例如對於一個學校來說,聚集關係可以這麼理解:一個學校有很多系部,很多系部組成一個學校,那麼UML圖就應該這麼畫:

組成關係則是一種更強行駛的關聯,在整體中擁有管理部分特有的指責,又是也被稱爲強聚合關係。在UML中組合關係使用帶實心菱形頭的實線來表示,其中頭部指向整體,例如主機 CPU和主板的組成關係就是主機類包含CPU類和主板類。

在Rational Rose中,對關聯關係的表示,還有下列幾種特性應用於關聯端來修飾關聯關係,分別是名稱、角色、多重性、構造型和導航性等。


(1)名稱:關聯關係可以有自己的名稱,用來描述關係的性質。在通常情況下使用一個動詞或動詞短語來命名關聯,以表明源對象在目標對象上執行的動作。

(2)角色:角色指的是在關聯關係中,一個類通過關聯對另外一個類表現出來的職責。當類出現在關聯的一端時,該類就在關聯關係中扮演一個特定的角色。

(3)多重性:多重性是指在關聯關係中,一個類的多個實例與另外一個一個類的一個實例相關。在UML中,多重性是使用一個“..”進行分開的兩個數值區間來表示的,其格式爲minimun..maximum,其中minimun和maximum都是整數。當一個端點給出多少賦值時,就表示該端點可以有多個對象與另一個端點的一個對象進行關聯。

什麼是對象圖?

對象圖中包含對象和鏈,其中對象是類的特定實例,鏈是類之間關係的實例,表示對象之間的特定關係。對象圖所建立的對象模型描述的是某種特定的情況,而類圖所建立的模型描述的是通用的情況。

對象是類的實例,創建一個對象通常可以從以下兩種情況來考慮:第一種情況將對象作爲一個實體,他在某個時刻具有明確得知;另一種情況是作爲一個身份的持有者,不同的時刻有不同的值。

鏈:鏈是兩個或多個對象之間的獨立連接,它是對象引用元祖,是關聯的實例。對象必須是關聯中相應位置處類的直接或間接實例。一個關聯不能有來自同一關聯的迭代連接,即兩個相同的對象引用元祖。鏈其實就是表示了對象之間的特定關係,例如:

李明和專業英語之間就存在一個特定關係,選擇課程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章