距離上一個 「性能優化系列」 已經快一個月沒有發佈文章了,最近公司真的是太忙了,甚是想念掘友們啊。最近把學習架構方面的知識記錄下來,供本身和掘友們一塊兒學習。node
注意: 文章中 UML 圖開始用是 Windows PowerDesigner 工具,後來換電腦了用的 StarUML。android
UML
定義
UML 是統一建模語言, 是一種開放的方法,用於說明、可視化、構建和編寫一個正在開發的、面向對象的、軟件密集系統的製品的開放方法。git
做用
- 幫組開發團隊以一種可視化的方式理解系統的功能需求。
- 有利於開發團隊隊員之間在各個開發環節間確立溝通的標準,便於系統文檔的制定和項目的管理。由於 UML 的簡單、直觀和標準性,在一個團隊中用 UML 來交流比用文字說明的文檔要好的多。
- UML 爲非專業編程人士理解軟件的功能和構造,提供了一種直白、簡單、通俗的方法。
- 使用 UML 能夠方便的理解各類框架的設計方式。
面向對象模型
用例圖 (User Case Diagram)
概述
- 用例圖主要模擬系統中的動態行爲,而且描述了用戶、需求、以及系統功能單元之間的關係。
- 用例圖由參與者 (用戶) ,用例 (功能) 和它們之間的關係組成。
目的
- 用來收集系統的要求。
- 用於獲取系統的外觀圖。
- 識別外部和內部影響因素。
- 顯示要求之間的相互做用是參與者。
構成元素
組成元素 |
說明 |
符號表示 |
參與者 (Actor) |
表示與你本身的程序或者系統進行正在交互的動做。用一個小人表示 |
|
用例 (User Case) |
表示在一個系統或者程序中某個功能的描述。用一個橢圓表明 |
|
關聯關係 (Association) |
表示參與者與用例之間的關係。用一個箭頭表示 |
|
包含關係 (Include) |
表示一個大的功能分解成多個小模塊的動做。用一個帶包含文字的虛線箭頭表示 |
|
擴展關係 (Extend) |
表示用例功能的延伸,至關因而爲用例提供附加功能。用一個帶擴展文字的虛線箭頭表示 |
|
依賴 (dependency) |
表示一個用例依賴於另外一個用例(至關於程序裏面的一個類引用另外一個類的關係)。用一個帶依賴文字的虛線箭頭表示 |
|
泛化 (Generalization) |
至關於程序裏面的繼承關係。用一個箭頭表示 |
|
用例圖例子
需求: 以一個登陸的例子來畫一個用例圖github
- 包含 登陸/註冊/
- 登陸/註冊 支持手機號碼、第三方 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) |
物件是軟件開發過程當中的產物,包括過程模型(好比用例圖、設計圖等等)、源代碼、可執行程序、設計文檔、測試報告、需求原型、用戶手冊等等。 |
|
部署圖例子
經典例子
微信支付時序圖
總結
只要掌握經常使用的幾種圖 (用例圖、類圖、時序圖、活動圖) ,就已經邁向架構第一步了,加油!