【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)對于一個包,找出哪些包內的元素是可以在包外訪問的,把這些元素標記為公共的,其他所有元素都標記為受保護的或者私有的。
三、對象圖
對象圖包含對象、連接和包
對象圖是系統在某個運行時刻的一個快照
四、小結
類圖:是對一個軟件系統的靜態成分進行呈現
包圖:是對一個軟件系統進行模塊劃分,使得源碼結構更加清晰
對象圖:這個系統在某一時刻的一個快照
UML
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。