【UML】類圖、包圖、對象圖

一、類圖

   1.類

類:對真實客觀世界中真實存在的客觀的事物的抽象的描述

例如在學籍管理系統中出現了student這個類

屬性:描述一個類的靜態的信息

操作/方法:描述一個類的動態的信息

在類的表示中:

-”減號表示私有

“+”加號表示公有

“#”井號表示保護

注意:畫類圖的時候可以根據情況酌情的把類的屬性和方法部分的某一部分隱藏起來

   2.類的關係

(1)關聯(普通關聯、聚合、組合)

  • 普通關聯

應用於關聯的修飾

①名稱(Association name):用以描述該關係的性質

②角色(Role):當一個類處於關聯的某一端時,該類就在這個關係中扮演了一個特定的角色;角色是關聯中靠近他的一端的類對另外端的類的呈現的職責。

③多重性(Multiplicity):關聯角色的多重性是說明一個關聯的實例中有多少個相互連接的對象。

關聯的類型:

 -單向關聯(導航關聯)

 -雙向關聯

 -兩個類之間可以有多種關聯

 -一個類可以和多個類關聯

 -自身關聯

  • 組合和聚合

組合和聚合都是整體和部分關係

聚合:整體和部分之間是一種鬆耦合的關係,用空心菱形表示

舉例,書和書架之間就是一種聚合關係,書或者書架都可脫離對方而獨立存在,他們之間沒有一種可以相互制約的生命關係

組合:整體和部分之間是一種緊耦合的關係

比較:

(2)依賴

依賴是一種使用關係。他說明一個事物規格說明的變化可能影響到使用它的另一個事物。但反之未必。

注意:

能用組合和聚合來表達的就不要用普通關聯來表達。因爲組合和聚合比普通關聯信息描述的更佳嚴格,關聯比依賴描述的信息更佳嚴格。

 

如果兩個類之間有結構化關係,我們應該用關聯來表示,因爲關聯的描述相比依賴更佳嚴密,並且包含依賴關係。如果沒有結構化關係,只是一種簡單的使用關係,我們採用依賴來表示。

(3)泛化(繼承)

繼承機制的引入目的就是爲了最大化的進行軟件的複用,減少軟件發佈之後的維護代價。

-單重繼承:有且只有一個父類

-多重繼承:一個類有兩個或兩個以上的父類

例,水陸兩系車他的父類可以是普通汽車和普通船。

注意:

多重繼承可能會產生二義性,在Java語言中一個類是不允許繼承多個類的,如

果要實現的話,必須通過接口來實現而不能通過多重繼承的方式來實現。

(4)實現

實現是類元之間的語義關係,在該關係中一個類元描述了另一個類元保證實現的契約。

   3.類圖的構成

(1)用來描述系統的靜態部分

(2)類圖的構成

  • Classes(類)
  • Interfaces(接口)
  • Collaborations(協作)
  • Dependency(依據),Generalization(泛化) and Association relationships(關聯關係)
  • Packages(包) or Subsystems(子系統)(for grouping)

注意:

在設計一個類的方法的時候,一定要注意一個簡單的原則,當我們分析這個方法放到哪裏的時候,一定要考慮這個方法的執行者是誰,應該把這個方法放到真正執行他的那個類裏面,而不是調用他的那個類裏面

舉例:上課的過程中如果老師和學生都是類,那老師讓學生髮言這個方法應該添加到哪個類的下面,在這個方法中,真正的執行者是學生,因爲老師只是調用學生這個類,真正的執行者是學生,所以應該把這個方法放到學生這個類裏。

   4.類圖深入討論

(1)可見性Visibility

public/private/protected

(2)範圍Scope

每個實例自己擁有自己的屬性和方法

靜態成員:對一個類的所有實例共享一個成員

“_”表示這是一個靜態成員

(3)屬性Attributes

(4)操作Operations

(5)模板類Template Classes

(6)實用類Utility Classes

   5.類圖的應用

分析、設計、實現一個軟件系統時需要以下步驟

(1)分析usecase圖

(2)分析類圖(尋找名詞)

(3)確定每一個類的屬性和方法(行爲是哪個類實施的,這個方法就屬於哪個類)

需要注意的問題:

(1)給定一個軟件系統特徵,可以抽象得到類

(2)抽象得到每個類的屬性和方法

(3)正確的表達類與類之間的關係(注意:不能只用依賴關係,能用組合就不用聚合,能用聚合就不用一般關聯,能用一般關聯就不用依賴,該用接口實現的時候就用接口實現,需要用繼承的時候就用繼承)

(4)需要對這些關係進行修飾,比如關係的多重性、關係的名稱、關係的角色名

二、包圖

   1.包的作用

(1)邏輯上吧一個複雜的圖模塊化

(2)組織源代碼

   2.包的圖符

   3.包中的元素

(1)類、接口、構件、用例、其他包等

(2)若包被撤銷,則其中的元素也被撤銷了。

   4.包與包之間的關係

(1)泛化

(2)細化

(3)依賴(常用)

-如果兩個包中的任意兩個類之間有依賴關係,則這兩個包之間有依賴關係。

   5.包常見的問題

(1)一定要避免循環依賴的產生

(2)測試時可以以包爲測試單位

(3)應該儘量把概念和語義上相近的元素包含在同一個包中。

(4)對於一個包,找出哪些包內的元素是可以在包外訪問的,把這些元素標記爲公共的,其他所有元素都標記爲受保護的或者私有的。

三、對象圖

對象圖包含對象、連接和包

對象圖是系統在某個運行時刻的一個快照

四、小結

類圖:是對一個軟件系統的靜態成分進行呈現

包圖:是對一個軟件系統進行模塊劃分,使得源碼結構更加清晰

對象圖:這個系統在某一時刻的一個快照

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章