設(shè)計模式之UML類圖
設(shè)計模式之UML類圖
學(xué)習(xí)設(shè)計模式,UML類圖是基礎(chǔ),通過UML類圖,能更好地和大家交流,也能很容易就表達(dá)出自己的設(shè)計想法,它就好比普通話,是一種標(biāo)準(zhǔn)語言。
現(xiàn)在流行的主要工具有兩種:RationalRose和MicrosoftVisio,這兩種工具都比較易用,選擇哪種工具就看個人的喜好了。本人對Microsoft的軟件比較有好感,所以自然MicrosoftVisio2003是我的首選。
類:
矩形框代表一個類(如圖-1),類圖分為三層,第一層為類的名稱,如果是抽象類類名用斜體字表示,如圖中動物類所示。第二層是類的特性(通常就是類的字段和屬性)。第三層為類的操作(通常就是方法或行為)。注意前面的符號,“+”表示public,“-”表示private,“#”表示protected.
圖一
動物類是一抽象類,它是不能被實例化的,而豬類可以被實例化。
接口:
UML類圖中接口有兩種表示方法:矩形表示法(如圖-2中的飛翔的接口)和棒棒糖表示法(如圖-2中唐老鴨類中實現(xiàn)講人話的接口)。矩形表示法,頂端有<<接口>>或者<<interface>>,第一行:接口名稱,第二行:接口方法。棒棒糖表示法,圓圈旁為接口名稱,接口方法在實現(xiàn)類中出現(xiàn),如唐老鴨類中的講話。
(圖-2)
泛化(Generalization)
UML類圖中泛化關(guān)系表示類與類之間的繼承關(guān)系,接口與接口之間的繼承關(guān)系,或類對接口的實現(xiàn)關(guān)系。一般化的關(guān)系是從子類指向父類的,與繼承或?qū)崿F(xiàn)的方法相反。具體表現(xiàn):父類父類實例=new子類();
(圖-3)
(圖-4)
用空心三角形+實線來表示繼承(如圖-3)。在靜態(tài)結(jié)構(gòu)圖中,在父類和子類間拖放歸納連接,箭頭指向父類,另一段指向子類。關(guān)聯(lián)關(guān)系是使用實例變量來實現(xiàn)。
用空心三角形+虛線來表示實現(xiàn)接口(如圖-4)。在靜態(tài)結(jié)構(gòu)圖中,右擊任意類形狀(“類”、“參數(shù)化的類”、“實用程序”或“元類”),單擊“形狀顯示選項”,然后在“常規(guī)選項”下選擇“實現(xiàn)鏈接”。將類形狀上的實現(xiàn)鏈接的控制手柄(黃色小菱形)粘附到接口、類或其他元素的連接點上。
關(guān)聯(lián)(Association)
UML類圖中對于兩個相對獨立的對象,當(dāng)一個對象的實例與另一個對象的一些特定實例存在固定的對應(yīng)關(guān)系時,這兩個對象之間為關(guān)聯(lián)關(guān)系。關(guān)聯(lián)又分為雙向關(guān)聯(lián)、單向關(guān)聯(lián)、自身關(guān)聯(lián)。
雙向關(guān)聯(lián):雙向關(guān)聯(lián)是兩個類之間的聯(lián)接。關(guān)聯(lián)總是被假定是雙向的;這意味著,兩個類彼此知道它們間的聯(lián)系,除非你限定一些其它類型的關(guān)聯(lián)。如(圖-5)Flight的例子,顯示了在Flight類和Plane類之間的一個標(biāo)準(zhǔn)類型的關(guān)聯(lián)。
(圖-5)
一個雙向關(guān)聯(lián)用兩個類間的實線表示。在線的任一端,你放置一個角色名和多重值。圖-5顯示Flight與一個特定的Plane相關(guān)聯(lián),而且Flight類知道這個關(guān)聯(lián)。因為角色名以Plane類表示,所以Plane承擔(dān)關(guān)聯(lián)中的“assignedPlane”角色。緊接于Plane類后面的多重值描述0...1表示,當(dāng)一個Flight實體存在時,可以有一個或沒有Plane與之關(guān)聯(lián)(也就是,Plane可能還沒有被分配)。圖-5也顯示Plane知道它與Flight類的關(guān)聯(lián)。在這個關(guān)聯(lián)中,F(xiàn)light承擔(dān)“assignedFlights”角色;圖-5的圖告訴我們,Plane實體可以不與flight關(guān)聯(lián)(例如,它是一架全新的飛機)或與沒有上限的flight(例如,一架已經(jīng)服役5年的飛機)關(guān)聯(lián)。
由于對那些在關(guān)聯(lián)尾部可能出現(xiàn)的多重值描述感到疑惑,下面列出了一些多重值及它們含義的例子(0..1:0個或1個;1:只能1個;0..*:0個或多個;*:0個或多個;1..*:一個或多個;等等。)
UML類圖單項關(guān)聯(lián):在一個單向關(guān)聯(lián)中,兩個類是相關(guān)的,但是只有一個類知道這種聯(lián)系的存在。(圖-6)顯示單向關(guān)聯(lián)的透支財務(wù)報告的一個實例。
(圖-6)
一個單向的關(guān)聯(lián),表示為一條帶有指向已知類的開放箭頭(不關(guān)閉的箭頭或三角形,用于標(biāo)志繼承)的實線。如同標(biāo)準(zhǔn)關(guān)聯(lián),單向關(guān)聯(lián)包括一個角色名和一個多重值描述,但是與標(biāo)準(zhǔn)的雙向關(guān)聯(lián)不同的時,單向關(guān)聯(lián)只包含已知類的角色名和多重值描述。在(圖-6)中的例子中,OverdrawnAccountsReport知道BankAccount類,而且知道BankAccount類扮演“overdrawnAccounts”的角色。然而,和標(biāo)準(zhǔn)關(guān)聯(lián)不同,BankAccount類并不知道它與OverdrawnAccountsReport相關(guān)聯(lián)。
【編輯推薦】