# Course Introduction ![CleanShot 2024-09-19 at 19.44.27](https://hackmd.io/_uploads/rywGk9taA.png) ### UML 簡介 ![CleanShot 2024-09-19 at 19.44.32](https://hackmd.io/_uploads/B1-NkqFaC.png) - UML 是統一建模語言,用圖表來視覺化系統或資料庫。 - UML 幫助軟體開發者設計、定義和記錄系統架構。 ### UML 的起源與應用 - UML 是由軟體工程專家為了解決符號混亂問題而開發的。 ![CleanShot 2024-09-19 at 19.49.18](https://hackmd.io/_uploads/BJLAJ5taR.png) - UML 2.0 包含各種圖表,用於軟體系統與業務模型。 ![CleanShot 2024-09-19 at 19.49.40](https://hackmd.io/_uploads/SJZygcF60.png) ### UML 的目標 ![CleanShot 2024-09-19 at 19.49.58](https://hackmd.io/_uploads/H1gWx5Y6C.png) - 提供一套標準化的符號系統,適用於所有面向對象的方法。 - 用於建模大型複雜系統,是面向對象軟體開發的重要工具。 ### UML 的功能 - 幫助團隊溝通、探索設計、驗證軟體架構。 - 使用圖形化符號來表達軟體專案設計。 ### UML 的應用範圍 ![CleanShot 2024-09-19 at 19.51.09](https://hackmd.io/_uploads/Sy2VlqK6A.png) - 適用於分散式系統分析、系統設計與部署。 - 支援各種系統與活動建模。 ### UML 圖表分類 ![CleanShot 2024-09-19 at 19.44.32](https://hackmd.io/_uploads/B1-NkqFaC.png) #### - **結構圖**: - 複合結構圖 - 部署圖 - 套件圖 - 配置文件圖 - 類圖 - 物件圖 - 元件圖 #### - **行為圖**: - 活動圖 - 用例圖 - 狀態圖 - 序列圖 - 通訊圖 - 互動概覽圖 - 計時圖 # Overview of the main Diagrams in UML 2.0 ### 類別圖(Class Diagram) ![CleanShot 2024-09-19 at 19.58.56](https://hackmd.io/_uploads/BkeMG5KTR.png) - 是物件導向方法中最重要的建模技術之一。 - 描述系統中的物件類型以及它們之間的靜態關係。 - 主要的三種關係: - **關聯(Association)**:表示類型實例間的關係,如「人為公司工作」或「公司有多個辦公室」。 - **繼承(Inheritance)**:直接對應到物件導向設計中的繼承。 - **聚合(Aggregation)**:物件組合的一種形式。 ### 元件圖(Component Diagram) ![CleanShot 2024-09-19 at 19.59.19](https://hackmd.io/_uploads/H1N7fqF6R.png) - 說明如何組合元件以形成更大的元件或軟體系統。 - 表示軟體元件與其相依性的架構,包含運行時、可執行元件與源代碼元件。 ### 部署圖(Deployment Diagram) ![CleanShot 2024-09-19 at 19.59.35](https://hackmd.io/_uploads/B1UNMcK6A.png) - 模擬物件導向軟體系統的物理面。 - 顯示系統架構與軟體工件的部署或分佈。 - 模擬運行時配置,包含硬體配置與軟體元件的分佈。 ### 物件圖(Object Diagram) ![CleanShot 2024-09-19 at 19.59.49](https://hackmd.io/_uploads/Sklrf9tTA.png) - 是類別圖的實例,展示系統在特定時間點的狀態快照。 - 類別圖是抽象的模型,而物件圖表示具體實例,通常用來展示資料結構的例子。 ### 套件圖(Package Diagram) ![CleanShot 2024-09-19 at 19.59.55](https://hackmd.io/_uploads/BktrzqYaA.png) - 是結構圖,展示套件與其之間的相依性。 - 可用來模擬分層應用程式的不同視圖。 ### 複合結構圖(Composite Structure Diagram) ![CleanShot 2024-09-19 at 20.00.26](https://hackmd.io/_uploads/SkYDzcY6R.png) - 與類別圖相似,主要用於微觀層次的系統建模。 - 展示類別內部結構和其內部部件的互動。 ### 配置文件圖(Profile Diagram) ![CleanShot 2024-09-19 at 20.00.33](https://hackmd.io/_uploads/S1ZdG9Fp0.png) - 用於創建特定領域與平台的自定義標籤,並定義它們之間的關係。 ### 用例圖(Use Case Diagram) ![CleanShot 2024-09-19 at 20.00.41](https://hackmd.io/_uploads/rkr_McYT0.png) - 描述系統的功能需求,展示系統的功能及其與外部環境的互動。 ### 活動圖(Activity Diagram) ![CleanShot 2024-09-19 at 20.00.59](https://hackmd.io/_uploads/S1FFG5K6C.png) - 描述工作流程與控制流程,適用於複雜的業務規則與操作建模。 ### 狀態機圖(State Machine Diagram) ![CleanShot 2024-09-19 at 20.01.11](https://hackmd.io/_uploads/HJE5fcF6R.png) - 基於狀態轉換描述系統行為,幫助理解狀態導向系統的生命週期。 ### 序列圖(Sequence Diagram) ![CleanShot 2024-09-19 at 20.02.02](https://hackmd.io/_uploads/rJq6GctTR.png) - 模擬物件之間基於時間順序的互動,展示在特定用例中的物件交互。 ### 通訊圖(Communication Diagram) ![CleanShot 2024-09-19 at 20.02.15](https://hackmd.io/_uploads/rJmCG9tTC.png) - 類似於序列圖,但強調物件之間的協作,而非時間順序。 ### 互動概覽圖(Interaction Overview Diagram) ![CleanShot 2024-09-19 at 20.02.20](https://hackmd.io/_uploads/BJc0MqY60.png) ![CleanShot 2024-09-19 at 20.02.27](https://hackmd.io/_uploads/HJTRG5KpC.png) - 重點展示互動控制流程,是活動圖的變體,主要描述隱藏的訊息與生命線。 ### 計時圖(Timing Diagram) ![CleanShot 2024-09-19 at 20.02.32](https://hackmd.io/_uploads/HJBkQqtTC.png) ![CleanShot 2024-09-19 at 20.02.39](https://hackmd.io/_uploads/BJqy79tpA.png) - 描述物件在特定時間段的行為,與序列圖類似,但時間軸與生命線的排列不同。 ### UML 圖表多樣性的原因 - 提供不同角度來檢視系統,滿足不同參與者的需求,如分析師、架構師、程式設計師、測試人員等。 # Class Diagram ![CleanShot 2024-09-19 at 20.05.29](https://hackmd.io/_uploads/S14gE9ta0.png) ### 類別圖簡介 - 類別圖展示系統的結構,描述類別、屬性、方法及它們之間的關係。 - **類別**是創建物件的模板,定義了物件的初始狀態(屬性)和行為(方法)。 ### 類別圖的基本組成 ![CleanShot 2024-09-19 at 20.16.17](https://hackmd.io/_uploads/HJB7IqK6C.png) - **類別名稱**:位於類別框的最上方,名稱為必要元素。 - **屬性**:在類別名稱下方,屬性名稱後加上其類型。 - **方法**:在最下方,方法名稱後加上返回值的類型。 ### 存取修飾符 ![CleanShot 2024-09-19 at 20.16.33](https://hackmd.io/_uploads/By0m85tTA.png) - **+** 公開(public) - **-** 私有(private) - **#** 受保護(protected) - **~** 包本地(package local) ### 方法參數的方向 ![CleanShot 2024-09-19 at 20.16.48](https://hackmd.io/_uploads/H1kHLctpA.png) - **in**:方法使用但不改變參數。 - **out**:方法輸出參數。 - **inout**:參數被方法使用且可能被改變。 ### 類別圖的三種視角 ![CleanShot 2024-09-19 at 20.17.11](https://hackmd.io/_uploads/SJMo8cK6A.png) #### **概念視角** ![CleanShot 2024-09-19 at 20.19.27](https://hackmd.io/_uploads/HyoCL5tTC.png) ![CleanShot 2024-09-19 at 20.19.33](https://hackmd.io/_uploads/HyeJP5KaA.png) 描述實體與現實世界的概念,語言無關。 #### **規範視角** ![CleanShot 2024-09-19 at 20.19.38](https://hackmd.io/_uploads/ByOkP5YpR.png) ![CleanShot 2024-09-19 at 20.19.45](https://hackmd.io/_uploads/rk6yDqtTC.png) 描述軟體抽象,包含接口但不涉及具體實現。 #### **實現視角** ![CleanShot 2024-09-19 at 20.19.49](https://hackmd.io/_uploads/SkOBwcYpC.png) ![CleanShot 2024-09-19 at 20.19.55](https://hackmd.io/_uploads/rk0eP9t60.png) 描述特定技術或程式語言的軟體實現。 ### 類別之間的關係 ![CleanShot 2024-09-19 at 20.21.50](https://hackmd.io/_uploads/SJHOPcY60.png) - **關聯(Association)**:類別之間的關聯性,用連線表示,可標註動詞和多重性(如一個學生對應多個導師)。 ![CleanShot 2024-09-19 at 20.52.37](https://hackmd.io/_uploads/ryMi05YaA.png) - **繼承(Inheritance)/泛化(Generalization)**:父類與子類的關係,空心箭頭指向父類。 ![CleanShot 2024-09-19 at 20.52.44](https://hackmd.io/_uploads/B1qoC5FT0.png) ![CleanShot 2024-09-19 at 20.52.59](https://hackmd.io/_uploads/HkOn05YpA.png) - **實現(Realization)**:接口與實現該接口的類之間的關係,虛線箭頭指向接口。 ![CleanShot 2024-09-19 at 20.53.12](https://hackmd.io/_uploads/Bk8T09YaA.png) - **依賴(Dependency)**:一個類的方法中使用了另一個類的物件,虛線箭頭表示依賴關係。 ![CleanShot 2024-09-19 at 20.53.32](https://hackmd.io/_uploads/r1RCCcY60.png) - **聚合(Aggregation)**:部分與整體的關係,刪除整體時,部分依然存在,表示為空心菱形連接。 ![CleanShot 2024-09-19 at 20.53.50](https://hackmd.io/_uploads/SJTJkjtaC.png) - **組合(Composition)**:聚合的特例,刪除整體時,部分也會被刪除,表示為實心菱形連接。 ![CleanShot 2024-09-19 at 20.54.02](https://hackmd.io/_uploads/BkOg1oY6R.png) ### UML 的實用性 ![CleanShot 2024-09-19 at 20.54.20](https://hackmd.io/_uploads/r1cWkjFp0.png) - UML 是一個強大的工具,幫助開發者在編寫程式前清晰地規劃系統設計。 - 投資時間畫出清晰的 UML 圖,能幫助避免設計缺陷並減少錯誤。 # Component Diagram ![CleanShot 2024-09-19 at 20.54.27](https://hackmd.io/_uploads/HkiEJjYaC.png) ### 元件圖簡介 - 元件圖用於建模物件導向系統的物理層面,幫助可視化、定義及記錄基於元件的系統。 - 元件圖著重於系統的靜態實作視圖,將系統分解為高層次的功能,每個元件只處理其所需的責任。 ### 元件圖的工作方式 ![CleanShot 2024-09-19 at 21.01.48](https://hackmd.io/_uploads/S1N0gsKTR.png) - 資料通過**右側的埠(port)**進入元件,轉換為內部元件可用的格式。 - **右側的接口**稱為「**需求接口(required interface)**」,表示元件需要的服務。 - 資料經過各元件處理後,從**左側的提供接口(provided interface)**輸出,其他元件可與之互動以獲取結果。 - **內部元件**位於大型框內,框可以代表整個系統或系統中的子系統。 ### 元件與接口 ![CleanShot 2024-09-19 at 21.02.17](https://hackmd.io/_uploads/r14kZsF6C.png) ![CleanShot 2024-09-19 at 21.02.41](https://hackmd.io/_uploads/SJpxZsFaR.png) - **元件**是系統的一個模組化部分,封裝其內容,繪製為帶有可選垂直區域的矩形。 - **提供接口**:完整圓形,表示元件提供的服務(即「棒棒糖」符號)。 - **需求接口**:半圓形,表示元件所需的服務。 - **子系統分類器**與元件相似,但會標註為「subsystem」。 ![CleanShot 2024-09-19 at 21.02.47](https://hackmd.io/_uploads/Hy8bZsFpC.png) ![CleanShot 2024-09-19 at 21.03.03](https://hackmd.io/_uploads/B1mfZjKp0.png) ### 元件圖中的關係 - **關聯(Association)**:系統中兩個或多個元件之間的語意關係,用直線連接。 ![CleanShot 2024-09-19 at 21.03.13](https://hackmd.io/_uploads/BkCzZjFTC.png) - **組合(Composition)**:強關聯關係,一個元件是另一個元件的一部分,刪除組合時,其部分也會被刪除,表示為實心菱形。 ![CleanShot 2024-09-19 at 21.03.18](https://hackmd.io/_uploads/Sy7XWjKaA.png) - **聚合(Aggregation)**:類似組合,但部分可以獨立存在,表示為空心菱形。 ![CleanShot 2024-09-19 at 21.03.24](https://hackmd.io/_uploads/H1iXWsYpA.png) - **限制(Constraint)**:描述元件的條件或限制。 ![CleanShot 2024-09-19 at 21.03.31](https://hackmd.io/_uploads/By1E-oKaC.png) - **依賴(Dependency)**:一個元件需要其他元件來完成規範或實作,表示為虛線箭頭。 ![CleanShot 2024-09-19 at 21.03.36](https://hackmd.io/_uploads/HJSNbjK6R.png) - **繼承(Inheritance)**:一個元件繼承另一個元件的特性,箭頭指向通用元件。 - ![CleanShot 2024-09-19 at 21.03.41](https://hackmd.io/_uploads/BkRNWsY6C.png) ### 元件圖的應用場景 - **源碼模型**:透過前向或反向工程將源碼檔建模為元件,並使用標籤標註版本、作者或最後修改時間。 ![CleanShot 2024-09-19 at 21.03.53](https://hackmd.io/_uploads/SkSBZjYpA.png) ![CleanShot 2024-09-19 at 21.04.00](https://hackmd.io/_uploads/r13HboK6C.png) - **可執行檔案模型**:定義要建模的元件集,展示各元件之間的依賴關係。 ![CleanShot 2024-09-19 at 21.04.09](https://hackmd.io/_uploads/HkwUZoYaC.png) - **資料庫模型**:定義邏輯資料庫模式的類別,並選擇對應策略來將類別映射到資料表。 ![CleanShot 2024-09-19 at 21.04.53](https://hackmd.io/_uploads/HJzYbiYpA.png) # Deployment Diagram ![CleanShot 2024-09-19 at 21.05.08](https://hackmd.io/_uploads/rkmqWjFp0.png) ### UML 部署圖概述 ![CleanShot 2024-09-19 at 21.13.04](https://hackmd.io/_uploads/HkavmsY6A.png) - 部署圖用於建模物件導向系統的物理面向。 - 顯示運行時系統的結構,包含物理硬體元素及其之間的通信方式。 - 用於規劃系統架構,記錄軟體組件或節點的部署。 ### 部署圖的用途 - 模擬嵌入式、客戶端-伺服器和分散式系統的靜態表示。 ![CleanShot 2024-09-19 at 21.13.10](https://hackmd.io/_uploads/HyHdmoYTR.png) - 可用於正向或逆向工程管理運行時系統。 ![CleanShot 2024-09-19 at 21.13.17](https://hackmd.io/_uploads/S18pXjF6R.png) ### 部署圖的基本元素 - 3D 盒子代表節點(軟體或硬體)。 ![CleanShot 2024-09-19 at 21.15.03](https://hackmd.io/_uploads/r1IkVoY6R.png) - 節點之間的連線使用直線表示,可能帶有標註。 ![CleanShot 2024-09-19 at 21.15.19](https://hackmd.io/_uploads/H1ug4sK60.png) - 節點可以嵌套在其他節點內。 ![CleanShot 2024-09-19 at 21.15.39](https://hackmd.io/_uploads/B1KWNjFTC.png) - 可以顯示依賴關係、關聯及限制。 ### 嵌入式系統建模步驟 - 識別系統中唯一的設備和節點。 ![CleanShot 2024-09-19 at 21.16.00](https://hackmd.io/_uploads/SyJQ4sFpA.png) - 使用 UML 擴展機制標註特殊設備及系統標籤。 ![CleanShot 2024-09-19 at 21.16.07](https://hackmd.io/_uploads/BJEQEjtpR.png) - 區分包含軟體元件的處理器與不直接包含軟體的設備。 ![CleanShot 2024-09-19 at 21.16.12](https://hackmd.io/_uploads/B1t7ViFaC.png) - 模型處理器和設備之間的關係。 ![CleanShot 2024-09-19 at 21.16.17](https://hackmd.io/_uploads/rkyE4itTC.png) - 指定實作視圖中元件和部署視圖中節點的關係。 - 如果需要,擴展智能設備的能力,提供更詳細的部署方案。 ### 客戶端-伺服器系統建模步驟 - 識別代表客戶端和伺服器處理器的節點。 ![CleanShot 2024-09-19 at 21.16.32](https://hackmd.io/_uploads/Sk1S4oKpR.png) - 強調與系統行為相關的設備(如信用卡讀卡器、顯示器等)。 ![CleanShot 2024-09-19 at 21.16.39](https://hackmd.io/_uploads/HkQHNjFaC.png) - 使用標註提供這些處理器和設備的視覺提示。 ![CleanShot 2024-09-19 at 21.16.44](https://hackmd.io/_uploads/BJtBEstaC.png) - 模型這些節點的拓撲。 ![CleanShot 2024-09-19 at 21.16.49](https://hackmd.io/_uploads/SJ1LVsFTA.png) - 指定實作視圖中元件與部署視圖中節點的關係。 ### 分散式系統建模步驟 - 識別系統的設備和處理器。 ![CleanShot 2024-09-19 at 21.17.01](https://hackmd.io/_uploads/Skn84jYaC.png) - 模擬通信設備,並確保提供足夠細節以進行網絡性能估算。 ![CleanShot 2024-09-19 at 21.17.08](https://hackmd.io/_uploads/BkGP4iFaR.png) - 使用包來指定邏輯群組的節點。 ![CleanShot 2024-09-19 at 21.17.14](https://hackmd.io/_uploads/BkLvEoKpC.png) - 可使用工具探索系統網絡的拓撲。 ![CleanShot 2024-09-19 at 21.17.19](https://hackmd.io/_uploads/rJiDEjtaA.png) - 在某些情況下,可以將網絡本身(如網際網路或局域網)表示為節點。 ![CleanShot 2024-09-19 at 21.17.23](https://hackmd.io/_uploads/SyAvEjYaA.png) ### 部署計劃的重要考量 ![CleanShot 2024-09-19 at 21.17.39](https://hackmd.io/_uploads/HkxFNstTC.png) ![CleanShot 2024-09-19 at 21.18.02](https://hackmd.io/_uploads/BkScEst6C.png) ![CleanShot 2024-09-19 at 21.18.06](https://hackmd.io/_uploads/H1qcNoFpR.png) ![CleanShot 2024-09-19 at 21.18.19](https://hackmd.io/_uploads/ryPsNsYpC.png) - 系統如何安裝?誰來安裝?安裝時間需要多久? - 哪些步驟可能會失敗?是否需要資料備份和轉換? - 如何確定安裝成功? - 多個系統版本如何同時運行,如何解決衝突? - 需要部署哪些物理站點,順序如何? - 如何培訓支援和運行人員?是否需要部署生產支援系統? - 如何訓練使用者?需要什麼文件?以何種格式和語言提供? - 系統需與哪些現有系統整合或交互? - 系統的可靠性需求為何?是否需要額外設備以應對故障? - 誰會與系統交互?如何進行交互? - 系統會使用哪些軟體(操作系統和通信協定)? - 使用者會與哪些硬體和軟體直接交互? - 如何在部署後控制系統?系統需要多安全? # Object Diagram ![CleanShot 2024-09-19 at 21.20.18](https://hackmd.io/_uploads/HJsUSst6A.png) ### UML 物件圖概述 ![CleanShot 2024-09-19 at 21.51.40](https://hackmd.io/_uploads/BJ5OnotTC.png) - 物件圖是類別圖的實例,捕捉系統物件及其關係在特定時間點的詳細狀態。 - 主要用於展示資料結構的實例,常見於專案分析階段。 - 物件圖可視為類別圖或通訊圖的特例,主要用來驗證類別圖的準確性與完整性。 ### 物件圖的用途 ![CleanShot 2024-09-19 at 21.52.18](https://hackmd.io/_uploads/HkJi2sF6A.png) ![CleanShot 2024-09-19 at 21.52.36](https://hackmd.io/_uploads/SkQ-astaC.png) ![CleanShot 2024-09-19 at 21.54.56](https://hackmd.io/_uploads/rJ3NToKTC.png) ![CleanShot 2024-09-19 at 21.55.01](https://hackmd.io/_uploads/rJgBpit6A.png) - 顯示系統中的物件及其關係在某一特定時間點的狀態。 - 適合展示大型系統中的小部分,或用於建模遞迴關係及分析系統在特定時間點的行為。 ### 物件圖的基本元素 - 每個物件以矩形表示,物件名稱與類別名稱分別在左側與右側,且下劃線。 ![CleanShot 2024-09-19 at 21.55.05](https://hackmd.io/_uploads/BJUHTiY6C.png) - 物件的屬性列在名稱下方,並顯示其對應的值。 ![CleanShot 2024-09-19 at 21.55.10](https://hackmd.io/_uploads/BkjrpjFaC.png) - 物件之間的連結表示類別之間的關聯。 ![CleanShot 2024-09-19 at 21.55.20](https://hackmd.io/_uploads/SJV8ajKpR.png) ![CleanShot 2024-09-19 at 21.56.41](https://hackmd.io/_uploads/BkBs6jtTC.png) ![CleanShot 2024-09-19 at 21.56.45](https://hackmd.io/_uploads/H1uo6jKpA.png) ### 建模物件結構的步驟 ![CleanShot 2024-09-19 at 21.57.13](https://hackmd.io/_uploads/B18TasK6C.png) ![CleanShot 2024-09-19 at 21.57.23](https://hackmd.io/_uploads/rke0TiFpA.png) 1. **定義機制**:決定要建模的系統機制,這代表系統的某些功能或行為。 2. **識別元素**:確定參與此機制的類別、介面及其他元素,並確定它們之間的關係。 3. **模擬場景**:針對某個特定場景,顯示參與該機制的物件狀態及屬性值。 4. **展開狀態與屬性**:分析每個物件的狀態與屬性值,類似於凍結時間來檢查系統的運作。 ### 物件圖的應用範例 - **機器人行為模型**:物件圖可以表示機器人及其與世界模型之間的互動。機器人的狀態為「移動中」,並與一些實體物件相連。 ![CleanShot 2024-09-19 at 21.58.04](https://hackmd.io/_uploads/SJFgCoFTC.png) ![CleanShot 2024-09-19 at 21.58.23](https://hackmd.io/_uploads/Sy3-AitTC.png) - **公司結構表示**:可以用物件圖表示公司的部分結構,物件之間的關係即為實例之間的連結。 ![CleanShot 2024-09-19 at 21.58.49](https://hackmd.io/_uploads/r15mAsYaC.png) - **通訊圖的實例**:物件圖也可用來表示運行時類別之間的互動實例。 ![CleanShot 2024-09-19 at 21.59.03](https://hackmd.io/_uploads/r1IERsK6C.png) # Package Diagram ![CleanShot 2024-09-19 at 22.18.59](https://hackmd.io/_uploads/B1Gzm2Y6A.png) ### UML 套件圖概述 - 套件圖展示中大型專案中模型元素的位置和組織結構。 ![CleanShot 2024-09-19 at 22.23.43](https://hackmd.io/_uploads/rkpgE3t6R.png) - 用於顯示系統的結構及子系統或模組之間的依賴關係,常應用於分層式系統。 ![CleanShot 2024-09-19 at 22.23.54](https://hackmd.io/_uploads/rJHbVhY6R.png) ### 套件的基本概念 - **套件**是模型元素的群組,可以嵌套於其他套件中,類似於文件夾的概念。 ![CleanShot 2024-09-19 at 22.24.13](https://hackmd.io/_uploads/SkqfNntTR.png) - 套件擁有自己的命名空間,命名必須唯一,模型元素只能屬於一個套件。 ![CleanShot 2024-09-19 at 22.24.18](https://hackmd.io/_uploads/HypzV3FaA.png) - 套件圖通常用來: - 群組相關的 UML 元素。 - 視覺化系統各部分之間的依賴關係。 - 支援系統的分析及確定編譯順序。 ![CleanShot 2024-09-19 at 22.24.27](https://hackmd.io/_uploads/HyumN2Y60.png) ### 套件圖的表示方法 - 套件顯示為矩形,頂部有一個小標籤,名稱寫在標籤上或矩形內。 ![CleanShot 2024-09-19 at 22.26.00](https://hackmd.io/_uploads/SyvF43YaA.png) - 依賴關係用虛線箭頭表示,如果一個套件的變更會影響另一個套件,那麼兩者存在依賴關係。 ![CleanShot 2024-09-19 at 22.26.07](https://hackmd.io/_uploads/rknKV2Y60.png) - 子系統(Subsystem)是更大系統的一部分,作為一種帶有「子系統」標註的套件。 ![CleanShot 2024-09-19 at 22.26.11](https://hackmd.io/_uploads/Sky9EhtaR.png) ![CleanShot 2024-09-19 at 22.26.19](https://hackmd.io/_uploads/rkuq42FpA.png) ### 標註(Stereotype)的意義 - **標註**是對對象的高層次分類,描述其屬性或行為。 ![CleanShot 2024-09-19 at 22.27.05](https://hackmd.io/_uploads/H1I6N3KTA.png) - 可以使用標註來擴展 UML,以滿足具體的建模需求。 - 標註以尖括號形式寫在類別名稱的上方。 ![CleanShot 2024-09-19 at 22.27.15](https://hackmd.io/_uploads/H1gCVhYpA.png) ### 套件內元素的可見性 ![CleanShot 2024-09-19 at 22.28.01](https://hackmd.io/_uploads/rJk-B2F6C.png) - **Public**(公開):用「+」表示,元素對所有可以訪問該命名空間的元素可見。 - **Protected**(受保護):用「#」表示,僅對與命名空間存在泛化關係的元素可見。 - **Package**(包可見):用「~」表示,對同一套件內的所有元素可見。 - **Private**(私有):用「-」表示,僅對擁有此命名空間的元素可見。 ### 依賴關係的類型 - **使用(Use)**:客戶端套件使用供應商套件的公共元素,如果未標註依賴關係,應視為使用依賴。 ![CleanShot 2024-09-19 at 22.28.08](https://hackmd.io/_uploads/H1UWBnY60.png) ![CleanShot 2024-09-19 at 22.28.15](https://hackmd.io/_uploads/BJxqZH3Y6A.png) ![CleanShot 2024-09-19 at 22.28.28](https://hackmd.io/_uploads/BktfShKaA.png) - **追蹤(Trace)**:代表一個元素發展為另一個版本的歷史關係,通常用於模型之間的關係。 ![CleanShot 2024-09-19 at 22.28.32](https://hackmd.io/_uploads/SJnzH3tp0.png) - **合併(Merge)**:將供應商套件的公共元素與客戶端套件合併。 ![CleanShot 2024-09-19 at 22.28.36](https://hackmd.io/_uploads/By1XS2YTC.png) ### 線上商店訂單追蹤範例 ![CleanShot 2024-09-19 at 22.28.45](https://hackmd.io/_uploads/rkA7HhKTA.png) ![CleanShot 2024-09-19 at 22.28.55](https://hackmd.io/_uploads/rJGVBnt60.png) ![CleanShot 2024-09-19 at 22.29.19](https://hackmd.io/_uploads/rJsrSnta0.png) - **追蹤訂單模組**:負責提供客戶訂單的追蹤資訊,與訂單詳細資訊模組和運輸模組通訊。 - **訂單詳細資訊模組**:提供訂單細節,並與客戶提供的資料交互。 - **運輸模組**:提供訂單的運輸細節。 - **UI 框架依賴**:追蹤訂單模組依賴於 UI 框架,用於展示訂單追蹤狀態。 # Composite Structure Diagram ![CleanShot 2024-09-20 at 10.12.16](https://hackmd.io/_uploads/rkBB98qpR.png) ### 綜合結構圖概述 ![CleanShot 2024-09-20 at 10.18.22](https://hackmd.io/_uploads/rJ2us8cTC.png) - 包含類別、介面、套件及其關係,並提供系統或其部分的邏輯表示。 - **UML 2.0** 引入的新圖表,展示結構化分類器或協作的內部結構,包括零件和連接器。 ### 綜合結構圖與類別圖的差異 - 類別圖展示系統中的類別和關係,但綜合結構圖則深入顯示類別的內部結構。 - 綜合結構圖可以展示類別內部的零件,並圖解這些零件之間的關係和交互。 ### 綜合結構圖的基本元素 ![CleanShot 2024-09-20 at 10.18.48](https://hackmd.io/_uploads/BJHciIqTA.png) - **零件(Parts)**:由類別組成的內部元素,可以是類別或其他結構元素。名稱格式:零件名稱 : 零件類型 [多重性]。 - **連接器(Connectors)**:圖解類別內部及類別間的零件或實例的連接關係,指示它們的溝通方式。 - **協作(Collaboration)**:描述協作的零件結構及其角色,簡化系統結構並清楚定義元素行為。 - **端口(Ports)**:類別實例與環境或內部零件之間的互動點,支援提供和需求介面的表示法。 ### 使用範例 - 線上商店系統包含顧客對象,其中有普通顧客和忠誠計劃會員。 ![CleanShot 2024-09-20 at 12.07.59](https://hackmd.io/_uploads/rkGEH_56A.png) - 商品(Item)可以被訂單(Order)聚合,而訂單由顧客(Customer)組成。 ![CleanShot 2024-09-20 at 12.08.13](https://hackmd.io/_uploads/HyaEr_960.png) - 商店經理(Store Manager)組成了顧客和商品,這些對象彼此嵌套於系統中。 ### 組合結構圖 - 組合結構圖可以清晰顯示商店經理的組成部分,聚焦於其內部結構。 ![CleanShot 2024-09-20 at 12.09.37](https://hackmd.io/_uploads/SJRtrO9p0.png) - 商店經理直接包含兩類對象:顧客和商品。 ![CleanShot 2024-09-20 at 12.08.23](https://hackmd.io/_uploads/HyzrS_cTR.png) - 雖然訂單(Order)不直接屬於商店經理,但我們可以通過連結來顯示它與內部物件(如商品)的關係。 ![CleanShot 2024-09-20 at 12.09.54](https://hackmd.io/_uploads/BJCqSdqTR.png) ![CleanShot 2024-09-20 at 12.09.58](https://hackmd.io/_uploads/B1MoHucTC.png) ### 類別圖與組合結構圖的比較 - 類別圖和組合結構圖不完全相同。 ![CleanShot 2024-09-20 at 12.10.05](https://hackmd.io/_uploads/BJ2sSu5TA.png) - 類別圖中描述與定價的關係模糊,類別圖顯示描述會引用定價對象,但未明確兩者的關聯是否在商品內部。 ![CleanShot 2024-09-20 at 12.10.45](https://hackmd.io/_uploads/H1fCru5aC.png) - 組合結構圖能清楚展示描述與定價對象的關係,明確了活動的實現方式。 ![CleanShot 2024-09-20 at 12.11.48](https://hackmd.io/_uploads/B1efIuqTR.png) ### 外部對象的引用 - 組合結構圖適合描述聚合,但若模型中需要包含外部對象的引用,則需用虛線矩形來標示。 ![CleanShot 2024-09-20 at 12.11.52](https://hackmd.io/_uploads/SyLMI_5pC.png) - 儘管引用外部對象,但連結仍位於模型內,這是展示實現細節的重要步驟。 ![CleanShot 2024-09-20 at 12.11.59](https://hackmd.io/_uploads/SkoG8_c6A.png) ### 核心對象的定義 - **結構化分類器(Structured Classifiers)**:具有內部結構的類別,用來定義物件間的關聯和行為。 ![CleanShot 2024-09-20 at 12.01.25](https://hackmd.io/_uploads/HkEjQOcpC.png) - **零件(Parts)**:代表結構化分類器擁有的物件實例,描述其在分類器中的角色。 ![CleanShot 2024-09-20 at 12.01.46](https://hackmd.io/_uploads/Hku2X_caC.png) - **端口(Ports)**:類別實例與外部環境或內部零件的互動點,可顯示或隱藏需求和提供介面。 ![CleanShot 2024-09-20 at 12.02.02](https://hackmd.io/_uploads/Hy_amOqTA.png) ![CleanShot 2024-09-20 at 12.02.08](https://hackmd.io/_uploads/S12TXu9aC.png) - **連接器(Connectors)**:定義零件或端口之間的連結和溝通方式。 ![CleanShot 2024-09-20 at 12.02.16](https://hackmd.io/_uploads/H17A7ucaC.png) ### 簡化範例 ![CleanShot 2024-09-20 at 12.02.25](https://hackmd.io/_uploads/ByxXEOcaC.png) - **電腦系統的綜合結構圖**:包含電源供應單位、硬碟、DVD、主板、CPU 和記憶模組等零件,展示各部分之間的連接。 - ![CleanShot 2024-09-20 at 12.02.49](https://hackmd.io/_uploads/Sk8lVOqaA.png) # Profile Diagram ### Profile Diagram 簡介 ![CleanShot 2024-09-24 at 15.33.08](https://hackmd.io/_uploads/H1vHsyx0R.png) - UML 結構圖之一,提供通用擴充機制以客製化 UML 模型 - Profiles 使用 Stereotypes、Tag Value Definitions 和 Constraints 應用於模型元素,如類別、屬性、操作及行為 - Profile 是一組擴展,針對特定領域(如航太、醫療或金融)或特定平台(如 J2EE、.NET)配置 UML ![CleanShot 2024-09-24 at 15.43.31](https://hackmd.io/_uploads/B1fnT1eA0.png) ### Profile Diagram 的三大擴充機制 ![CleanShot 2024-09-24 at 15.43.48](https://hackmd.io/_uploads/ByZapygRC.png) ##### 1. Stereotypes(刻板類型) ![CleanShot 2024-09-24 at 15.44.05](https://hackmd.io/_uploads/B1Mk0kgCR.png) - 增加 UML 語彙,從現有模型元素衍生出新元素,適合特定領域 - 用於引入新圖形符號,能使模型元素看起來更具語意 - 例子:在網路建模中,刻板類型可用於路由器、交換機等,使其看起來像基本元素 ![CleanShot 2024-09-24 at 15.44.27](https://hackmd.io/_uploads/SyFkRyeCC.png) ![CleanShot 2024-09-24 at 15.44.34](https://hackmd.io/_uploads/SJayA1lA0.png) ##### 2. Tags(標籤) ![CleanShot 2024-09-24 at 15.44.48](https://hackmd.io/_uploads/S16g01xCR.png) - 延伸 UML 的屬性,能為模型元素添加額外資訊 - 以鍵值對的形式來描述模型元素的額外屬性 - 例子:為了監控子系統的版本和測試結果,可以使用 Tags 來表示這些屬性 ![CleanShot 2024-09-24 at 15.45.01](https://hackmd.io/_uploads/BypZ0ylCR.png) ![CleanShot 2024-09-24 at 15.45.14](https://hackmd.io/_uploads/ryIfRJxC0.png) ##### 3. Constraints(約束) ![CleanShot 2024-09-24 at 15.45.23](https://hackmd.io/_uploads/BktXRke00.png) - 限定或擴展 UML 元素的語意,強調必須滿足的條件 - 以方括號形式顯示於對應元素旁邊 - 例子:實時系統開發中,約束可用於設定響應時間等必要資訊 ![CleanShot 2024-09-24 at 15.45.42](https://hackmd.io/_uploads/H1M4CJeAC.png) ### Profile 的定義方式 ![CleanShot 2024-09-24 at 15.47.05](https://hackmd.io/_uploads/SkrYRkx0A.png) - 創建新 Meta-Model 擴展並修改 UML 元模型 - 利用內建機制擴展 UML Meta-Model - UML 2.0 允許使用任意資料結構來擴展模型,增加擴展的靈活性 - Profile 只能適應或客製現有 Meta-Model,無法創建新 Meta-Model ### UML Profile 的應用 ![CleanShot 2024-09-24 at 15.47.19](https://hackmd.io/_uploads/HyU5AkgRC.png) - Profile 可以動態組合,允許多個 Profiles 同時應用於同一模型 - 刻板類型可以擴展一個或多個 Meta-Classes - 例子:MVC 軟體架構中常用的三種刻板類型類別表示 ![CleanShot 2024-09-24 at 15.47.33](https://hackmd.io/_uploads/BkvjC1l0C.png) ### Profile 應用過程 - 要在特定應用中使用刻板類型,必須先整合包含刻板類型的 Profile ![CleanShot 2024-09-24 at 15.48.14](https://hackmd.io/_uploads/r1R0C1eCA.png) - 使用虛線箭頭表示 Profile 應用於另一個包,使該包能使用 Profile 中的刻板類型 - 例子:在一個 IT 公司的模型中,Ejb Profile 作為一個包,擴展自 Component Meta-Model ![CleanShot 2024-09-24 at 15.48.39](https://hackmd.io/_uploads/Hkw11gxCR.png) # Use Case Diagram ![CleanShot 2024-09-24 at 15.49.42](https://hackmd.io/_uploads/HylYygg0A.png) ### Use Case 圖的概述 - 簡單總結了用例、角色與系統之間的關係 ![CleanShot 2024-09-24 at 16.49.52](https://hackmd.io/_uploads/HJqH6ggAC.png) - 不展示達成用例目標的步驟順序 - 通常只有少量簡單圖形,超過 20 個用例可能使用不當 - 用例圖僅表示系統的功能需求,其他需求(例如業務規則、品質要求、實施限制)需透過其他 UML 圖表示 ![CleanShot 2024-09-24 at 16.50.22](https://hackmd.io/_uploads/ryx9aggCA.png) ### 用例圖的用途 ![CleanShot 2024-09-24 at 16.51.46](https://hackmd.io/_uploads/HyehpelRA.png) - 指定系統上下文 - 捕捉系統需求 - 驗證系統架構 - 推動實施與生成測試用例 - 通常由分析師與領域專家共同開發 ### Actor(角色) ![CleanShot 2024-09-24 at 16.52.10](https://hackmd.io/_uploads/BJs6aexC0.png) - 與系統互動的主體 - 通常畫成一個無性別的小人,標註名稱 - 角色在業務流程中扮演角色,如教授可以是大學的講師,也可能是研究員 - 角色觸發用例,並對系統交互有所期望 ### Use Case(用例) ![CleanShot 2024-09-24 at 16.53.12](https://hackmd.io/_uploads/H17zRee0C.png) - 系統功能或流程,可自動或手動 - 名稱由動詞和名詞組成,例如 "提交訂單" - 每個角色必須與一個用例關聯,用例定義期望的行為,但不描述具體實現 - 用例可以用文字或圖形形式表示 ![CleanShot 2024-09-24 at 16.53.57](https://hackmd.io/_uploads/S1mVAlgA0.png) ### Communication Link(通信連結) ![CleanShot 2024-09-24 at 16.54.25](https://hackmd.io/_uploads/ryASRggCC.png) - 角色與用例透過關聯進行通信,表示角色與用例之間的訊息交流 - 圖形上以實線表示 ### System Boundaries(系統邊界) ![CleanShot 2024-09-24 at 16.54.44](https://hackmd.io/_uploads/SJGw0eeC0.png) - 複雜系統的邊界可為每個模組,也可為整個系統 - 例如 ERP 系統中的人事、薪資和會計模組可作為單獨的邊界 - 整個系統可以跨越所有模組,展示系統總體邊界 ### 用例之間的關係 ![CleanShot 2024-09-24 at 16.55.02](https://hackmd.io/_uploads/rkY_RxlAA.png) ![CleanShot 2024-09-24 at 16.55.16](https://hackmd.io/_uploads/SkQtCxgAC.png) - 分析師負責定義用例之間的關係 - 通過重用現有用例來減少開發工作 ### Extend(擴展) ![CleanShot 2024-09-24 at 16.55.24](https://hackmd.io/_uploads/SkKtAgx0C.png) - 表示基礎用例在特定條件下的擴展行為 - 例如 "登錄" 用例可擴展為 "密碼無效" 和 "密碼正確" 用例 ![CleanShot 2024-09-24 at 16.55.33](https://hackmd.io/_uploads/S1N5RexCR.png) - 擴展用例顯示額外的功能或系統行為 ![CleanShot 2024-09-24 at 16.55.46](https://hackmd.io/_uploads/SJej0glA0.png) ### Include(包含) - 基礎用例會包含子用例的行為 ![CleanShot 2024-09-24 at 16.56.02](https://hackmd.io/_uploads/rk_hCxlAR.png) - 包含關係以虛線箭頭指向子用例 - 通常用來增加未在基礎用例中指定的通用行為 ![CleanShot 2024-09-24 at 16.56.22](https://hackmd.io/_uploads/ry7T0lgRR.png) ### Generalization(泛化) - 父子用例之間的關係,子用例繼承父用例的行為和語義 ![CleanShot 2024-09-24 at 16.56.44](https://hackmd.io/_uploads/BJabJZeRR.png) - 以實線和三角箭頭表示 - 子用例可添加或覆寫父用例的行為 ![CleanShot 2024-09-24 at 16.56.50](https://hackmd.io/_uploads/S1m-ybeCR.png) ### 用例圖建模技巧 ![CleanShot 2024-09-24 at 16.57.46](https://hackmd.io/_uploads/BkvXybx0A.png) - 從角色的角度組織和結構化用例圖 - 用例圖應從高層次簡單開始,逐步精細化 - 集中於功能需求(做什麼),而非實現方式(怎麼做) ![CleanShot 2024-09-24 at 16.58.09](https://hackmd.io/_uploads/ryTmJ-lC0.png) # Activity Diagram ![CleanShot 2024-09-24 at 16.58.30](https://hackmd.io/_uploads/HJqFy-l0R.png) ### Activity Diagram 基本符號 ![CleanShot 2024-09-24 at 17.08.02](https://hackmd.io/_uploads/B14YbWxA0.png) - **初始節點 (Initial Node)**: 開始流程,當活動從外部被呼叫時觸發。 ![CleanShot 2024-09-24 at 17.08.35](https://hackmd.io/_uploads/rJgiZWxCC.png) - **控制流 (Control Flow)**: 顯示活動之間的執行順序 ![CleanShot 2024-09-24 at 17.09.16](https://hackmd.io/_uploads/B19pbZgRR.png) - **動作 (Action)**: 要執行的任務。 ![CleanShot 2024-09-24 at 17.09.21](https://hackmd.io/_uploads/r16TWbgCA.png) - **決策節點 (Decision Node)**: 代表測試條件,控制流僅沿一個路徑進行。 ![CleanShot 2024-09-24 at 17.09.42](https://hackmd.io/_uploads/SJNkMbeAR.png) - **合併節點 (Merge Node)**: 合併在決策節點後創建的多條線程。 ![CleanShot 2024-09-24 at 17.09.54](https://hackmd.io/_uploads/SkZgzblRR.png) - **分叉節點 (Fork Node)**: 將行為拆分為多條並行或並發的活動流程。 ![CleanShot 2024-09-24 at 17.10.03](https://hackmd.io/_uploads/rJ_eMbl0A.png) - **合併節點 (Join Node)**: 結合多條平行流,通常分叉節點分開的流程。 ![CleanShot 2024-09-24 at 17.10.13](https://hackmd.io/_uploads/Skm-M-g0C.png) - **物件 (Object)**: 表示在執行過程中被作用的物件,為可選元素。 ![CleanShot 2024-09-24 at 17.10.21](https://hackmd.io/_uploads/ry5-fWxCC.png) - **終止節點 (Final Node)**: 終止所有活動流程。 ![CleanShot 2024-09-24 at 17.10.50](https://hackmd.io/_uploads/Hk_7M-xAA.png) - **泳道 (Swim Lane)**: 分組相同參與者的活動,或簡單地分組在單一流程中。 ![CleanShot 2024-09-24 at 17.11.01](https://hackmd.io/_uploads/B1WEf-gCA.png) ### 文件創建流程的活動圖範例 ![CleanShot 2024-09-24 at 17.11.36](https://hackmd.io/_uploads/Sy48GWl0C.png) - 開啟文本編輯器。 - 創建文件。 - 保存文件。 - 輸入文字。 - 如需圖形,匯入到文件中。 - 如需表格或試算表,創建並匯入文件。 - 保存文件。 - 列印文件。 - 關閉文本編輯器。 ### 訂單處理流程的活動圖範例 - 訂單接收後,活動分成兩個平行流程: - 發送訂單。 - 處理發票。 ![CleanShot 2024-09-24 at 17.11.58](https://hackmd.io/_uploads/S1SYzbeAC.png) - 訂單處理方根據條件決定送貨方式,分為「隔夜送貨」或「常規送貨」。 - 發送發票後,支付處理方接收付款。 - 最後,兩個平行流程合併,訂單處理完成。 ![CleanShot 2024-09-24 at 17.12.09](https://hackmd.io/_uploads/rk_FMbgCA.png) ### 學生報名程式課程的活動圖範例 ![CleanShot 2024-09-24 at 17.13.03](https://hackmd.io/_uploads/Hk0sG-gRC.png) - 學生決定報名程式課程。 - 線上搜索課程並決定註冊。 - 填寫註冊表格: - 填寫正確,學生註冊成功。 - 若填寫有誤,通知學生修改並重新提交。 - 學生可選擇檢視免費課程。 - 學生開始完整課程。 - 支付課程費用。 ### 客戶入職流程的活動圖 ![CleanShot 2024-09-24 at 17.13.50](https://hackmd.io/_uploads/S1j0G-eA0.png) ![CleanShot 2024-09-24 at 17.13.58](https://hackmd.io/_uploads/SJVkX-eR0.png) - **業務人員**: - 聯繫潛在客戶並安排會議。 - 寫會後的跟進信件。 - **顧問**: - 為客戶準備簡報,進行會議。 - 編寫並發送合約。 - **秘書**: - 在公司辦公室準備會議室(若會議在公司舉行)。 # State Machine Diagram ![CleanShot 2024-09-24 at 17.14.19](https://hackmd.io/_uploads/ByeE7ZlRR.png) ### UML 狀態圖概述 ![CleanShot 2024-09-24 at 19.15.35](https://hackmd.io/_uploads/BJEw1QgRC.png) ![CleanShot 2024-09-24 at 19.15.54](https://hackmd.io/_uploads/HJyFkQx0C.png) - **狀態機圖 (State Machine Diagram)**: 顯示實體的各種狀態以及如何對事件做出反應,適用於建模物件、系統元件等的動態行為。 - **狀態圖 vs. 序列圖**: - **狀態圖**:描述單一物件的所有事件、狀態及轉換。 - **序列圖**:描述多個物件間的單次互動事件。 ### 狀態圖中的基本符號 - **狀態 (State)**: 物件生命週期中的一個條件或情境,物件在該狀態下執行特定動作或等待事件。 ![CleanShot 2024-09-24 at 19.16.58](https://hackmd.io/_uploads/rycn17l0R.png) ![CleanShot 2024-09-24 at 19.17.14](https://hackmd.io/_uploads/SkBaJXe00.png) - **事件 (Event)**: 特定時間與空間發生的顯著事件,能觸發狀態轉換。 ![CleanShot 2024-09-24 at 19.17.34](https://hackmd.io/_uploads/S1hRJQxAR.png) - **守護條件 (Guard Condition)**: 在事件觸發後的轉換條件,若成立則進行狀態轉換。 ![CleanShot 2024-09-24 at 19.18.03](https://hackmd.io/_uploads/Skdle7e0C.png) - **轉換 (Transition)**: 物件從一個狀態進入另一狀態的關係,需事件與守護條件成立。 ![CleanShot 2024-09-24 at 19.18.17](https://hackmd.io/_uploads/Syv-l7gRR.png) - **動作 (Action)**: 執行的原子操作,改變物件狀態或返回值。 ![CleanShot 2024-09-24 at 19.18.26](https://hackmd.io/_uploads/HJefx7g0C.png) ![CleanShot 2024-09-24 at 19.18.51](https://hackmd.io/_uploads/r1D7xXlCR.png) - **初始狀態 (Initial State)**: 以實心圓表示,代表流程的開始。 - **終止狀態 (Final State)**: 以同心圓表示,代表流程的結束(開放迴路則可能無終止狀態)。 ![CleanShot 2024-09-24 at 19.19.10](https://hackmd.io/_uploads/S1K4eXeAA.png) ### 事件的類型 ![CleanShot 2024-09-24 at 19.19.29](https://hackmd.io/_uploads/B16SxXeA0.png) ![CleanShot 2024-09-24 at 19.19.45](https://hackmd.io/_uploads/Sk2LeQeA0.png) - **信號事件 (Signal Event)**: 異步消息或信號的到來。 - **呼叫事件 (Call Event)**: 程序調用操作的到來。 - **時間事件 (Time Event)**: 指定時間過後發生。 - **變更事件 (Change Event)**: 當滿足指定條件時發生。 ### 狀態轉換過程 - 原始狀態下,事件發生,執行動作,進入目標狀態。 ![CleanShot 2024-09-24 at 19.20.20](https://hackmd.io/_uploads/SyCKgXlA0.png) - 多個轉換可能發生,依賴不同的事件或守護條件。 - **自動轉換 (Automatic Transition)**: 不依賴事件的轉換。 - **進入/退出動作 (Entry/Exit Action)**: 物件進入或離開狀態時執行的動作。 ![CleanShot 2024-09-24 at 19.21.00](https://hackmd.io/_uploads/rJtsgXlA0.png) ### 子狀態與複合狀態 ![CleanShot 2024-09-24 at 19.21.17](https://hackmd.io/_uploads/H1YneXxRC.png) - **簡單狀態 (Simple State)**: 無內部結構的狀態。 - **複合狀態 (Composite State)**: 有子狀態或巢狀狀態的狀態。 - 子狀態層級不限,每個巢狀狀態最多可有一個初始與終止狀態。 ### 測試案例的導出 ![CleanShot 2024-09-24 at 19.22.33](https://hackmd.io/_uploads/SkSbbQlRR.png) - 空閒狀態收到「過熱事件」。 - 呼叫啟動狀態收到「壓縮機啟動事件」。 - 失敗狀態收到「錯誤重置事件」。 - 加熱狀態收到「成功事件」或「失敗事件」。 ### 歷史狀態與並行子狀態 ![CleanShot 2024-09-24 at 19.23.24](https://hackmd.io/_uploads/H1nVbmeCR.png) - **歷史狀態 (History State)**: 返回離開複合狀態前的最後活躍子狀態,顯示為帶有字母 "H" 的圓形。 - **並行子狀態 (Concurrent Substates)**: 涉及同時進行的多個活動,需使用分叉 (Fork) 進入不同的線程。 ![CleanShot 2024-09-24 at 19.24.19](https://hackmd.io/_uploads/H1G_WQlAR.png) # Sequence Diagram ![CleanShot 2024-09-24 at 19.24.36](https://hackmd.io/_uploads/SyCa-QgRC.png) ### UML序列圖簡介 ![CleanShot 2024-09-24 at 19.47.43](https://hackmd.io/_uploads/S1llwXgAA.png) - 序列圖是互動圖,詳細描述操作的執行過程。 - 捕捉對象之間的互動,顯示隨時間的組織與交互。 - 水平軸顯示參與者,垂直軸顯示時間進程。 ### 序列圖的時間與參與者 - 水平軸參與者按照消息序列排列,並不代表具體順序。 - 垂直軸顯示執行順序,而非實際持續時間。 ### 序列圖的基本符號 - **參與者(Actor)**:代表與系統交互的角色。 ![CleanShot 2024-09-24 at 19.48.05](https://hackmd.io/_uploads/B17ZPQeAA.png) - **生命線(Lifeline)**:個別參與者的時間軸。 ![CleanShot 2024-09-24 at 19.48.22](https://hackmd.io/_uploads/ry4fw7eAR.png) - **激活(Activation)**:表示參與者執行操作的期間。 ![CleanShot 2024-09-24 at 19.48.30](https://hackmd.io/_uploads/S13zDQxAR.png) - **消息(Message)**:表示調用過程或操作的箭頭。 - 同步消息:用填充箭頭表示。 - 異步消息:用普通箭頭表示。 ![CleanShot 2024-09-24 at 19.48.40](https://hackmd.io/_uploads/B1DXP7lRR.png) ![CleanShot 2024-09-24 at 19.49.01](https://hackmd.io/_uploads/B1FEPmgRR.png) ![CleanShot 2024-09-24 at 19.49.14](https://hackmd.io/_uploads/rJSSvXx0C.png) - **返回消息(Return Message)**:代表信息傳遞的回傳箭頭。 ![CleanShot 2024-09-24 at 19.49.19](https://hackmd.io/_uploads/HyiBwQl0R.png) - **自我消息(Self Message)**:參與者對自己發送的消息。 ![CleanShot 2024-09-24 at 19.50.07](https://hackmd.io/_uploads/S1jdDQlA0.png) ### 參與者的創建與銷毀 - **創建消息(Create Message)**:箭頭指向新參與者的矩形。 ![CleanShot 2024-09-24 at 19.49.33](https://hackmd.io/_uploads/Hk0IPQeCR.png) - **銷毀消息(Destroy Message)**:用大“X”標示的箭頭表示銷毀。 ![CleanShot 2024-09-24 at 19.50.17](https://hackmd.io/_uploads/BkrYDmxAR.png) ### 其他元素 - **註解(Note/Comment)**:附加信息,無語義強制。 ![CleanShot 2024-09-24 at 19.50.33](https://hackmd.io/_uploads/r1SqP7lC0.png) - **控制焦點(Focus of Control)**:表示操作執行的時間段。 ![CleanShot 2024-09-24 at 19.50.44](https://hackmd.io/_uploads/S1Zjw7xCC.png) ### 序列片段(Sequence Fragments) ![CleanShot 2024-09-24 at 19.50.56](https://hackmd.io/_uploads/S1joPXlA0.png) - **替代片段(Alt)**:多個選擇中僅執行一個,分隔消息以虛線表示。 ![CleanShot 2024-09-24 at 19.51.00](https://hackmd.io/_uploads/SkgnvQgA0.png) - **選擇片段(Opt)**:僅在條件為真時執行。 ![CleanShot 2024-09-24 at 19.51.08](https://hackmd.io/_uploads/S19hv7lRR.png) - **平行處理(Par)**:同時處理多個消息。 ![CleanShot 2024-09-24 at 19.51.17](https://hackmd.io/_uploads/B1fpvXlCA.png) - **迴圈(Loop)**:模擬循環。 ![CleanShot 2024-09-24 at 19.51.23](https://hackmd.io/_uploads/B1vaw7lCA.png) - **中斷(Break)**:在條件下提前終止。 ![CleanShot 2024-09-24 at 19.51.35](https://hackmd.io/_uploads/BJBRw7xRC.png) - **臨界區(Critical)**:某些消息處理期間停止其他處理。 ![CleanShot 2024-09-24 at 19.51.41](https://hackmd.io/_uploads/HJtRvQgAA.png) - neg ![CleanShot 2024-09-24 at 19.51.50](https://hackmd.io/_uploads/HkVedQxCA.png) - assert ![CleanShot 2024-09-24 at 19.55.18](https://hackmd.io/_uploads/BJMhumeAR.png) - Strict ![CleanShot 2024-09-24 at 19.55.24](https://hackmd.io/_uploads/B1_humx0A.png) - seq ![CleanShot 2024-09-24 at 19.55.30](https://hackmd.io/_uploads/Skka_mgA0.png) - ignore ![CleanShot 2024-09-24 at 19.55.38](https://hackmd.io/_uploads/rJwpOQgC0.png) - ref ![CleanShot 2024-09-24 at 19.55.44](https://hackmd.io/_uploads/S1iTdmgCA.png) - sd ![CleanShot 2024-09-24 at 19.55.54](https://hackmd.io/_uploads/rJYR_7xCR.png) ### 使用案例與腳本建模 ![CleanShot 2024-09-24 at 19.56.15](https://hackmd.io/_uploads/S1a1KXgC0.png) - 使用案例描述外部參與者與系統之間的交互。 - 腳本描述特定執行過程中的事件序列。 - 例如,顧客需求可表示為一個序列圖,顯示主要和替代情景。 ![CleanShot 2024-09-24 at 19.56.32](https://hackmd.io/_uploads/r1JbF7xR0.png) # Communications Diagram ![CleanShot 2024-09-24 at 19.56.55](https://hackmd.io/_uploads/ryivFXlCC.png) ### 溝通圖概述 ![CleanShot 2024-09-24 at 20.25.01](https://hackmd.io/_uploads/S1y21VxCA.png) - 溝通圖是互動圖的子類型,顯示對象之間的互動。 - 溝通圖是對象圖的擴展,除了對象,還顯示了對象之間傳遞的消息。 - 用途: - 模型中對象或角色間的消息傳遞。 - 系統架構設計中的機制建模。 - 捕捉對象間的過往消息傳遞。 - 模型替代場景中不同對象的協作。 - 幫助識別對象、類別及其屬性(如消息參數和操作)。 ![CleanShot 2024-09-24 at 20.25.37](https://hackmd.io/_uploads/rJOAkEgA0.png) ### 溝通圖符號和範例 - 對象或角色以矩形表示,如 "Object 1"、"Object 2"。 - 消息用帶標籤的箭頭表示,箭頭從發送對象指向接收對象。 ![CleanShot 2024-09-24 at 20.26.23](https://hackmd.io/_uploads/rkxbg4g0C.png) - 消息按順序標號,例如 Message 1、Message 2 等。 - **自我消息 (Loops)**:對象發送消息給自己。 - **範例**:旅館房間預訂中,每個消息都有序列號,頂層消息為 1,同次呼叫中的消息具有相同小數前綴。 ![CleanShot 2024-09-24 at 20.27.06](https://hackmd.io/_uploads/Hk07x4eRC.png) ### 溝通圖與序列圖的比較 ![CleanShot 2024-09-24 at 20.27.49](https://hackmd.io/_uploads/BJb8lVlRA.png) - **相似點**:兩者語義相同,展示相同信息,可互相轉換。 - **區別**: - **溝通圖**:按空間組織元素,方便查看對象間的關係。 - **序列圖**:按時間順序排列消息,便於查看消息的時間順序。 - **使用情境**:當需要更清楚地展示對象間的關係時,使用溝通圖更合適。 ![CleanShot 2024-09-24 at 20.28.24](https://hackmd.io/_uploads/ryUOl4gAA.png) ### 物件關係和消息 ![CleanShot 2024-09-24 at 20.28.42](https://hackmd.io/_uploads/B1Ktg4g0C.png) - **供應對象 (Supplier)**:提供方法、接收消息的對象。 - **客戶對象 (Client)**:調用方法、發送消息的對象。 - 對象間的連接用連結表示,顯示對象之間的消息傳遞能力。 - **自我消息 (Loop Icon)**:對象發送消息給自己。 ### 消息格式 ![CleanShot 2024-09-24 at 20.29.32](https://hackmd.io/_uploads/rJzaxVgRR.png) ![CleanShot 2024-09-24 at 20.30.12](https://hackmd.io/_uploads/By91-NgAA.png) - 消息以箭頭表示,從客戶對象指向供應對象。 - 消息圖標可包含多個消息,每個消息都有序列號標識時間順序。 - **序列號**:例如消息 "1.1" 是嵌套在父消息 "1" 內的第一條消息。 ### 溝通圖的實例 ![CleanShot 2024-09-24 at 20.30.33](https://hackmd.io/_uploads/HJ_gbEgCC.png) ![CleanShot 2024-09-24 at 20.30.54](https://hackmd.io/_uploads/SksWZNeAC.png) ![CleanShot 2024-09-24 at 20.31.15](https://hackmd.io/_uploads/HyM7bVx0R.png) - **範例 1**:從序列圖轉換到溝通圖,描述客戶創建一個交易,執行消息 "A"、"D"、"O",接著將值 "P1" 到 "P4" 存入資料庫,最終接收交易完成消息並銷毀交易。 ### 控制焦點 (Focus of Control) ![CleanShot 2024-09-24 at 20.31.35](https://hackmd.io/_uploads/ryGNbNgRC.png) ![CleanShot 2024-09-24 at 20.33.08](https://hackmd.io/_uploads/H1M9ZNgAR.png) - **控制焦點**:在溝通圖中,控制焦點通過消息的嵌套編號表示。 # Interaction Overview Diagram ![CleanShot 2024-09-24 at 20.33.20](https://hackmd.io/_uploads/SyvabElCA.png) ### 互動概述圖概述 ![CleanShot 2024-09-24 at 20.58.00](https://hackmd.io/_uploads/HyUvPVxCA.png) - 互動概述圖展示了不同互動間的控制流程,結合了活動圖和序列圖的特性。 - 高階抽象,顯示多個圖表之間的活動流。 - 類似活動圖,但元素被小型序列圖取代,也可看作是標記了活動流程的序列圖。 ### 主要節點 - Control flows ![CleanShot 2024-09-24 at 20.58.06](https://hackmd.io/_uploads/BkjwwNlCR.png) - **初始節點 (Initial Node)**:表示流程的開始。 ![CleanShot 2024-09-24 at 20.59.12](https://hackmd.io/_uploads/Symhw4gRC.png) - **決策節點 (Decision Node)**:根據條件選擇不同的路徑。 ![CleanShot 2024-09-24 at 20.59.41](https://hackmd.io/_uploads/Sk7Rv4g00.png) - **分叉節點 (Fork Node)**:並行執行多個活動。 ![CleanShot 2024-09-24 at 20.59.43](https://hackmd.io/_uploads/r1wAPEeAA.png) - **合併節點 (Join Node)**:多條平行路徑匯合。 ![CleanShot 2024-09-24 at 20.59.44](https://hackmd.io/_uploads/BJ3CvVgRC.png) - **活動終止節點 (Activity Final Node)**:表示流程的結束。 ![CleanShot 2024-09-24 at 20.59.27](https://hackmd.io/_uploads/B1T3wNgCA.png) ### 互動節點類型 ![CleanShot 2024-09-24 at 21.00.11](https://hackmd.io/_uploads/Hy_1dNlC0.png) - **序列圖標記 (sd)**:可以內聯出現,作為活動調用。 ![CleanShot 2024-09-24 at 21.00.17](https://hackmd.io/_uploads/Bk2JONe00.png) ![CleanShot 2024-09-24 at 21.00.33](https://hackmd.io/_uploads/HkhgdEeRA.png) - **互動參考 (ref)**:簡化大型或複雜的序列圖,允許重複使用已定義的互動。![CleanShot 2024-09-24 at 21.00.37](https://hackmd.io/_uploads/HJZZOVeRA.png) ### 範例 1:員工入職流程 ![CleanShot 2024-09-24 at 21.00.53](https://hackmd.io/_uploads/B1Zfd4x0A.png) - 員工首先接受或拒絕工作邀約。 - 接受邀約後,需要註冊 HR 系統並申請公司車輛。 - 完成後,員工開始工作,如為新客戶辦理入職。 - 若在試用期後未完成工作,則合同終止。 ### 範例 2:門鎖密碼驗證 - 互動開始時,輸入無效的密碼,觸發密碼錯誤互動。 - ![CleanShot 2024-09-24 at 21.01.49](https://hackmd.io/_uploads/H1RS_Nl00.png) - 決策節點檢查密碼是否有效: - **有效**:授予訪問權限,門打開。 ![CleanShot 2024-09-24 at 21.02.02](https://hackmd.io/_uploads/r1I8dElA0.png) - **無效**:流程結束,沒有其他動作。 ![CleanShot 2024-09-24 at 21.02.15](https://hackmd.io/_uploads/B1XPdNlCA.png) ### 範例 3:旅館房間預訂 ![CleanShot 2024-09-24 at 21.02.44](https://hackmd.io/_uploads/r1XFuElAA.png) - 註冊網站,選擇可用房型和日期。 - 若日期無房,返回重新選擇。 - 若選擇成功,進行結帳並完成預訂。 # Timing Diagram ![CleanShot 2024-09-24 at 21.02.58](https://hackmd.io/_uploads/ry16_ElA0.png) ### UML 時間圖概述 ![CleanShot 2024-09-24 at 21.07.23](https://hackmd.io/_uploads/r1pqY4gRR.png) UML **時間圖**是一種互動圖,用來表達不同物件的狀態隨時間變化的情況,重點在於展示狀態改變的時間間隔。時間圖關注生命線內部和之間的條件變化,描述分類器及其互動的行為,特別是事件在時間軸上導致狀態變化的過程。 ### 主要概念 1. **狀態變化**:生命線水平線的垂直變化表示狀態的變化。這種變化通常由事件、訊息(稱為刺激)或時間的經過引發。 2. **生命線**:時間圖中的主要元素,表示互動中的參與者。生命線通常水平排列,從左向右閱讀。可以疊加多個生命線來模擬不同物件之間的互動。 3. **狀態時間軸**:顯示物件在時間中所處的狀態。時間軸(x 軸)表示經過的時間,狀態(y 軸)則表示對應的狀態名稱。 4. **訊息與事件**:時間圖中,物件之間傳遞訊息用箭頭表示。箭頭的起點和終點對應訊息發送和接收的時間點。 5. **相對時間戳**:可以使用變數(如 t)標記特定的時間點,表示相對時間的事件發生時間,並使用時間約束來指定訊息必須在特定時間內接收。 6. **值時間軸**:與狀態時間軸類似,顯示物件值隨時間的變化。x 軸表示時間,y 軸表示值。 ### 圖表結構 ![CleanShot 2024-09-24 at 21.07.50](https://hackmd.io/_uploads/ryE2t4eAA.png) - **狀態生命線**:顯示元素隨著時間的狀態變化,垂直軸上標記狀態列表,水平軸上展示時間。 - **值生命線**:顯示元素值隨時間的變化,類似於狀態生命線,但標記的是值而非狀態。 - **訊息**:在不同生命線之間傳遞的訊息可以用箭頭表示,起點和終點標記訊息的發送和接收時間。 ### 範例 #### 1. **登入系統** - **生命線狀態變化**:某系統收到登入事件後,在特定時間範圍內發生狀態變化。登入訊息在事件序列開始後的第 3 單位時間接收,可以在時間圖上顯示相對時間點(例如 t)。 ![CleanShot 2024-09-24 at 21.08.35](https://hackmd.io/_uploads/Byb1q4x0A.png) ![CleanShot 2024-09-24 at 21.08.50](https://hackmd.io/_uploads/HJJgcNxRR.png) #### 2. **停車場系統模擬** - **一致性檢查**:在這個範例中,停車場系統中的時間圖與序列圖和狀態圖相匹配。通過將序列圖中的訊息與生命線附加的狀態對照,可以更容易地導出對應的時間圖,展示各物件狀態的變化和訊息的傳遞時間。 ### 時間圖的應用 時間圖主要用於: - **展示狀態和時間關係**:特別是在需要明確表示狀態變化時間的情況下使用,例如嵌入式系統、實時系統等。 - **同步多個圖表**:如將序列圖或狀態圖的細節以時間圖的形式表達,以便檢查狀態轉換的準確性。 時間圖提供了詳細描述系統中各對象隨時間變化的能力,使設計者能更好地理解狀態轉換的精確時間點及條件。 # Terminology - **UML (Unified Modeling Language)**:統一建模語言,用於軟體系統設計與可視化。 - **UML 2.0**:UML 的更新版本,包含一套一致的圖表格式。 - **圖表**:用來視覺化軟體系統、流程或結構的示意圖。 - **結構圖**:用於描述系統靜態結構的圖表類型。 - **行為圖**:用於描述系統行為或動態互動的圖表類型。 - **類圖 (Class Diagram)**:展示系統中的類及其屬性、方法和關聯關係。 - **物件圖 (Object Diagram)**:系統在某一時刻的實例化類的快照。 - **組件圖 (Component Diagram)**:展示系統的組件及其之間的關係。 - **複合結構圖 (Composite Structure Diagram)**:描述類的內部結構及組成部分之間的關係。 - **部署圖 (Deployment Diagram)**:展示軟體系統在硬體上的部署情況。 - **封裝圖 (Package Diagram)**:展示系統的邏輯封裝和依賴關係。 - **配置圖 (Profile Diagram)**:擴展 UML 的圖表,用於自定義模型元素。 - **活動圖 (Activity Diagram)**:用於描述系統內部活動流程。 - **用例圖 (Use Case Diagram)**:展示系統用戶與系統功能之間的互動。 - **狀態圖 (State Diagram)**:描述系統或物件的狀態轉換。 - **序列圖 (Sequence Diagram)**:描述物件之間的時間序列交互。 - **通信圖 (Communication Diagram)**:強調物件之間的交互與關係。 - **交互總覽圖 (Interaction Overview Diagram)**:展示系統中交互的概述和流程。 - **時間圖 (Timing Diagram)**:展示物件隨著時間的狀態變化。 - **分散式系統**:指多個系統組件分佈在不同網路節點上的系統構架。 - **物件導向開發**:軟體開發方法,強調對象、類和繼承等概念。 - **類圖 (Class Diagram)**:描述系統中物件的類型及其之間的靜態關係。 - **關聯 (Association)**:表示類型實例之間的關係,如「人員」和「公司」的關聯。 - **繼承 (Inheritance)**:對應物件導向設計中的繼承,表示類之間的父子關係。 - **聚合 (Aggregation)**:物件導向設計中的組合形式,用於表示整體與部分的關係。 - **組件圖 (Component Diagram)**:展示組件如何組合形成較大的系統,並顯示組件之間的依賴關係。 - **部署圖 (Deployment Diagram)**:模擬軟體系統的物理部署,顯示軟體構件在硬體上的分佈。 - **構件 (Artifact)**:開發過程中實體世界中的具體元素,如運行時組件或源碼構件。 - **物件圖 (Object Diagram)**:類圖的具體實例,顯示某一時刻系統狀態的快照。 - **封裝圖 (Package Diagram)**:結構圖的一種,顯示系統中封裝的層次結構和依賴關係。 - **複合結構圖 (Composite Structure Diagram)**:展示類的內部結構及各部分的互動。 - **端口 (Ports)**:在複合結構圖中,類的內部部分或實例與外界通訊的接口。 - **連接器 (Connectors)**:在複合結構圖中,表示不同部分之間的連接與互動。 - **角色 (Roles)**:每個元素在複合結構圖中的特定功能。 - **配置圖 (Profile Diagram)**:允許創建領域或平台特定的構型,並定義其關係。 - **刻板 (Stereotypes)**:UML 中用來擴展標準模型元素的定義。 - **用例圖 (Use Case Diagram)**:描述系統的功能需求及其與外部角色的互動。 - **活動圖 (Activity Diagram)**:展示步驟式活動流程,支持選擇、迭代與並發操作。 - **狀態圖 (State Machine Diagram)**:根據 David Harrell 的狀態圖概念,描述系統的行為狀態轉換。 - **序列圖 (Sequence Diagram)**:展示物件間基於時間順序的交互行為。 - **通信圖 (Communication Diagram)**:強調物件之間的合作,而非時間順序。 - **交互總覽圖 (Interaction Overview Diagram)**:概述交互的控制流程,節點表示交互過程。 - **時間圖 (Timing Diagram)**:描述物件在給定時間段的行為,與序列圖類似但時間軸方向相反。 - **類 (Class)**:物件的模板,包含屬性和行為。 - **屬性 (Attributes)**:類的狀態,用類型標示其值範圍。 - **方法 (Methods)**:類的行為,描述類可以執行的操作。 - **訪問修飾符 (Access Modifiers)**:控制類的屬性與方法的可見性,+(public)、-(private)、#(protected)、~(package local)。 - **方法參數方向 (Method Parameter Direction)**:描述參數在方法中的作用,包括 in(輸入)、out(輸出)、in out(輸入輸出)。 - **概念視角 (Conceptual Perspective)**:從現實世界角度描述類圖,語言無關。 - **規範視角 (Specification Perspective)**:描述軟體的抽象規範與介面,不關心具體實現。 - **實現視角 (Implementation Perspective)**:描述特定技術或程式語言中的軟體實現。 - **關聯 (Association)**:類之間的關係,用連線表示,通常包括動詞和多重性說明。 - **多重性 (Multiplicity)**:描述類之間關聯的數量範圍。 - **繼承 (Inheritance)**:類之間的父子關係,子類繼承父類的屬性和方法,箭頭指向父類。 - **實現 (Realization)**:描述介面與實作類之間的關係,虛線箭頭指向介面。 - **依賴 (Dependency)**:當一個類使用另一個類的物件,但不持久保存時,會產生依賴關係,虛線箭頭表示。 - **聚合 (Aggregation)**:類之間的整體-部分關係,部分可以獨立存在,空心菱形表示。 - **組合 (Composition)**:特殊的聚合關係,當整體被刪除時,部分也會被刪除,實心菱形表示。 - **實心菱形 (Solid Diamond)**:表示組合的關係符號。 - **空心菱形 (Hollow Diamond)**:表示聚合的關係符號。 - **虛線箭頭 (Dashed Arrow)**:表示依賴和實現的關係符號。 - **連續線 (Continuous Line)**:表示關聯、聚合和組合的關係符號。 - **實例 (Instance)**:類的具體化,通常用於物件圖中。 - **抽象類 (Abstract Class)**:不能直接實例化的類,名稱以斜體表示。 - **元件圖 (Component Diagram)**:用來建模物件導向系統的物理層面,幫助可視化、定義與文件化基於元件的系統。 - **正向工程 (Forward Engineering)**:從設計到可執行系統的構建過程。 - **逆向工程 (Reverse Engineering)**:從現有的系統中提取設計或模型的過程。 - **元件 (Component)**:系統中的模組化部分,封裝其內容。 - **元件符號 (Component Symbol)**:元件以矩形表示,通常帶有垂直排列的選用區塊。 - **提供介面 (Provided Interface)**:元件提供的服務,表示為完整圓圈符號,俗稱「棒棒糖」符號。 - **需求介面 (Required Interface)**:元件所需的服務,表示為半圓符號。 - **子系統 (Subsystem)**:特別的元件,與元件符號相同,但標有「subsystem」關鍵字。 - **埠 (Port)**:用來暴露元件的需求和提供介面,繪於系統或元件邊緣的方框。 - **關聯 (Association)**:定義元件之間的語義關係,通常用直線連接。 - **組合 (Composition)**:強聚合關係,一個部分只屬於一個整體,整體刪除時部分也被刪除。 - **聚合 (Aggregation)**:弱聚合關係,部分可以單獨存在,空心菱形表示。 - **限制 (Constraint)**:表達元素語義的條件或限制,可以是自然語言或機器可讀語言。 - **依賴 (Dependency)**:一個元素依賴於其他元素,通常用虛線表示。 - **繼承 (Inheritance)**:一般化與特定化的分類關係,特定分類繼承一般分類的屬性與行為。 - **程式碼文件 (Source Code Files)**:通過正向或逆向工程轉換為元件的程式碼檔案。 - **標籤 (Tags)**:指示程式碼檔案的版本、作者、修改時間等元數據。 - **可執行檔案 (Executable Files)**:系統中的元件,如程式、程式庫、文件等。 - **節點 (Node)**:系統分佈的實體,元件可以部署在不同節點上。 - **編譯依賴 (Compilation Dependencies)**:程式碼檔案之間的依賴關係,用依賴符號表示。 - **資料庫映射 (Database Mapping)**:將類映射到資料庫表的策略。 - **資料庫物理分佈 (Physical Distribution of Database)**:資料庫分佈位置,影響映射策略。 - **可執行發佈 (Executable Release)**:從元件圖模型化一個可執行系統的過程。 - UML(統一建模語言):一種標準化的建模語言,用於描述軟體系統的設計和結構。 - Deployment Diagram(部署圖):用於描述軟體系統在運行時的配置,展示硬體節點和軟體元件的交互方式。 - Structural Diagram(結構圖):UML的一種圖表,展示系統的靜態結構。 - Runtime System(運行時系統):軟體系統在執行過程中的狀態與配置。 - Node(節點):硬體或軟體中的運行實體,在部署圖中用3D方框表示。 - Stereotype(類型標註):用來表示節點的特殊屬性或角色。 - Hardware Node(硬體節點):指物理設備或硬體設施。 - Client-Server(客戶端-伺服器):一種分佈式系統架構,客戶端發出請求,伺服器處理請求。 - Distributed System(分散式系統):由多個計算機或節點組成,透過網路協同工作。 - Topology(拓撲):描述硬體節點的佈局方式以及它們之間的連接方式。 - Processor(處理器):指運行軟體的計算設備。 - Communication Devices(通信設備):用於在節點之間傳輸資料的硬體或軟體。 - Package(包):用來分組節點或元件的邏輯集合。 - Use Case Diagram(用例圖):用於展示系統的功能性需求和外部行為。 - Interaction Diagram(交互圖):用來展示系統內各元素之間的動態交互。 - LAN(局域網):Local Area Network,用於連接局部範圍內的設備。 - Firewall(防火牆):用來保護網絡免受未經授權訪問的安全設備。 - Backup(備份):防止數據丟失的備援系統或策略。 - Data Conversion(數據轉換):將數據從一種格式轉換為另一種格式的過程。 - Operating System(操作系統):管理硬體資源和軟體運行的系統軟體。 - Communication Protocol(通信協議):定義網路中數據傳輸規則的標準。 - Browser(瀏覽器):用戶與網頁或應用程式交互的軟體工具。 - Physical Site(實體位置):部署硬體設備的物理位置。 - Production Support System(生產支持系統):用來解決運行時問題的專用系統。 - UML Object Diagram(UML物件圖):一種UML圖表,展示系統在特定時間點的物件及其關係。 - Class Diagram(類別圖):描述系統中的類別及其屬性、方法和關係的靜態結構圖。 - Snapshot(快照):系統在某一時刻的狀態圖像。 - Instantiated Class(實例化類別):指類別的具體實例,即物件。 - Communication Diagram(通信圖):描述物件間如何互動,無訊息時可視為物件圖。 - Classifier(分類器):指類別、介面、元件等定義物件的元素。 - Object(物件):類別的具體實例,具有屬性和行為。 - Attribute(屬性):物件的狀態或數據,通常以具體值表示。 - Link(連結):物件之間的關係,類似於類別之間的關聯。 - Association(關聯):類別之間的連接,物件圖中的連結是其實例。 - Recursive Relationship(遞迴關係):物件或類別與自己建立的關聯。 - Mechanism(機制):系統中類別、介面等元素的互動方式,通常代表某種功能或行為。 - Interface(介面):定義類別或物件行為的協議或規範。 - Element(元素):UML模型中的基本構件,如類別、介面、物件等。 - State(狀態):物件在某個時刻的屬性值或行為狀態。 - Robot(機器人):物件圖中的一個實例,代表具體機器人的物件。 - World(世界):機器人所處環境的抽象模型。 - Global State(全局狀態):系統中所有物件的整體狀態。 - Interaction(交互):類別或物件間的行為互動。 - Runtime(運行時):系統在執行過程中的狀態或行為。 - UML Package Diagram(UML封裝圖):展示模型元素的位置和組織結構,特別適用於中大型項目。 - Package(封裝):UML中的子系統或模組,用於將相關的模型元素分組,類似資料夾的概念。 - Subsystem(子系統):系統中的一部分元素,是封裝的一種特殊情況。 - Namespace(命名空間):元素名稱的作用域,包裹的每個元素在其命名空間中必須是唯一的。 - Dependency(依賴關係):表示一個封裝的變更會影響到另一個封裝。 - Stereotype(類型標註):一種高級分類,為UML元素賦予特定屬性,通過括號表示。 - Visibility(可見性):定義元素在命名空間中的可見範圍,如公開、保護、私有。 - Public Visibility(公開可見性):元素對命名空間外部可見,用加號表示。 - Private Visibility(私有可見性):元素僅對命名空間內部可見,用減號表示。 - Protected Visibility(保護可見性):元素僅對一般化關係的命名空間可見,用井號表示。 - Package Visibility(封裝可見性):元素在同一封裝內可見,用波浪號表示。 - Client Package(客戶端封裝):依賴另一個封裝的封裝。 - Supplier Package(供應端封裝):提供元素給另一個封裝使用的封裝。 - Use Stereotype(使用類型標註):表明客戶端封裝使用供應端封裝的公開元素。 - Trace(追溯):表示一個元素發展為另一個元素的歷史關係,通常用於模型間。 - Merge(合併):供應端封裝的公開元素合併到客戶端封裝,通常用於元模型設計。 - Order Tracking Module(訂單追蹤模組):負責提供客戶訂單的追蹤資訊的模組。 - Order Details Module(訂單詳情模組):與訂單追蹤模組互動,提供訂單詳情的模組。 - Shipping Module(運輸模組):提供訂單運輸資訊的模組。 - Dual Dependency(雙重依賴):兩個模組之間的雙向依賴關係。 - Composite Structure Diagram(複合結構圖):UML 2.0 新增的圖表,用來表示軟體系統內部結構及其組成部分之間的連結。 - Structured Classifier(結構化分類器):具有內部結構的分類器,描述其內部部分和連結。 - Collaboration(協作):定義一組部分之間的結構和連結,為達到特定目標而進行協作。 - Part(部分):一個實例的角色,用來描述分類器內的一組或多個實例。 - Port(端口):分類器實例與外部環境或內部部分之間交互的點。 - Connector(連接器):表示模型內部實例之間的關係,定義角色之間的通信。 - Aggregation(聚合):表示一個類別包含其他類別的關係,部分是聚合的元素。 - Composition(組合):表示一個類別的部分不可分的關係,部分直接屬於組合類別。 - Classifier(分類器):描述一組對象的模版,具體化類別或接口的屬性和操作。 - Provided Interface(提供接口):類別或組件對外提供的服務或功能。 - Required Interface(需求接口):類別或組件所需的外部服務或功能。 - External Object(外部對象):指引用外部類別或對象,使用虛線矩形表示。 - Role(角色):協作中的實例的具體功能或作用。 - Instance(實例):類別的具體化,描述某個分類器的具體對象。 - Reference(引用):在模型中指向其他對象的關係。 - Object Diagram(對象圖):描述特定時間點上系統中的對象和它們的關係。 - Component Diagram(組件圖):表示系統中的各種組件及其依賴關係。 - Deployment Diagram(部署圖):展示硬體和軟體元件的實際運行環境及其關係。 - Package Diagram(封裝圖):展示系統的層次結構和依賴關係。 - Internal Structure(內部結構):分類器的內部組成部分及其相互關係。 - Namespace(命名空間):元素名稱的作用域,確保唯一性。 - Multiplicity(多重性):表示類別之間關係的數量。 - Logical Representation(邏輯表示):軟體系統或其部分的抽象結構圖。 - UML 2.0(統一建模語言2.0):UML的一個更新版本,增加了更多建模功能。 - **UML (統一建模語言)**: 一種圖形化語言,用於可視化、指定、構建和文件化軟體系統的構件。 - **Profile (配置檔)**: 一組擴展,用於特定領域或平台的 UML 自定義。 - **Stereotype (刻板印象)**: 擴展 UML 語彙,允許添加特定於領域的新模型元素。 - **Tag (標籤)**: 關鍵字和值對,用於擴展模型元素的屬性。 - **Constraint (約束)**: 必須滿足的語義或條件,擴展 UML 元素的語義。 - **Metamodel (元模型)**: 描述模型如何組織和定義的模型。 - **Domain (領域)**: 特定的應用範圍,例如航空、醫療或金融。 - **Platform (平台)**: 特定技術平台,如 J2EE 或 .NET。 - **UML 2.0**: 第二代 UML 規範,提供更多擴展功能。 - **Model Element (模型元素)**: 構成 UML 模型的基本單元,如類別、屬性等。 - **Entity Bean (實體 bean)**: EJB 的一種,可持久化的 Java 物件,代表數據庫中的數據。 - **Session Bean (會話 bean)**: EJB 中的組件,負責執行業務邏輯。 - **Remote Interface (遠程介面)**: 定義遠程 EJB 方法的介面。 - **Home Interface (主介面)**: 定義 EJB 的生命週期方法的介面。 - **Artifact (工件)**: 在 UML 中表示系統中的物理資源,例如文件或二進制代碼。 - **Jar File (Java 壓縮包)**: 存儲 Java 程式碼的壓縮文件格式。 - **MVC (模型-視圖-控制器)**: 一種設計模式,用於分離系統中的業務邏輯、用戶界面和輸入控制。 - **Component (組件)**: UML 中的結構單元,表示系統中的可重用部分。 - **Network Profile (網路配置檔)**: 用於網路系統建模的 UML 擴展。 - **Telecommunications Profile (電信配置檔)**: 專門針對電信系統建模的 UML 擴展。 - **Software Profile (軟體配置檔)**: 用於軟體架構建模的 UML 擴展。 - **Activity Diagram (活動圖)**: 描述系統的動態行為,顯示從一個活動過渡到另一個活動的流程。 - **Initial Node (初始節點)**: 表示活動開始的節點。 - **Control Flow (控制流程)**: 表示活動之間的執行順序。 - **Action (動作)**: 系統中需要執行的任務。 - **Decision Node (決策節點)**: 用來根據條件測試來決定控制流向哪條路徑。 - **Merge Node (合併節點)**: 將來自不同分支的控制流合併。 - **Fork Node (分叉節點)**: 將行為分成多個並行或並發的活動流。 - **Join Node (匯合節點)**: 將平行的活動流合併成一條。 - **Object (物件)**: 被操作的對象,通常顯示在活動圖的某條線中。 - **Final Node (終止節點)**: 終止活動中所有的控制流。 - **Swimlane (泳道)**: 用於在活動圖中將由相同角色執行的活動分組或分成單一線程。 - **Order Processing (訂單處理)**: 用活動圖表示的訂單處理流程。 - **Parallel Flow (並行流)**: 在活動圖中並行執行的活動流程。 - **Delivery Method (交付方式)**: 活動圖中用來決定發貨方法的步驟。 - **Invoice Processing (發票處理)**: 訂單處理流程中的一個並行活動。 - **Student Enrollment (學生註冊)**: 學生註冊程序的活動圖。 - **Registration Form (註冊表單)**: 學生註冊時需要填寫的表單。 - **Decision Point (決策點)**: 活動圖中決定後續流程的條件判斷節點。 - **Onboarding (入職流程)**: 對新客戶的入職流程,通常用活動圖表示。 - **Follow-up Letter (跟進信件)**: 客戶會議後由銷售人員發出的信件。 - **Swimlane Diagram (泳道圖)**: 活動圖的變體,將活動按角色或責任分組。 - **Salesperson (銷售人員)**: 負責組織會議並與客戶跟進的角色。 - **Consultant (顧問)**: 負責準備演示文稿、主持會議並起草合同的角色。 - **Secretary (秘書)**: 負責準備會議室等後勤支持的角色。 - **State Machine Diagram (狀態機圖)**: 用來顯示實體的各種狀態以及如何對事件做出反應並進行狀態轉換,描述物件的狀態依賴性行為。 - **State (狀態)**: 物件生命週期中的一個狀態,滿足某些條件或執行特定操作,或者等待某事件的發生。 - **Event (事件)**: 在時空中分配的重大發生,可能觸發狀態轉換。 - **Guard Condition (守衛條件)**: 在狀態轉換觸發事件發生後評估的布林條件,用來決定是否進行轉換。 - **Transition (轉換)**: 兩個狀態之間的關係,表明當事件發生並且條件滿足時,物件從一個狀態進入另一個狀態。 - **Action (動作)**: 可執行的原子計算,改變模型的狀態或返回一個值。 - **Initial State (初始狀態)**: 由實心圓表示,代表狀態機的起點。 - **Final State (終止狀態)**: 由同心圓表示,代表狀態機的終點,系統終止。 - **Signal Event (信號事件)**: 對應於異步訊息或信號的到達。 - **Call Event (調用事件)**: 對應於操作的程序調用。 - **Time Event (時間事件)**: 在指定時間過後發生的事件。 - **Change Event (變更事件)**: 當指定條件滿足時發生的事件。 - **Automatic Transition (自動轉換)**: 無需事件或動作的狀態轉換。 - **Entry Action (進入動作)**: 物件進入指定狀態時執行的動作。 - **Exit Action (退出動作)**: 物件離開狀態時執行的動作。 - **Composite State (複合狀態)**: 包含子狀態的狀態,子狀態可嵌套至多層。 - **Substate (子狀態)**: 複合狀態中的一部分,用來簡化複雜的狀態圖。 - **Concurrent Substates (並行子狀態)**: 當活動包含並行子活動時,使用的多個同時進行的狀態。 - **Fork (分叉)**: 開始並行子狀態時,將行為分成多個並行流程的節點。 - **Join (匯合)**: 合併多個並行流程,通常用來結束並行子狀態。 - **History State (歷史狀態)**: 當狀態機重新進入複合狀態時,允許它進入離開前最後活動的子狀態,由圓圈內帶有 "H" 字母表示。 - UML序列圖:用於表示對象間互動的動態模型,顯示操作的執行過程。 - 互動圖:描述對象之間的交互關係,通常以時間為縱軸,對象為橫軸。 - 角色(Actor):與系統互動的實體,可以是用戶、設備或其他系統。 - 生命線(Lifeline):表示參與者在互動中的存在,顯示時間的推移。 - 活動(Activation):顯示參與者執行操作的期間,通常以細長矩形表示。 - 消息(Message):用於呼叫程序或執行操作的通信。 - 同步消息:客戶端發送消息並等待回應,通常以填滿的箭頭表示。 - 異步消息:客戶端發送消息後不等待回應,通常以空心箭頭表示。 - 返回消息:表示從接收者到發送者的信息傳遞,通常標示為虛線。 - 自消息(Self Message):參與者向自己發送的消息。 - 創建消息(Create Message):表示創建新參與者的消息,箭頭指向新參與者的矩形。 - 銷毀消息(Destroy Message):表示參與者被銷毀,通常以大叉表示。 - 註釋(Note):附加的說明或信息,對模型沒有語義影響。 - 控制焦點(Focus of Control):表示參與者執行操作的時間段,顯示為細長矩形。 - 組合片段(Combined Fragment):表示在序列圖中進行的多重互動。 - 替代片段(Alt):表示多個選擇中的一個執行,類似條件語句。 - 條件片段(Opt):僅在條件為真時執行的消息片段。 - 並行處理(Parallel):同時處理的消息,通過虛線分隔。 - 循環(Loop):用於表示循環操作的片段。 - 早期終止(Break):根據條件提前終止消息處理的片段。 - 重要(Critical):在某些片段內,消息處理期間不允許其他消息處理。 - 通訊圖(Communication Diagram):互動圖的子類型,顯示對象間的消息傳遞。 - 協作圖(Collaboration Diagram):通訊圖的前身,用於表示對象與消息的交互。 - 對象圖(Object Diagram):靜態模型,顯示對象及其關係。 - 使用案例(Use Case):描述系統與外部角色交互的操作流程。 - 角色(Actor):參與使用案例或操作的實體,如用戶或系統。 - 消息(Message):對象間傳遞的操作或方法呼叫。 - 序列號(Sequence Number):消息的順序編號,用於指示消息的執行順序。 - 客戶對象(Client Object):發送消息的對象,調用供應對象的方法。 - 供應對象(Supplier Object):接收消息的對象,提供被調用的方法。 - 鏈接(Link):對象之間的連接,顯示其可以相互傳遞消息。 - 自消息(Self Message):對象向自己發送的消息,通常以循環圖示表示。 - 控制焦點(Control Focus):表示元素執行操作的時間段,通常通過消息嵌套編號來表示。 - 嵌套消息(Nested Message):在父消息內部執行的消息,具有父消息的序列號加小數點後的數字。 - 交易(Transaction):對象之間進行操作的過程,可能包括消息的傳遞和數據庫更新。 - 信賴圖(Reliability Diagram):通訊圖的一種格式,描述對象間的交互及消息傳遞。 - 互動概述圖(Interaction Overview Diagram):展示控制流程的高層次抽象,表示不同圖之間的活動流程。 - 活動圖(Activity Diagram):以圖形方式表示活動和流程控制的動態行為。 - 序列圖(Sequence Diagram):顯示對象之間消息交互的時序圖。 - 初始節點(Initial Node):表示流程的起點。 - 決策節點(Decision Node):根據條件選擇不同路徑的節點。 - 分支節點(Fork Node):將單一流程分成多個平行流程。 - 合併節點(Join Node):將多個平行流程合併為單一路徑。 - 活動終止節點(Activity Final Node):表示流程結束的節點。 - 互動圖標記(SD):用於表示內嵌的序列圖。 - 互動使用(Interaction Use):標記重複使用的互動,簡化大型或複雜的序列圖。 - 交互約束(Interaction Constraint):對條件進行限制,指示只有在條件為真時才會執行相應互動。 - 參照節點(Ref Node):參照外部定義的互動,便於重用。 - 合約終止(Contract Termination):根據條件,如試用期結束後未完成工作,合約將終止。 - 碼鎖互動(Code Lock Interaction):表示與門鎖交互的流程,如輸入有效或無效的PIN碼。 - 決策節點(Decision Node):依據PIN碼是否正確決定後續操作。 - 門解鎖(Door Unlocking):表示輸入正確PIN碼後解鎖門的互動。 - 酒店房間預訂(Hotel Room Reservation):表示預訂過程中的步驟,如選擇房型、日期和結帳。 - 預訂重定向(Redirect):如果無房可訂,重定向回選擇其他日期或房間的互動。 - 結帳流程(Checkout Process):確認預訂成功的步驟。 - 時序圖(Timing Diagram):UML互動圖,顯示對象狀態變化的時間間隔。 - 生命線(Lifeline):代表互動中的個別參與者,通常水平排列以從左至右閱讀。 - 狀態時間線(State Timeline):顯示元素在不同時間點的有效狀態。 - 時間軸(Timeline):顯示經過的時間,通常標記在x軸。 - 狀態變更(State Change):垂直的狀態變更,表示生命線從一個狀態切換到另一個狀態。 - 事件(Event):觸發狀態變更的外部刺激,如消息或請求。 - 刺激(Stimulus):引起系統狀態變更的事件,可能是消息接收或時間推移。 - 值時間線(Value Timeline):顯示元素的值隨時間變化,類似於狀態時間線。 - 持續時間約束(Duration Constraint):限制對象在某狀態或值影響下的持續時間。 - 相對時間戳(Relative Timestamp):標記在特定時間點發生的事件,常用變量名稱標示。 - 時間限制事件(Time-Limited Event):指定某狀態或值轉換必須在特定時間點發生。 - 消息(Message):從一個對象發送到另一個對象的訊息,顯示傳輸時間。 - 系統狀態(System State):模型中對象的當前狀態,與生命線和消息互動相關。 - 狀態生命線(State Lifeline):顯示元素狀態隨時間的變化。 - 值生命線(Value Lifeline):顯示元素值隨時間的變化。 - 持續時間(Duration):元素維持在某一狀態或值的時間長度。 - 事件觸發變更(Event-Triggered Change):由外部事件或消息導致的狀態或值變更。 - 相對時間標記(Relative Time Marker):用於標記相對時間點的變量。 - 序列圖(Sequence Diagram):顯示對象間的消息順序,需與時序圖一致。 - 狀態圖(State Diagram):顯示對象在不同條件下的狀態轉換,與時序圖一致。