天天看點

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

什麼是類圖?

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

類圖和對象圖是用于描述系統靜态結構的兩種重要手段。類圖從抽象的角度描述系統的靜态結構,特别是模型中存在的類、類的内部結構以及他們與其他類之間的互相關系,而對象是類的執行個體化表示,對象圖是系統靜态結構的一個快照。

定義:

類圖中包含各種概念,這些概念包括真實世界中的概念、抽象的概念、實作方面的概念和計算機領域的概念。類圖就是用于對系統中的各種概念進行模組化,并描繪出他們之間關系的圖。這些現實生活中的概念抽象到類圖中就分别對應了類、接口、資料結構以及構件。在UML中,這些類型統稱為類元(Classifer)。類元是對有執行個體且有屬性形式的結構特征和操作形式的行為特征的模組化元素的統稱。是以,建立類圖的目的之一就是顯示模組化系統的類型。

一個類圖通過系統中的類以及個各類之間的關系來描述系統的靜态方面。類不僅描述了系統内部資訊的結構,也包含了系統的内部行為,系統通過自身行為與外部事物進行互動。

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

類圖的組成:

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

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

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

對于類的組成不再贅述,和面向對象中類的構成大緻相同。

類之間的關系:

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

依賴關系:

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

依賴關系分為以下五種類型:

綁定依賴

實作依賴

使用依賴

授權依賴

抽象依賴

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

綁定依賴:對于綁定依賴,隻包含綁定關系一種。綁定是将數值配置設定給模闆的參數。它是具有精确語義的高度結構化關系,它表明對目标模闆使用給定的實際參數進行執行個體化。例如:模闆容器類和這個類的執行個體之間的關系被模型化為綁定依賴。綁定包括一個映射到模闆的形式參數到實際參數的清單。

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

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

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

使用依賴:

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

授權依賴:

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

2.泛化關系:

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

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

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

3.關聯關系:

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

由于類是抽象的,是以類也可以與它本身相關聯,當一個類關聯到他本身時,并不意味着類的執行個體與他本身相關,而是類的一個執行個體與類的另一個執行個體相關。

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

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

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

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

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

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

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

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

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

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

什麼是對象圖?

對象圖中包含對象和鍊,其中對象是類的特定執行個體,鍊是類之間關系的執行個體,表示對象之間的特定關系。對象圖所建立的對象模型描述的是某種特定的情況,而類圖所建立的模型描述的是通用的情況。

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

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

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

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