UML期末復習題——2.8:UML Design Class Diagram(DCD)


第八題:設計類圖

 

重要概念:

1. 類圖(Class Diagram): 類圖是面向對象系統建模中最常用和最重要的圖,是定義其它圖的基礎。類圖主要是用來顯示系統中的類、接口以及它們之間的靜態結構和關系的一種靜態模型。UML用類圖表示類、接口及其關聯。

2. 表示類元屬性的方法:

  a.屬性文本:如currentSale:Sale

  b.關聯線表示法

  c.兩者兼有

  屬性文本表示法的完整格式:visibility name : type multiplicity = default {property-string}

  關聯線表示的屬性:導航性箭頭+多重性(放在目標一端,而不是源的一端)+角色名(只放在目標一段,用以表示屬性名稱)+不需要關聯名稱

  准則:通常對數據類型對象使用屬性文本表示法,對其他對象使用關聯線

3.關聯端點的描述法

  關聯的端點可以附加導航性箭頭,也可包含可選的角色名(關聯端點名)來表示屬性名稱。

  關聯端點還可以附加多重性值

  關聯端點還可以使用{ordered}、{ordered、list}這樣的特殊字符串

4.對象之間的關系

 

   a. 依賴(Dependency)

 

  實體之間一個“使用”關系暗示一個實體的規范發生變化后,可能影響依賴於它的其他實例。更具體地說,它可轉換為對不在實例作用域內的一個類或對象的任何類型的引用。其中包括一個局部變量,對通過方法調用而獲得的一個對象的引用(如下例所示),或者對一個類的靜態方法的引用(同時不存在那個類的一個實例)。也可利用“依賴”來表示包和包之間的關系。由於包中含有類,所以你可根據那些包中的各個類之間的關系,表示出包和包的關系。

 

 

   b. 關聯(Association)——單向關聯、雙向關聯、多維關聯、自身關聯

 

  實體之間的一個結構化關系表明對象是相互連接的。箭頭是可選的,它用於指定導航能力。如果沒有箭頭,暗示是一種雙向的導航能力。在Java中,關聯轉換為一個實例作用域的變量,就像圖E的“Java”區域所展示的代碼那樣。可為一個關聯附加其他修飾符。多重性(Multiplicity)修飾符暗示着實例之間的關系。在示范代碼中,Employee可以有0個或更多的TimeCard對象。但是,每個TimeCard只從屬於單獨一個Employee。
  單向關聯:實線箭頭表示
  雙向關聯:實線無箭頭表示
  多維關聯:關聯中心有一個◇(菱形)、實線無箭頭進行連接表示
  自身關聯:由自身出發,回到本身 

 

 

   c. 聚合(Aggregation)——較強的關聯關系,局部離開整體之后不會失效

 

  聚合是關聯的一種形式,代表兩個類之間的 整體/局部關系聚合暗示着整體在概念上處於比局部更高的一個級別,而關聯暗示兩個類在概念上位於相同的級別。聚合也轉換成Java中的一個實例作用域變量。

 

  關聯和聚合的區別純粹是概念上的,而且嚴格反映在語義上。聚合還暗示着實例圖中不存在回路。換言之,只能是一種單向關系。

 

 

 

   d. 合成(Composition)——更強的關聯關系,局部離開整體之后失效 

 

  合成是聚合的一種特殊形式, 暗示“局部”在“整體”內部的生存期職責。合成也是非共享的。所以,雖然局部不一定要隨整體的銷毀而被銷毀,但整體要么負責保持局部的存活狀態,要么負責將其銷毀。

 

  局部不可與其他整體共享。但是,整體可將所有權轉交給另一個對象,后者隨即將承擔生存期職責。Employee和TimeCard的關系或許更適合表示成“合成”,而不是表示成“關聯”。

 

   e. 泛化(Generalization)——繼承關系

 

  泛化表示一個更泛化的元素和一個更具體的元素之間的關系。泛化是用於對 繼承進行建模的UML元素。在Java中,用extends關鍵字來直接表示這種關系。

 

 

   f. 實現(Realization)——接口的實現

 

  實例關系指定兩個實體之間的一個合同。換言之,一個實體定義一個合同,而另一個實體 保證履行該合同。對Java應用程序進行建模時,實現關系可直接用implements關鍵字來表示。

 

  接口是一種特殊的類,具有類的結構但不可被實例化,只可以被實現(繼承)。UML類圖中接口有兩種表示方法:矩形表示法(如圖-2中的飛翔的接口)和棒棒糖表示法(如圖-2中唐老鴨類中實現講人話的接口)。矩形表示法,頂端有<<接口>>或者<<interface>>,第一行:接口名稱,第二行:接口方法。棒棒糖表示法,圓圈旁為接口名稱,接口方法在實現類中出現,如唐老鴨類中的講話。

                                                                             

 

5.約束

  UML約束是對UML元素的限制條件。約束以花括號之間的文本表示,如{size>10}

  對屬性的約束條件,寫在屬性后面。對操作的約束,以注釋或后置條件的形式寫出。但是都要有{}。

 

繪制要點:

  具體方法:http://www.cnblogs.com/riky/archive/2007/04/07/704298.html

       http://www.uml.org.cn/oobject/201104212.asp

       http://www.cnblogs.com/silent2012/archive/2011/09/07/2169946.html

       http://developer.51cto.com/art/201007/209503.htm

  實現實例:http://blog.csdn.net/flanet/article/details/7746004

  根據實例來看,可以很好的理解掌握類圖中需要可以熟練運用的知識點。

 

注意事項:

  1.畫圖步驟

  首先把順序圖里面的類抄過來。

  然后查看領域模型,把領域模型里面對應這里的類的屬性copy過來,然后把領域模型里面的關聯到這里變成實現。

  補充類的方法。

  控制器類方法的數量只能與前面的系統事件數量一樣,系統事件有多少個就只能寫多少個方法。

  1) 前面的has,own這種關聯不能留下來,如果留下來,扣分,應把概念類圖中的關聯改為有箭頭沒文字(或有在關聯端點有文字)的表示

  2) 多重性要保持

  3) 不要寫什么set方法、get方法,這是編程的問題,不是這里的問題

  2.一定要與交互圖一一對應

  方法和對象都要一一對應!!

  3.Domain中先把除了UI和Controller之外的都放進去

  分別確定每個對象的屬性,依賴,實現

  畫出domain中的各個對象之間的關系(存在的方法)

  4.領域模型==》概念透視圖

   設計模型(DCD)==》軟件透視圖

 

試題答案:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM