官术网_书友最值得收藏!

5.1 對象圖

對象是類的實例,對象圖也可看作是類圖的實例。對象是面向?qū)ο笙到y(tǒng)運行時的核心,因為設(shè)計的系統(tǒng)在實現(xiàn)使用時,組成系統(tǒng)的各個類將分別創(chuàng)建對象。使用對象圖可以根據(jù)需要建立特定的示例或者測試用例,然后通過示例研究如何完善類圖;或者使用測試用例對類圖中的規(guī)則進行測試,以求發(fā)現(xiàn)類圖中的錯誤或者漏掉的需求,進而修正類圖。

5.1.1 對象和類

對象圖和類圖一樣反映系統(tǒng)的靜態(tài)過程,但它是從實際的或原型化的情景來表達的。對象圖顯示某時刻對象和對象之間的關(guān)系。一個對象圖可以看成一個類圖的特殊用例,實例和類可在其中顯示。

對象表示一個單獨的、可確認(rèn)的物體、單元或?qū)嶓w。它可以是具體的,也可以是抽象的,在問題領(lǐng)域里有確切的角色。換句話說,對象是邊界非常清楚的任何事物。它通常包括狀態(tài)、行為和標(biāo)識等。

1.狀態(tài)

狀態(tài)也叫屬性,對象的狀態(tài)包括對象的所有屬性(通常是靜態(tài)的)和這些屬性的當(dāng)前值(通常是動態(tài)的)。

2.行為

對象的方法和事件可以統(tǒng)稱為對象的行為,沒有一個對象是孤立存在的。對象可以被操作,也可以操作別的對象。而行為就是一個對象根據(jù)它的狀態(tài)改變和消息傳送所采取的行動和所做出的反應(yīng)。

3.標(biāo)識

為了將一個對象與其他所有的對象區(qū)分開來,通常會給它起個名稱,該名稱也可以叫作標(biāo)識。

類是面向?qū)ο蟪绦蛟O(shè)計語言中的一個概念,它實際上是對某種類型的對象定義變量和方法的原型。它表示對現(xiàn)實生活中一類具有共同特征的事物的抽象,是面向?qū)ο缶幊痰幕A(chǔ)。一個類定義了一組對象。類具有行為,它描述一個能夠做出什么以及如何做的方法,它們是可以對這個對象進行操作的程序和過程。

簡單了解對象和類的概念后,如下列出了對象和類的主要區(qū)別。

□ 對象是一個存在于時間和空間中的具體實體,而類僅代表一個抽象,抽象出對象的“本質(zhì)”。

□ 類是共享一個公用結(jié)構(gòu)和一個公共行為的對象集合。

□ 類是靜態(tài)的,而對象是動態(tài)的。

□ 類是一般化,而對象是個性化。

□ 類是定義,而對象是實例。

□ 類是抽象的,而對象是具體的。

5.1.2 對象和鏈

對象圖描述了參與交互的各個對象在交互過程中某一時刻的狀態(tài)。可以認(rèn)為對象圖是類圖在某一時刻的實例。為了繪制對象圖,首先需要添加的第一個內(nèi)容就是實際對象本身。

對象是真實的事物,如特定的用戶、大堂或演出。對象表示符號需要兩個元素,即對象的名稱和描述對象的類的名稱。其語法格式如下:

      object-name : class-name;

上述語法中使用類名的目的是避免產(chǎn)生誤解,因為不同類型的對象可能具有相同的名稱。另外從語法中也可以看出:表示對象的方式與類幾乎是一樣的,其主要區(qū)別是:對象名下面要有下畫線。對象名有3種表示格式,如下圖所示。

上圖中顯示了對象名的3種表示方式,使用其中任何一種都可以。其中,第二種表示方式只有類名、冒號和下畫線,該表示方式說明建立的模型適用于該類的所有實例,這種表示方式被稱為匿名對象,是建模中常用的一種技術(shù)。第三種表示方式僅給出了對象名,而隱藏了屬性。

另外還有一種合法的表示方式,即省略冒號和類名(換句話說,只使用對象的名稱而不告知其類型),但保留了屬性,該方法通過上下文可以很容易地判別出對象的類型。如下圖所示演示了學(xué)生類與學(xué)生對象stu。

在上圖中表示學(xué)生類的stu對象時不僅給出了對象名,還給出了該對象的屬性和相應(yīng)的值。

對于每個屬性,類的實例都有自己特定的值,它們表示了實例的狀態(tài),在UML圖中顯示這些值有助于對類圖和測試用例進行驗證。在UML的對象表示法中,對象的屬性位于對象名稱下面的分欄中,這與類的表示法是類似的。屬性的合法取值范圍由屬性的定義確定,如果類的定義允許,屬性的取值為空也是合法的。

提示

后面的章節(jié)還會介紹其他的圖,所有的交互圖中使用的都是相同的對象表示符號。

對象不僅擁有數(shù)據(jù),還可擁有各種關(guān)系,這些關(guān)系被稱為鏈。對象可以擁有或參與的鏈?zhǔn)怯深悎D中的關(guān)聯(lián)定義的,也就是說,與類定義某種類型的對象一樣,關(guān)聯(lián)也定義了某種類型的鏈。換句話說,對象是類的實例,而鏈?zhǔn)顷P(guān)聯(lián)的實例。

如果兩個對象具有某個關(guān)聯(lián)定義的關(guān)系,則稱它們被鏈接起來。一條連接兩個對象的直線就表示這兩個對象所具有的鏈。鏈有3種命名方法,分別如下。

□ 使用相應(yīng)的關(guān)聯(lián)命名。

□ 使用關(guān)聯(lián)端點的角色名命名。

□ 使用與對應(yīng)類名一致的角色名命名。

在命名對象間的鏈時,可以根據(jù)具體情況使用以上3種方法中的任何一種。例如,下圖中表示Venue對象“holds”和Event對象,除此之外,該圖中還包含兩個Performance對象,這兩個對象和Event之間的鏈?zhǔn)褂门c類名一致的角色名稱描述,另外holds表示關(guān)聯(lián)的名稱。

5.1.3 對象圖概述

對象圖(Object Diagram)就是類圖的實例,它描述的是參與交互的各個對象在交互過程中某一時刻的狀態(tài),它可以看作是類圖在某一時刻的實例。對象圖提供了系統(tǒng)的一個“快照”,顯示在給定時間實際存在的對象以及它們之間的鏈接,可以為一個系統(tǒng)繪制多個不同的對象圖,每個對象圖都代表系統(tǒng)在一個給定時刻的狀態(tài)。對象圖展示系統(tǒng)在給定時間特有的數(shù)據(jù),這些數(shù)據(jù)可以表示各個對象、在這些對象中存儲的屬性值或者這些對象之間的鏈接。

由于對象是類的實例,所以對象圖中使用的符號和關(guān)系與類圖中使用的相同,繪制對象圖有助于理解復(fù)雜的類圖。對象圖不需要提供單獨的形式。類圖中就包含了對象,所以只有對象而無類的類圖就是一個對象圖。

從某種情況來說,對象圖也是一種結(jié)構(gòu)圖。它可以用來呈現(xiàn)系統(tǒng)在特定時刻的對象(Object),以及對象之間的鏈接。在UML中,由于對象為類的實例,所以對象圖可以使用與類圖相同的符號和關(guān)系。如下圖所示為一個對象圖的簡單示例。

在上圖中,Customer類的對象cusOrder擁有兩個訂單對象,本示例中對這3個對象都進行了賦值。從上圖中可以看到,對象圖包含屬性分欄,這是因為對于每個屬性,不同的對象會擁有不同的值;由于類的操作是唯一的,所以擁有該屬性的某個類的對象也會擁有該類的相同操作,如果對象圖中再包含操作,則會顯得多余,因此對象圖中不能包含相關(guān)操作。

1.對象圖的表示方法

對象圖一般包括兩部分:對象名稱和屬性。它們是繪制對象圖的關(guān)鍵。對象名稱和屬性的表示方法如下。

□ 對象名稱 如果包含了類名,則必須加上“:”。另外,為了和類名區(qū)分,還必須加上下畫線。

□ 屬性 由于對象是一個具體的事件,因此所有的屬性值都已經(jīng)確定,因此通常會在屬性的后面列出其值。

2.閱讀對象圖

上圖中已經(jīng)在UML中繪制了一個對象圖,那么如何對對象圖進行閱讀呢?很簡單,其主要步驟如下。

(1)首先找出對象圖中所有的類,即在“:”之后的名稱。

(2)整理完成后通過對象的名稱來了解其具體含義。

(3)按照類來歸納屬性,然后再通過具體的關(guān)聯(lián)確定其含義。

3.繪制對象圖

前面已經(jīng)繪制了簡單的對象圖,下面來看繪制對象圖的主要步驟。

(1)先找出類和對象,通常類名在“class”“new”和“implements”等關(guān)鍵字之后,而對象名通常在類名之后。

(2)對類和對象進行細(xì)化的關(guān)聯(lián)分析。

(3)繪制相應(yīng)的對象圖。

4.對象圖的應(yīng)用說明

下面從兩個方面對對象圖的繪制過程進行說明。

1)論證類模型的設(shè)計

當(dāng)設(shè)計類模型時,相關(guān)人員可以通過對象圖來模擬出一個運行時的狀態(tài),這樣就可以研究在運行時設(shè)計的合理性,同時也可以作為開發(fā)人員討論的一個基礎(chǔ)。

2)分析和說明源代碼

由于類圖只展示了程序的靜態(tài)類結(jié)構(gòu),因此通過類圖看懂代碼的意圖是很困難的。因此,在分析源代碼時,可以通過對象圖來細(xì)化分析,而開發(fā)人員處理邏輯比較復(fù)雜的類交互時可以繪制一些對象圖進行補充說明。

5.對象圖用途

對象圖的用途有很多,其主要用途如下所示。

□ 捕獲實例和連接。

□ 捕獲交互的靜態(tài)部分。

□ 在分析和設(shè)計階段進行創(chuàng)建。

□ 舉例說明數(shù)據(jù)/對象結(jié)構(gòu)。

□ 詳細(xì)描述瞬態(tài)圖。

□ 由分析人員、設(shè)計人員和代碼實現(xiàn)人員開發(fā)。

提示

對象圖不顯示系統(tǒng)的演化過程,如果要顯示系統(tǒng)的演化過程,可以使用帶消息的合作圖,或用順序圖表示一次交互。

5.1.4 對象圖和類圖的區(qū)別

類圖是描述類、接口、協(xié)作以及它們之間關(guān)系的圖,用來顯示系統(tǒng)中各個類的靜態(tài)結(jié)構(gòu)。對象圖描述的是參與交互的各個對象在交互過程中某一時刻的狀態(tài)。對象圖是類圖的實例,它幾乎使用與類圖相同的標(biāo)識。類圖和對象圖之間有多個不同點,其具體說明如下表所示。

5.1.5 使用對象圖測試類圖

對于比較復(fù)雜的類圖來說,它很有可能是不正確的,因此需要使用另外的UML圖對其進行測試,如對象圖。使用對象圖對其測試的過程中有可能會發(fā)現(xiàn)一些錯誤,然后可以針對這些錯誤對類圖的修改提出建議。

本節(jié)以一個簡單的電影售票系統(tǒng)為例,首先繪制最基本的類圖,然后通過構(gòu)造對象圖作為對類圖的測試。從測試過程中可以看到構(gòu)成對象圖的模型元素以及對象圖是如何被作為測試用例來使用的。下圖演示了該系統(tǒng)中關(guān)于售票協(xié)議與座位的一個簡單類圖。

在上圖中可以看出每個售票協(xié)議可以分配不少于一個座位,而每個座位只能和一個銷售協(xié)議進行關(guān)聯(lián)。根據(jù)上圖的類圖來繪制對象圖,首先創(chuàng)建一個新的SalesAgreement對象以及兩個Seat對象,每個Seat對象都由SalesAgreement對象來支配,如下圖所示。

1.未分配的Seat對象

從上面的2個圖中可以看出,每個Seat對象都會被一個SalesAgreement對象所支配,但是通過調(diào)查后發(fā)現(xiàn)有些座位沒有被工作人員銷售出去過,而是直接給觀眾的。重新繪制對象圖,在該圖中添加一個新的Seat對象,該對象不會被任何的SalesAgreement對象所支配,如下圖所示。

如果上圖中所繪制的對象圖是正確的,則需要更改基本類圖,更改后的類圖如下圖所示。

在上圖中允許一個Seat對象被0個或1個SalesAgreement對象支配。

2.多份銷售協(xié)議對應(yīng)一個座位

一個座位是否可以被多個銷售協(xié)議所分配呢?如果查看系統(tǒng)的相關(guān)銷售數(shù)據(jù),大家可以發(fā)現(xiàn)這是可能的。例如2012年10月1號這一天,座位3502被分配過,那么2012年10月2號或其他時間該座位也可以被分配。重新繪制對象圖,在該對象圖中允許Seat對象被多個SalesAgreement對象所支配,如下圖所示。

從上圖中可以看出,SalesAgreement對象的屬性值是日期,這兩個SalesAgreement對象的日期是互不重疊的,即在同一個時間分配相同的座位是不合法的。另外,從上圖中也可以得到其他信息,如一個座位可以被多個而非僅僅一個銷售協(xié)議支配。

重新更改該系統(tǒng)的類圖,更改后的效果如下圖所示。

從上圖中可以看出0個或多個SalesAgreement對象可以分配相同的Seat對象,同時也對SalesAgreement對象添加了約束,該約束規(guī)定SalesAgreement對象支配Seat對象的時間必須是不重疊的。

主站蜘蛛池模板: 大新县| 兖州市| 秭归县| 慈溪市| 辽阳市| 鄂温| 上思县| 湘阴县| 兰西县| 新竹市| 会泽县| 襄城县| 安吉县| 中西区| 遵义市| 金华市| 辽中县| 保靖县| 海原县| 武乡县| 宁远县| 阿坝| 龙陵县| 吐鲁番市| 浦江县| 兴义市| 陵川县| 长治市| 德州市| 长顺县| 山丹县| 湛江市| 奉节县| 松滋市| 无棣县| 开化县| 沽源县| 长海县| 乡宁县| 晋州市| 张家川|