移动架构 (一) 详解架构设计中UML图的使用
距離上一個 “性能優化系列” 已經快一個月沒有發布文章了,最近公司真的是太忙了,甚是想念掘友們啊。最近把學習架構方面的知識記錄下來,供自己和掘友們一起學習。
注意: 文章中 UML 圖開始用是 Windows PowerDesigner 工具,后來換電腦了用的 StarUML。
UML
定義
UML 是統一建模語言, 是一種開放的方法,用于說明、可視化、構建和編寫一個正在開發的、面向對象的、軟件密集系統的制品的開放方法。
作用
幫組開發團隊以一種可視化的方式理解系統的功能需求。
有利于開發團隊隊員之間在各個開發環節間確立溝通的標準,便于系統文檔的制定和項目的管理。因為 UML 的簡單、直觀和標準性,在一個團隊中用 UML 來交流比用文字說明的文檔要好的多。
UML 為非專業編程人士理解軟件的功能和構造,提供了一種直白、簡單、通俗的方法。
使用 UML 可以方便的理解各種框架的設計方式。
面向對象模型
用例圖 (User Case Diagram)
概述
用例圖主要模擬系統中的動態行為,并且描述了用戶、需求、以及系統功能單元之間的關系。
用例圖由參與者 (用戶) ,用例 (功能) 和它們之間的關系組成。
目的
用來收集系統的要求。
用于獲取系統的外觀圖。
識別外部和內部影響因素。
顯示要求之間的相互作用是參與者。
構成元素
組成元素 | 說明 | 符號表示 |
參與者 (Actor) | 表示與你自己的程序或者系統進行正在交互的動作。用一個小人表示 | |
用例 (User Case) | 表示在一個系統或者程序中某個功能的描述。用一個橢圓代表 | |
關聯關系 (Association) | 表示參與者與用例之間的關系。用一個箭頭表示 | |
包含關系 (Include) | 表示一個大的功能分解成多個小模塊的動作。用一個帶包含文字的虛線箭頭表示 | |
擴展關系 (Extend) | 表示用例功能的延伸,相當于是為用例提供附加功能。用一個帶擴展文字的虛線箭頭表示 | |
依賴 (dependency) | 表示一個用例依賴于另一個用例(相當于程序里面的一個類引用另一個類的關系)。用一個帶依賴文字的虛線箭頭表示 | |
泛化 (Generalization) | 相當于程序里面的繼承關系。用一個箭頭表示 |
用例圖例子
需求: 以一個登錄的例子來畫一個用例圖
包含 登錄/注冊/
登錄/注冊 支持手機號碼、第三方 QQ/weichat/GitHub 登錄注冊
效果圖:
提供的登錄用例基本上已經包含了剛剛所學的組成元素部分。
結構圖
類圖 (Class Diagram)
概念
類圖 (Class Diagram) 是顯示了模型的靜態結構,特別是模型中存在的類、類的內部結構以及它們與其它類的關系等。
類圖不顯示暫時性的信息,類圖是面向對象建模的主要組成部分。它即用于應用程序的系統分類的一般概念建模,也用于詳細建模,將模型轉換成編程代碼。
構成元素
構成元素 | 說明 | 表示符號 |
泛化 (Generalization) | 是一種繼承關系, 表示一般與特殊的關系, 它指定了子類如何特化父類的所有特征和行為。用一個帶三角箭頭的實線,箭頭指向父類表示 | |
實現 (Realization) | 是一種類與接口的關系, 表示類是接口所有特征和行為的實現。用一個帶三角箭頭的虛線,箭頭指向接口表示. | |
關聯 (Association) | 1. 是一種擁有的關系, 它使一個類知道另一個類的屬性和方法. 2.關聯可以是雙向的,也可以是單向的。雙向的關聯可以有兩個箭頭或者沒有箭頭,單向的關聯有一個箭頭。用一個帶普通箭頭的實心線,指向被擁有者 | |
依賴 (Dependency) | 是一種使用的關系, 即一個類的實現需要另一個類的協助, 所以要盡量不使用雙向的互相依賴.用一個帶箭頭的虛線,指向被使用者 | |
聚合 (Aggregation) | 聚合是一種特殊的關聯 (Association) 形式,表示兩個對象之間的所屬 (has-a) 關系。所有者對象稱為聚合對象,它的類稱為聚合類;從屬對象稱為被聚合對象,它的類稱為被聚合類。例如,一個公司有很多員工就是公司類 Company 和員工類Employee 之間的一種聚合關系。被聚合對象和聚合對象有著各自的生命周期,即如果公司倒閉并不影響員工的存在。用一個帶空心菱形的實心線,菱形指向整體 | |
組合 (Composition) | 是整體與部分的關系, 但部分不能離開整體而單獨存在. 如公司和部門是整體和部分的關系, 沒有公司就不存在部門。用一個帶實心菱形的實線,菱形指向整體表示。 |
類圖例子
需求: 基于 google 官方 MVP 架構 繪制一個基本的 MVP 類圖架構
組合結構圖 (Composite Structure Diagram)
概念
用來顯示組合結構或部分系統的內部構造,包括類、接口、包、組件、端口和連接器等元素。比類圖更抽象的表示,一般來說先畫組合結構圖,再畫類圖。
構成元素
構成元素 | 說明 | 表示符號 |
類 (Class) | 表示對某件事物的描述 | |
接口 (Interface) | 表示用于對 Class 的說明 | |
端口 (port) | 表示部件和外部環境的交互點 | |
部件 (part) | 表示被描述事物所擁有的內部成分 | |
泛化 (Generalication) | 是一種繼承關系, 表示一般與特殊的關系, 它指定了子類如何特化父類的所有特征和行為。用一個帶三角箭頭的實線,箭頭指向父類表示 | |
實現 (Realization) | 是一種類與接口的關系, 表示類是接口所有特征和行為的實現。用一個帶三角箭頭的虛線,箭頭指向接口表示. | |
關聯 (Association) | 1. 是一種擁有的關系, 它使一個類知道另一個類的屬性和方法. 2.關聯可以是雙向的,也可以是單向的。雙向的關聯可以有兩個箭頭或者沒有箭頭,單向的關聯有一個箭頭。用一個帶普通箭頭的實心線,指向被擁有者 | |
依賴 (Dependency) | 是一種使用的關系, 即一個類的實現需要另一個類的協助, 所以要盡量不使用雙向的互相依賴.用一個帶箭頭的虛線,指向被使用者 | |
聚合 (Aggregation) | 聚合是一種特殊的關聯 (Association) 形式,表示兩個對象之間的所屬 (has-a) 關系。所有者對象稱為聚合對象,它的類稱為聚合類;從屬對象稱為被聚合對象,它的類稱為被聚合類。例如,一個公司有很多員工就是公司類 Company 和員工類Employee 之間的一種聚合關系。被聚合對象和聚合對象有著各自的生命周期,即如果公司倒閉并不影響員工的存在。用一個帶空心菱形的實心線,菱形指向整體 | |
組合 (Composition) | 是整體與部分的關系, 但部分不能離開整體而單獨存在. 如公司和部門是整體和部分的關系, 沒有公司就不存在部門。用一個帶實心菱形的實線,菱形指向整體表示。 |
注意事項
側重類的整體特性,就用類圖;側重類的內部結構,就使用組合結構圖。
組合結構圖例子
對象圖 (Object Diagram)
概念
顯示某時刻對象和對象之間的關系
構成元素
構成元素 | 說明 | 表示符號 |
對象 (Object) | 代表某個事物 | |
實例鏈接 (Instance Link) | 鏈是類之間關系的實例 | |
依賴 (Dependency) | 想當于 A 對象使用 B 對象里面的屬性 |
對象圖例子
包圖 (Package Diagram)
概念
包與包的之間的關系
構成元素
構成元素 | 說明 | 表示符號 |
包 (Package) | 當對一個比較復雜的軟件系統進行建模時,會有大量的類、接口、組件、節點和圖需要處理;如果放在同一個地方的話,信息量非常的大,顯得很亂,不方便查詢,所以就對這些信息進行分組,將語義或者功能相同的放在同一個包中,這樣就便于理解和處理整個模型 | |
泛化 (Generalization) | 是一種繼承關系, 表示一般與特殊的關系, 它指定了子類如何特化父類的所有特征和行為。用一個帶三角箭頭的實線,箭頭指向父類表示 | |
依賴 (Dependency) | 是一種使用的關系, 即一個類的實現需要另一個類的協助, 所以要盡量不使用雙向的互相依賴.用一個帶箭頭的虛線,指向被使用者 |
包圖例子
動態圖
時序圖 (Sequence Diagram)
概念
時序圖(Sequence Diagram) , 又名序列圖、循序圖、順序圖,是一種UML交互圖。
它通過描述對象之間發送消息的時間順序顯示多個對象之間的動態協作。
它可以表示用例的行為順序,當執行一個用例行為時,其中的每條消息對應一個類操作或狀態機中引起轉換的觸發事件。
構成元素
構成元素 | 說明 | 表示符號 |
參與者 (Actor) | 表示與你自己的程序或者系統進行正在交互的動作。用一個小人表示 | |
對象 (Object) | 代表某個事物 | |
控制焦點 (Activation) | 控制焦點是順序圖中表示時間段的符號,在這個時間段內對象將執行相應的操作。用小矩形表示 | |
消息 (Message) | 消息一般分為同步消息(Synchronous Message),異步消息(Asynchronous Message)和返回消息(Return Message) |
時序圖例子
需求:這里為了簡單就用一個登陸的時序圖為參考
通訊圖 (Communication Diagram)
概念
順序圖強調先后順序,通信圖則是強調相互之間的關系。順序圖和通信圖基本同構,但是很少使用通信圖,因為順序圖更簡潔,更直觀。
構成元素
構成元素 | 說明 | 表示符號 |
參與者 (Actor) | 表示與你自己的程序或者系統進行正在交互的動作。用一個小人表示 | |
對象 (Object) | 代表某個事物 | |
實例鏈接 (Instance Link) | 鏈是類之間關系的實例 | |
消息 (Message) | 消息一般分為同步消息(Synchronous Message),異步消息(Asynchronous Message)和返回消息(Return Message) |
通訊圖例子
活動圖 (Activity Diagram)
概念
活動圖是 UML 用于對系統的動態行為建模的另一種常用工具,它描述活動的順序,展現從一個活動到另一個活動的控制流。活動圖在本質上是一種流程圖。活動圖著重表現從一個活動到另一個活動的控制流,是內部處理驅動的流程。
構成元素
構成元素 | 說明 | 表示符號 |
活動 (Activity) | 活動狀態用于表達狀態機中的非原子的運行 | |
對象節點 (Object Node) | 某件事物的具體代表 | |
判斷 (Decision) | 對某個事件進行判斷 | |
同步 (synchronization) | 指發送一個請求,需要等待返回,然后才能夠發送下一個請求,有個等待過程; | |
開始 (final) | 表示成實心黑色圓點 | |
結束 (Flow Final) | 分為活動終止節點(activity final nodes)和流程終止節點(flow final nodes)。而流程終止節點表示是子流程的結束。 |
活動圖例子
需求: 點開直播 -> 觀看直播的動作
狀態圖 (Statechart Diagram)
概念
描述了某個對象的狀態和感興趣的事件以及對象響應該事件的行為。轉換 (transition) 用標記有事件的箭頭表示。狀態(state)用圓角矩形表示。通常的做法會包含一個初始狀態,當實例創建時,自動從初始狀態轉換到另外一個狀態。
狀態圖顯示了對象的生命周期:即對象經歷的事件、對象的轉換和對象在這些事件之間的狀態。當然,狀態圖不必要描述所有的事件。
構成元素
構成元素 | 說明 | 表示符號 |
開始 (final) | 表示成實心黑色圓點 | |
結束 (Flow Final) | 分為活動終止節點(activity final nodes)和流程終止節點(flow final nodes)。而流程終止節點表示是子流程的結束。 | |
狀態 (state) | 某一時刻變化的記錄 | |
過渡 (Transition) | 相當于 A 點走向 B 點的過渡 | |
同步 (synchronization) | 共同執行一個指令 |
狀態圖例子
需求: 這里直接借鑒 Activity 官方狀態圖
交錯縱橫圖 (Interaction overview Diagram)
概念
用來表示多張圖之間的關聯
構成元素
構成元素 | 說明 | 表示符號 |
開始 (final) | 表示成實心黑色圓點 | |
結束 (Flow Final) | 分為活動終止節點(activity final nodes)和流程終止節點(flow final nodes)。而流程終止節點表示是子流程的結束。 | |
同步 (synchronization) | 共同執行一個指令 | |
判斷 (Decision) | 對某個事件進行判斷 | |
流 (Flow) | 事件流的走向 | 可以參考,開始跟結束 |
交錯縱橫圖例子
交互圖
組件圖 (Component Diagram)
概念
組件圖(component diagram)是用來反映代碼的物理結構。從組件圖中,您可以了解各軟件組件(如源代碼文件或動態鏈接庫)之間的編譯器和運行時依賴關系。使用組件圖可以將系統劃分為內聚組件并顯示代碼自身的結構
構成元素
構成元素 | 說明 | 表示符號 |
組件 (Component) | 組件用一個左側帶有突出兩個小矩形的矩形來表示 | |
接口 (Interface) | 接口由一組操作組成,它指定了一個契約,這個契約必須由實現和使用這個接口的構件的所遵循 |
組件圖例子
部署圖 (Deployment Diagram)
概念
部署圖可以用于描述規范級別的架構,也可以描述實例級別的架構。這與類圖和對象圖有點類似,做系統集成很方便。
構成元素
構成元素 | 說明 | 表示符號 |
節點 (node) | 結點是存在與運行時的代表計算機資源的物理元素,可以是硬件也可以是運行其上的軟件系統 | |
節點實例 (Node Instance) | 與結點的區別在于名稱有下劃線 | |
物件(Artifact) | 物件是軟件開發過程中的產物,包括過程模型(比如用例圖、設計圖等等)、源代碼、可執行程序、設計文檔、測試報告、需求原型、用戶手冊等等。 |
部署圖例子
經典例子
微信支付時序圖
總結
只要掌握常用的幾種圖 (用例圖、類圖、時序圖、活動圖) ,就已經邁向架構第一步了,加油!
系列文章
移動架構 (一) 詳解架構設計中UML圖的使用
移動架構 (二) Android 中 Handler 架構分析,并實現自己簡易版本 Handler 框架
移動架構 (三) AMS 源碼分析
移動架構 (四) EventBus源碼分析及實現自己的輕量級 EventBus 框架
移動架構 (五) 了解Android數據持久化
移動架構 (六) 輕量級進程間通信框架設計
移動架構 (七) 組件化架構設計思想
移動架構 (八) 動態化加載插件技術模型實現
總結
以上是生活随笔為你收集整理的移动架构 (一) 详解架构设计中UML图的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 观察者模式的问题及其相关内容
- 下一篇: 陈越《数据结构》第六讲 图(上)