閱讀210 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《數據結構與抽象:Java語言描述(原書第4版)》一P.4.3 統一建模語言

本節書摘來華章計算機《數據結構與抽象:Java語言描述(原書第4版)》一書中的第1章 ,[美]弗蘭克M.卡拉諾(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 著 羅得島大學  新英格蘭理工學院 辛運幃 饒一梅 譯 更多章節內容可以訪問雲棲社區“華章計算機”公眾號查看。

P.4.3 統一建模語言

圖P-4中的用例圖是更強大表示法的一部分,這個表示法稱為**統一建模語言**(Unified Modeling Language,UML)。設計人員使用UML來說明軟件係統中必需的類及它們的關係。UML能給出複雜係統的整體視圖,比用自然語言或程序設計語言描述更有效。例如,英語可能有二義性,而Java代碼提供更多的細節。給出明確的類之間的交互圖,是UML的強項之一。
除了用例圖之外,UML還能提供**類**圖,類圖將每個類的描述放在類似於CRC卡的方框中。方框內包含類名、它的**屬性**(attribute)(數據域)和**操作**(operation)(方法)。例如,圖P-7顯示了類CourseSchedule的方框。一般地,方框中省略了構造方法、get方法和set方法等公共操作。
隨著設計的進展,當你描述一個類時你可以提供更多的細節。表示域或方法的可見性時,可以在其名字前加上一個符號,+用於公有的,-用於私有的,而#用於保護的。還可以在域、參數或返回值後加上一個冒號(:),然後寫上它的數據類型。因此,在圖P-7中可以有如下的數據域
image

而方法如下
image

在UML中表示接口非常類似於表示類的方式,隻是要在名字前加上<>。接口Measurable的表示如圖P-8所示。

image

自測題10 附錄C中給出的類Name的類圖是什麼樣的?

在類圖中,線連接了類的方框,表示類之間的關係,包括繼承層次。例如,圖P-9中的類圖表示類Undergrad
Student和GradStudent都繼承自Student類。空心箭頭指向父類。在UML中,父類Student稱為UndergradStudent
和GradStudent的**泛化**(generalization)。如果類實現了一個接口,則從類到接口畫一條有空心箭頭的虛線。

image


關聯(association)是兩個不同類的對象之間的關係。一般地,關聯是稱為協作的CRC卡。例如,類Student、CourseSchedule和Course之間存在的關係。圖P-10表示UML如何用箭頭表示這些關係。例如,類CourseSchedule
和Course之間的箭頭,表示類CourseSchedule的對象和類Course的對象之間的關係。這個箭頭指向Course,表示職責。所以,CourseSchedule對象應該能告訴我們它包含的課程,但Course對象不能告訴我們它屬於哪個課程表。UML稱這種表示為可導航性(navigability)。


image

這種特殊的關聯稱為**單向的**(unidirectional),因為它的箭頭指向一個方向。兩端都有箭頭的線表示的關聯稱為**雙向的**(bidirectional)。例如,Student對象能找到它的課程表,而CourseSchedule對象能找到它所屬的學生。可以假定不帶箭頭的線表示的關聯的可導航性,在設計的當前階段尚未確定。
每個箭頭的末端都是數字。在CourseSchedule和Course之間的箭頭的前端,你看見標注為0..10。這個符號表示每個CourseSchedule對象與0~10門課程關聯。這個箭頭的另一端是星號。它的含義與記號0..∞是一樣的。每個Course對象可以與許多課程表相關聯——或者一個都不關聯。類圖還表示一個Student對象和一個CourseSchedule對象之間的關係。箭頭兩端的這個記號稱為關聯的**基數**(cardinality)或**多樣性**(multiplicity)。
自測題11 將圖P-9和圖P-10合成為一個類圖。然後添加類AllCourses,它表示本學期開設的所有課程。你需要添加的新關聯有哪些?

最後更新:2017-06-26 15:32:22

  上一篇:go  阿裏雲建躍:WAF,一場驚心動魄的搜捕
  下一篇:go  《數據結構與抽象:Java語言描述(原書第4版)》一P.4.2 CRC卡