天堂国产午夜亚洲专区-少妇人妻综合久久蜜臀-国产成人户外露出视频在线-国产91传媒一区二区三区

uml 0..1_UML軟件工程組織

發(fā)布時間:2016-12-01 21:10

  本文關鍵詞:UML,由筆耕文化傳播整理發(fā)布。


這是關于統(tǒng)一建模語言、即UML 里采用的基本圖的一系列文章的一部分。在我 先前關于序列圖的文章 里,我把重點從 UML 1.4 版,轉(zhuǎn)移到 OMG的采用UML 2.0版草案規(guī)范(又稱為UML 2)。在這篇文章中,我將會討論結(jié)構(gòu)圖,這是已經(jīng)在 UML 2 中提出的一種新圖種類。由于本系列文章的目的是使人們了解記號元素及它們的含意,該文主要關注類圖。你很快就會知道這樣做的理由。隨后的文章將會覆蓋結(jié)構(gòu)范疇中包含的其它圖。

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

這篇文章假定你對面向?qū)ο蟮脑O計已經(jīng)有了基本的理解。你們當中如果有人需要一些面向?qū)ο蟾拍畹膸椭,那么可以訪問,來獲得Sun公司關于面向?qū)ο缶幊痰暮喍讨笇。閱讀 “什么是類?”和 什么是繼承?” 章節(jié),將提供給你足夠的理解,并對該文的閱讀會有所幫助。另外,David Taylor的書《 Object-Oriented Technologies: A Manager's Guide》提供了面向?qū)ο笤O計的優(yōu)秀,高水平的說明,而無需對計算機編程有高深的理解。

UML 2 中的陰和陽
在 UML 2 中有二種基本的圖范疇:結(jié)構(gòu)圖和行為圖。每個 UML 圖都屬于這二個圖范疇。結(jié)構(gòu)圖的目的是顯示建模系統(tǒng)的靜態(tài)結(jié)構(gòu)。它們包括類,組件和(或)對象圖。另一方面,行為圖顯示系統(tǒng)中的對象的動態(tài)行為,包括如對象的方法,協(xié)作和活動之類的內(nèi)容。行為圖的實例是活動圖,用例圖和序列圖。

大體上的結(jié)構(gòu)圖
如同我所說的,結(jié)構(gòu)圖顯示建模系統(tǒng)的靜態(tài)結(jié)構(gòu)。關注系統(tǒng)的元件,無需考慮時間。在系統(tǒng)內(nèi),靜態(tài)結(jié)構(gòu)通過顯示類型和它們的實例進行傳播。除了顯示系統(tǒng)類型和它們的實例,結(jié)構(gòu)圖至少也顯示了這些元素間的一些關系,可能的話,甚至也顯示它們的內(nèi)部結(jié)構(gòu)。

貫穿整個軟件生命周期,結(jié)構(gòu)圖對于各種團隊成員都是有用的。一般而言,這些圖支持設計驗證,和個體與團隊間的設計交流。舉例來說,業(yè)務分析師可以使用類或?qū)ο髨D,來為當前的資產(chǎn)和資源建模,例如分類賬,產(chǎn)品或地理層次。架構(gòu)師可以使用組件和部署圖,來測試/確認他們的設計是否充分。開發(fā)者可以使用類圖,來設計并為系統(tǒng)的代碼(或即將成為代碼的)類寫文檔。

特殊的類圖

UML 2 把結(jié)構(gòu)圖看成一個分類;這里并不存在稱為“結(jié)構(gòu)圖”的圖。然而,類圖提供結(jié)構(gòu)圖類型的一個主要實例,并為我們提供一組記號元素的初始集,供所有其它結(jié)構(gòu)圖使用。由于類圖是如此基本,本文的剩余部分將會把重點集中在類圖記號集。在本文的結(jié)尾,你將對于如何畫UML 2類圖有所了解,而且對于理解在后面文章中將涉及的其他結(jié)構(gòu)圖有一個穩(wěn)固的基礎。

基礎
如先前所提到的,類圖的目的是顯示建模系統(tǒng)的類型。在大多數(shù)的 UML 模型中這些類型包括:



  • 接口

  • 數(shù)據(jù)類型

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

    類名

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

    圖 1: Flight類的類圖

    圖 1: Flight類的類圖

     

    類屬性列表

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

    name : attribute type

    flightNumber : Integer

    繼續(xù)我們的Flight類的例子,我們可以使用屬性類型信息來描述類的屬性,如表 1 所示。

    表 1:具有關聯(lián)類型的Flight類的屬性名字

    屬性名稱 屬性類型

    flightNumber Integer

    departureTime Date

    flightDuration Minutes

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

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

    name : attribute type = default value

    舉例來說:

    balance : Dollars = 0

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

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

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

     

    類操作列表

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

    name(parameter list) : type of value returned

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

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

    操作名稱 返回參數(shù) 值類型

    delayFlight

    Name Type

    numberOfMinutes Minutes

    N/A

    getArrivalTime N/A Date

    圖3顯示,delayFlight 操作有一個Minutes類型的輸入?yún)?shù) -- numberOfMinutes。然而,delayFlight 操作沒有返回值。 當一個操作有參數(shù)時,參數(shù)被放在操作的括號內(nèi);每個參數(shù)都使用這樣的格式:“參數(shù)名:參數(shù)類型”。

    圖 3:Flight類操作參數(shù),包括可選擇的“in”標識。

    圖 3:Flight類操作參數(shù),包括可選擇的“in”標識。

     

    當文檔化操作參數(shù)時,你可能使用一個可選擇的指示器,以顯示參數(shù)到操作的輸入?yún)?shù)、或輸出參數(shù)。這個可選擇的指示器以“in”或“out”出現(xiàn),如圖3中的操作區(qū)域所示。一般來說,除非將使用一種早期的程序編程語言,如Fortran ,這些指示器可能會有所幫助,否則它們是不必要的。然而,在 C++和Java中,所有的參數(shù)是“in”參數(shù),而且按照UML規(guī)范,既然“in”是參數(shù)的默認類型,大多數(shù)人將會遺漏輸入/輸出指示器。

    繼承

    在面向?qū)ο蟮脑O計中一個非常重要的概念,繼承,指的是一個類(子類)繼承另外的一個類(超類)的同一功能,并增加它自己的新功能(一個非技術(shù)性的比喻,想象我繼承了我母親的一般的音樂能力,但是在我的家里,我是唯一一個玩電吉他的人)的能力。為了在一個類圖上建模繼承,從子類(要繼承行為的類)拉出一條閉合的,單鍵頭(或三角形)的實線指向超類?紤]銀行賬戶的類型:圖 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規(guī)定抽象操作,并且CheckingAccount 和 SavingsAccount 兩個子類都分別地執(zhí)行它們各自版本的操作。

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

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

    雙向(標準)的關聯(lián)
    關聯(lián)是兩個類間的聯(lián)接。關聯(lián)總是被假定是雙向的;這意味著,兩個類彼此知道它們間的聯(lián)系,除非你限定一些其它類型的關聯(lián);仡櫼幌翭light 的例子,圖 6 顯示了在Flight類和Plane類之間的一個標準類型的關聯(lián)。

    圖 6:在一個Flight類和Plane類之間的雙向關聯(lián)的實例

    圖 6:在一個Flight類和Plane類之間的雙向關聯(lián)的實例

     

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

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

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

    可能的多重值描述

    表示 含義

    0..1 0個或1個

    1 只能1個

    0..* 0個或多個

    * 0個或多個

    1..* 1個或我個

    3 只能3個

    0..5 0到5個

    5..15 5到15個

    單向關聯(lián)
    在一個單向關聯(lián)中,兩個類是相關的,但是只有一個類知道這種聯(lián)系的存在。圖 7 顯示單向關聯(lián)的透支財務報告的一個實例。

    圖 7: 單向關聯(lián)一個實例:OverdrawnAccountsReport 類 BankAccount 類,而 BankAccount 類則對關聯(lián)一無所知。

    圖 7: 單向關聯(lián)一個實例:OverdrawnAccountsReport 類 BankAccount 類,而 BankAccount 類則對關聯(lián)一無所知。

     

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

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

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

  • 如果建模者決定在大長方形中顯示軟件包的成員,則所有的那些成員 需要被放置在長方形里面。另外,所有軟件包的名字需要放在軟件包的較小長方形之內(nèi)(如圖 8 的顯示)。

  • 如果建模者決定在大的長方形之外顯示軟件包成員,則所有將會在圖上顯示的成員都需要被置于長方形之外。為了顯示屬于軟件包的分類器屬于,從每個分類器畫一條線到里面有加號的圓周,這些圓周粘附在軟件包之上(圖9)。
  • 圖 8:在軟件包的長方形內(nèi)顯示軟件包成員的軟件包元素例子

    圖 8:在軟件包的長方形內(nèi)顯示軟件包成員的軟件包元素例子

     

    圖 9:一個通過連接線表現(xiàn)軟件包成員的軟件包例子

    圖 9:一個通過連接線表現(xiàn)軟件包成員的軟件包例子

     

    了解基礎重要性

    UML 2 中,了解類圖的基礎更為重要。這是因為類圖為所有的其他結(jié)構(gòu)圖提供基本的構(gòu)建塊。如組件或?qū)ο髨D(僅僅是舉了些例子)。

    超過基礎
    到此為止,我已經(jīng)介紹了類圖的基礎,但是請繼續(xù)往下讀!在下面的部分中,我將會引導你到你會使用的類圖的更重要的方面。這些包括UML 2 規(guī)范中的接口,其它的三種關聯(lián)類型,可見性和其他補充。

    接口
    在本文的前面,我建議你以類來考慮分類器。事實上,分類器是一個更為一般的概念,它包括數(shù)據(jù)類型和接口。

    關于何時、以及如何高效地在系統(tǒng)結(jié)構(gòu)圖中使用數(shù)據(jù)類型和接口的完整討論,不在本文的討論范圍之內(nèi)。既然這樣,我為什么要在這里提及數(shù)據(jù)類型和接口呢?你可能想在結(jié)構(gòu)圖上模仿這些分類器類型,在這個時候,使用正確的記號來表示,或者至少知道這些分類器類型是重要的。不正確地繪制這些分類器,很有可能將使你的結(jié)構(gòu)圖讀者感到混亂,以后的系統(tǒng)將不能適應需求。

    一個類和一個接口不同:一個類可以有它形態(tài)的真實實例,然而一個接口必須至少有一個類來實現(xiàn)它。在 UML 2 中,一個接口被認為是類建模元素的特殊化。因此,接口就象類那樣繪制,但是長方形的頂部區(qū)域也有文本“interface”,如圖 10 所示。

    圖 10:Professor類和Student類實現(xiàn)Person接口的類圖實例

    圖 10:Professor類和Student類實現(xiàn)Person接口的類圖實例

     

    在圖 10 中顯示的圖中,Professor和Student類都實現(xiàn)了Person的接口,但并不從它繼承。我們知道這一點是由于下面兩個原因:1) Person對象作為接口被定義 -- 它在對象的名字區(qū)域中有“interface”文本,而且我們看到由于Professor和Student對象根據(jù)畫類對象的規(guī)則(在它們的名字區(qū)域中沒有額外的分類器文本)標示,所以它們是 類對象。 2) 我們知道繼承在這里沒有被顯示,因為與帶箭頭的線是點線而不是實線。如圖 10 所示,一條帶有閉合的單向箭頭的點 線意味著實現(xiàn)(或?qū)嵤;正如我們在圖 4 中所見到的,一條帶有閉合單向箭頭的實線表示繼承。

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

    關聯(lián)類
    在關聯(lián)建模中,存在一些情況下,你需要包括其它類,因為它包含了關于關聯(lián)的有價值的信息。對于這種情況,你會使用 關聯(lián)類 來綁定你的基本關聯(lián)。關聯(lián)類和一般類一樣表示。不同的是,主類和關聯(lián)類之間用一條相交的點線連接。圖 11 顯示一個航空工業(yè)實例的關聯(lián)類。

    圖 11:增加關聯(lián)類 MileageCredit

    圖 11:增加關聯(lián)類 MileageCredit

     

    在圖 11 中顯示的類圖中,在Flight類和 FrequentFlyer 類之間的關聯(lián),產(chǎn)生了稱為 MileageCredit的關聯(lián)類。這意味當Flight類的一個實例關聯(lián)到 FrequentFlyer 類的一個實例時,將會產(chǎn)生 MileageCredit 類的一個實例。

    聚合
    聚合是一種特別類型的關聯(lián),用于描述“總體到局部”的關系。在基本的聚合關系中, 部分類 的生命周期獨立于 整體類 的生命周期。

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

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

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

    圖 12: 一個聚合關聯(lián)的例子

     

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

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

     

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

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

    圖 14:一個反射關聯(lián)關系的實例

    圖 14:一個反射關聯(lián)關系的實例

     

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

    可見性
    在面向?qū)ο蟮脑O計中,存在屬性及操作可見性的記號。UML 識別四種類型的可見性:public,protected,private及package。

    UML 規(guī)范并不要求屬性及操作可見性必須顯示在類圖上,但是它要求為每個屬性及操作定義可見性。為了在類圖上的顯示可見性,放置可見性標志于屬性或操作的名字之前。雖然 UML 指定四種可見性類型,但是實際的編程語言可能增加額外的可見性,或不支持 UML 定義的可見性。表4顯示了 UML 支持的可見性類型的不同標志。

    表 4:UML 支持的可見性類型的標志

    標志 可見性類型

    + Public

    # Protected

    - Private

    ~ Package

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

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

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

     

    UML 2 補充
    既然我們已經(jīng)覆蓋了基礎和高級主題,我們將覆蓋一些由UML 1. x增加的類圖的新記號。

    實例
    當一個系統(tǒng)結(jié)構(gòu)建模時,顯示例子類實例有時候是有用的。為了這種結(jié)構(gòu)建模,UML 2 提供 實例規(guī)范 元素,它顯示在系統(tǒng)中使用例子(或現(xiàn)實)實例的值得注意的信息。

    實例的記號和類一樣,但是取代頂端區(qū)域中僅有的類名,它的名字是經(jīng)過拼接的:

    Instance Name : Class Name

    舉例來說:

    Donald : Person

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

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

     

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

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

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

     

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

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

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

    注意,你不能在純粹類圖中做類角色的建模,即使圖 18顯示你可以這么做。為了使用角色記號,你將會需要使用下面討論的內(nèi)部結(jié)構(gòu)記號。

    內(nèi)部的結(jié)構(gòu)
    UML 2 結(jié)構(gòu)圖的更有用的功能之一是新的內(nèi)部結(jié)構(gòu)記號。它允許你顯示一個類或另外的一個分類器如何在內(nèi)部構(gòu)成。這在 UML 1. x 中是不可能的,因為記號限制你只能顯示一個類所擁有的聚合關系,F(xiàn)在,在 UML 2 中,內(nèi)部的結(jié)構(gòu)記號讓你更清楚地顯示類的各個部分如何保持關系。

    讓我們看一個實例。在圖 18 中我們有一個類圖以表現(xiàn)一個Plane類如何由四個引擎和兩個控制軟件對象組成。從這個圖中省略的東西是顯示關于飛機部件如何被裝配的一些信息。從圖 18 的圖,你無法說明,是每個控制軟件對象控制兩個引擎,還是一個控制軟件對象控制三個引擎,而另一個控制一個引擎。

    圖 19: 只顯示對象之間關系的類圖

    圖 19: 只顯示對象之間關系的類圖

     

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

    圖 20:Plane類的內(nèi)部結(jié)構(gòu)例子。

    圖 20:Plane類的內(nèi)部結(jié)構(gòu)例子。

     

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

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

    關于“UML 基礎”的本系列的后面的元件圖。

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

    2可能看起來很奇怪, BankAccount 類不知道 OverdrawnAccountsReport 類。這個建模使報表類可以知道它們報告的業(yè)務類,但是業(yè)務類不知道它們正在被報告。這解開兩個對象的耦合,并因此使系統(tǒng)變得更能適應變化。

    3 軟件包對于組織你的模型類是龐大的,但是記住重要的一點是,你的類圖應該是關于建模系統(tǒng)的容易交流的信息。在你的軟件包有許多類的情況下,最好使用多個主題類圖,而不是僅僅產(chǎn)生一個大的類圖。

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

    5 當畫一個類圖時,在 UML 規(guī)范中,全部要做的只是把類放入長方形的頂部區(qū)域,而你同理處理接口;然而,UML 規(guī)范認為,在這個區(qū)域放置“class”文本是可選的,如果類沒有顯示,那么它應該被假設。

    參考資料

  • 您可以參閱本文在 developerWorks 全球站點上的 英文原文。
  •  

    關于作者
    Donald Bell是IBM全球服務的一個IT專家,在那兒他和IBM的客戶一起致力于設計和開發(fā)基于軟件解決方案的J2EE。

     


      本文關鍵詞:UML,由筆耕文化傳播整理發(fā)布。



    本文編號:201336

    資料下載
    論文發(fā)表

    本文鏈接:http://sikaile.net/wenshubaike/xxkj/201336.html


    Copyright(c)文論論文網(wǎng)All Rights Reserved | 網(wǎng)站地圖 |

    版權(quán)申明:資料由用戶a5995***提供,本站僅收錄摘要或目錄,作者需要刪除請E-mail郵箱bigeng88@qq.com
    欧美av人人妻av人人爽蜜桃| 夜夜躁狠狠躁日日躁视频黑人| 一区二区三区免费公开| 99久久无色码中文字幕免费| 亚洲最新的黄色录像在线| 久久三级国外久久久三级| 国产在线日韩精品欧美| 精品偷拍一区二区三区| 日韩成人中文字幕在线一区| 五月情婷婷综合激情综合狠狠| 国产精品夜色一区二区三区不卡| 国产成人综合亚洲欧美日韩| 国内精品伊人久久久av高清| 国产美女精品午夜福利视频 | 99久久精品国产麻豆| 激情内射日本一区二区三区| av中文字幕一区二区三区在线| 国产精品刮毛视频不卡| 六月丁香六月综合缴情| 99精品人妻少妇一区二区人人妻 | 色婷婷视频在线精品免费观看 | 国产免费成人激情视频| 丰满人妻少妇精品一区二区三区| 日韩欧美国产亚洲一区| 小草少妇视频免费看视频| 久久热中文字幕在线视频| 欧美日本道一区二区三区| 中文字幕人妻日本一区二区| 亚洲黄片在线免费小视频| 欧美日韩一级黄片免费观看| 国产级别精品一区二区视频| 国产又粗又猛又黄又爽视频免费| 精品欧美日韩一区二区三区| 午夜国产成人福利视频| 成年人黄片大全在线观看| 亚洲欧美日本成人在线| 亚洲中文字幕在线乱码av| 欧美成人精品一区二区久久| 久热99中文字幕视频在线| 欧美野外在线刺激在线观看| 人妻少妇av中文字幕乱码高清|