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