我常常陷入深思,我的女朋友為什么又生氣了?是麻辣燙不好吃,還是韓劇不好看。直到有一天,她和我說,我知道你說xxx是為了我好,也很有道理,但你這樣的表達讓我瞬間不想理你。我想大家也有類似的經歷。很多時候,我們明明出於好心,但由於不會表達,反而適得其反。
學會表達是一件很重要的事情。生活中,良好的表達讓親人、伴侶和朋友間的關系更融洽;工作中,團隊內的表達關系着工作效率;展示時的表達影響着項目最終評定,甚至連你畢業時的論文答辯、職級晉升時的考核也考驗着你的表達能力。
軟件開發亦是如此。大中型軟件系統開發工作一般需要大量的軟件開發人員統一協作工作,有時開發周期還很長。作為一名合格的程序員,如何理解前輩們設計好的框架和已完成的工作,並讓別人快速准確的讀懂你寫的代碼,是一件很重要的事情。因此,本文旨在介紹軟件系統的建模和表達方法。
UML(Unified Modeling Language)統一建模語言,又稱標准建模語言,是用於軟件系統在開發階段的可視化建模。由於軟件系統開發需要經過面向對象分析(OOA)、面向對象設計(OOD)和面向對象編程(OOP)三個階段,而每個階段都需要統一的符號設計描述和交流。而UML作為一種通用語言,能有效消除不必要的差異,從而為許多開發人員廣泛使用。
本文將介紹UML基本概念、特點、種類和應用。
一、UML基本概念
UML是在軟件開發階段,說明、可視化、建構和書寫一個面向對象軟件系統的的方法,其目標是以面向對象圖的方式來描述任何類型的系統,具有很寬的應用領域。一方面可以對任何具有靜態結構和動態行為的系統進行建模,另一方面適用於系統不同開發階段,利於系統后期的測試和維護。
二、UML特點
1.UML消除了各種建模語言間不必要的差異而具有很強的通用性;
2.UML同樣適用於並行、分布式系統的建模和表達。
3.UML是一種建模語言和表達方法,而不是一個開發過程。
三、UML分類
UML在系統開發中有三個主要模型,如圖3-1。
1.功能模型:從用戶的角度展示系統的功能,如用例圖
2.對象模型:采用對象、屬性、操作、關聯等概念展示系統的結構和基礎。
2.1類圖:描述系統中類的靜態結構的圖
2.2包圖:對構成系統的模型元素進行分組整理的圖
2.3對象圖:系統中的多個對象在某一時刻的狀態。
2.4構件圖:一種描述系統的靜態實現的圖
2.5部署圖:定義系統中軟硬件的物理體系結構的圖
2.6組合結構圖:表示類或者構建內部結構的圖
3.動態模型:展現系統的內部行為。
3.1順序圖:對象之間的動態合作關系,強調對象發送消息的順序,同時顯示對象之間的交互
3.2活動圖:描述了業務實現用例的工作流程
3.3狀態圖:是描述狀態到狀態控制流
3.4時序圖:表示生命線狀態變化的圖
3.5交互概覽圖:用活動圖來表示多個交互之間的控制關系的圖
3.6協作圖:描述對象之間的協助關系
四、UML應用
根據平時的使用頻率,本文着重介紹UML類圖。面向對象軟件中的基本單元是類,描述類的內部結構和類與類之間的關系,是一種靜態結構圖。UML類圖用三個矩形表示,最上邊部分為類的名稱,中間部分為類的屬性,最下邊部分為類的方法,如圖4-1。
圖4-1
常見類圖有以下幾種關系:泛化(Generalization),實現(Realization),組合(Composition),聚合(Aggregation),關聯(Association),依賴(Dependency)。
關系名稱 | 含義 | 舉例 | 表示方法 |
泛化 | 即繼承,一般與特殊的關系 | 汽車和自行車泛化於交通工具 | 帶三角箭頭的實線,箭頭指向父類。如圖4-2。 |
實現 | 即接口,表示類是接口所有特征和行為的實現 | 汽車的前行通過駕駛 | 帶三角箭頭的虛線,箭頭指向父接口。如圖4-3。 |
組合 | 整體與部分的關系,但部分不能離開整體而單獨存在 | 公司是整體,部門是部分 | 帶實心菱形的實線,菱形指向整體。如圖4-4。 |
聚合 | 整體與部分的關系,且部分可以離開整體而單獨存在 | 汽車是整體,玻璃窗和輪胎是部分 | 帶空心菱形的實線,菱形指向整體。如圖4-5。 |
關聯 | 一種擁有的關系,組合和聚合都屬於關聯關系 | 汽車擁有前進目的地 | 帶普通箭頭的實線,指向被擁有者。如圖4-6。 |
依賴 | 一種使用的關系,一個類的實現需要另一個類的協助 | 汽車的運動依賴汽油 | 帶普通箭頭的虛線,箭頭指向被依賴者。如圖4-7。 |
圖4-2
圖4-3
圖4-4
圖4-5
圖4-6
圖4-7
本文粗淺的介紹了UML的基本概念、分類和簡單應用。為了幫助大家深入學習,本文給大家推薦《UML用戶指南》(第2版),該書詳細介紹了軟件系統的基本結構、高級結構、體系結構、基本行為和高級行為的建模方法,適用於進行軟件開發、部署和維護人員。關注公共號,后台回復UML即可獲取電子版書籍。
申明:本文屬於小編平時學習的心得和總結,不當之處歡迎大家批評指正。