# Lld - 循序圖

循序圖（Sequence Diagram）是統一建模語言（UML）中的一種圖形化表示方法，用於描述系統中對象之間的動態互動。它著重於描述物件之間訊息傳遞的時間順序，以時間為縱軸，物件為橫軸，清楚地展示了物件如何互動以完成特定的使用案例或場景。循序圖常用於詳細設計階段，幫助開發團隊理解和驗證系統的行為。

循序圖的主要目的是幫助開發者和設計者理解系統中對象之間的互動過程，並作為系統設計和實現的工具。它可以用於需求分析、系統設計、測試案例設計和文檔編寫等階段。

### 循序圖的基本元素

1. **物件 (Object)**：代表系統中的一個實例，以垂直的生命線 (Lifeline) 表示。生命線是一條垂直的虛線，物件的名稱位於生命線的頂端，通常使用 `物件名稱:類別名稱` 的格式表示，如果物件名稱不重要，也可以只寫類別名稱。
    
    * **範例：** `user:User`、`orderProcessor:OrderProcessor`、`:ShoppingCart`。
        
2. **訊息 (Message)**：代表物件之間傳遞的訊息，以箭頭表示。箭頭的方向表示訊息的傳遞方向。訊息可以包含參數和回傳值。
    
    * **同步訊息 (Synchronous Message)：** 發送者發送訊息後會等待接收者回覆，才會繼續執行。以實心箭頭表示。
        
    * **非同步訊息 (Asynchronous Message)：** 發送者發送訊息後不會等待接收者回覆，會繼續執行。以開放箭頭表示。
        
    * **回覆訊息 (Return Message)：** 表示方法的回傳值，以虛線箭頭表示。
        
3. **啟動方塊 (Activation Box/Focus of Control)**：表示物件執行操作的時間段，是一個覆蓋在生命線上的矩形。啟動方塊的長度表示物件執行操作的時間長短。
    
4. **物件生命週期 (Object Lifeline)**：生命線的起始和結束可以表示物件的創建和銷毀。
    
    * **物件創建 (Object Creation)：** 以指向物件生命線的箭頭表示。
        
    * **物件銷毀 (Object Destruction)：** 以生命線底端的「X」符號表示。
        

### **循序圖的用途**

* **詳細描述物件之間的互動：** 循序圖可以清楚地展示物件如何互動以完成特定的功能或場景。
    
* **驗證系統設計的正確性：** 透過循序圖，可以檢驗系統的設計是否合理，是否存在潛在的問題。
    
* **程式碼設計的參考：** 循序圖可以作為程式碼設計的參考，幫助開發人員理解物件之間的訊息傳遞和方法調用。
    
* **測試案例的基礎：** 循序圖可以作為測試案例的基礎，幫助測試人員設計測試場景和驗證系統的行為。
    

### **循序圖的注意事項**

* **著重於時間順序：** 循序圖的核心是描述訊息傳遞的時間順序，因此箭頭的方向和位置非常重要。
    
* **保持圖表的簡潔和清晰：** 避免在一個圖中包含過多的物件和訊息，可以將複雜的場景分解成多個較小的圖表。
    
* **搭配使用案例圖和類別圖使用：** 循序圖通常會搭配使用案例圖和類別圖使用，以更全面地描述系統的行為和結構。
    

### 循序圖實踐

1. **明確定義場景和目的：**
    
    * **針對特定的使用案例或場景繪製：** 循序圖應該針對特定的使用案例或場景繪製，而不是試圖用一張圖涵蓋所有可能的互動。
        
    * **明確圖表的目的：** 在繪製之前，先確定圖表要表達的重點，例如：展示某個功能的運作流程、分析某個效能瓶頸。
        
2. **選擇適當的物件：**
    
    * **只包含必要的物件：** 只包含參與互動的物件，避免包含過多的物件，使圖表變得複雜難懂。
        
    * **使用清晰的物件名稱：** 使用清晰、簡潔的物件名稱，例如 `user:User`、`order:Order`，清楚地表達物件的類別和角色。
        
    * **考慮物件的生命週期：** 如果物件的創建和銷毀是場景的重要部分，則應該在圖中明確表示。
        
3. **正確使用訊息：**
    
    * **使用清晰的訊息名稱：** 使用動詞或動詞片語描述訊息，例如 `placeOrder()`、`checkInventory()`，清楚地表達訊息的意圖。
        
    * **區分同步和非同步訊息：** 正確使用實心箭頭 (同步訊息) 和開放箭頭 (非同步訊息)，準確表達訊息的傳遞方式。
        
    * **標示訊息的參數和回傳值：** 如果訊息有參數或回傳值，應該在訊息旁標示，以提供更詳細的資訊。
        
    * **避免過度使用回覆訊息：** 如果回覆訊息只是簡單地確認訊息已收到，則可以省略，以簡化圖表。
        
4. **清晰地表達時間順序：**
    
    * **從上到下表示時間流逝：** 圖表的頂部表示時間的開始，底部表示時間的結束。
        
    * **使用垂直生命線和啟動方塊：** 使用垂直生命線表示物件的存在時間，使用啟動方塊表示物件的活動時間。
        
    * **避免訊息線交叉：** 盡量避免訊息線交叉，以保持圖表的清晰易讀。
        
5. **恰當地使用組合片段：**
    
    * **使用組合片段表達複雜的控制流程：** 使用組合片段 (例如：`alt`、`opt`、`loop`、`par`、`break`) 來表達條件判斷、選擇、迴圈、並行等複雜的控制流程。
        
    * **清晰地標示組合片段的條件：** 在組合片段的左上角標示片段的類型和條件，例如 `alt [condition1]`、`loop [i=1 to 10]`。
        
6. **保持圖表的簡潔和清晰：**
    
    * **避免在一個圖中包含過多的訊息：** 如果場景過於複雜，可以將其分解成多個較小的循序圖。
        
    * **使用適當的圖表大小：** 避免圖表過大或過小，以方便閱讀和列印。
        
    * **使用一致的佈局和排版：** 使圖表易於閱讀和理解。
        
7. **與利害關係人共同審閱：**
    
    * **與開發團隊和利害關係人溝通：** 與開發團隊和利害關係人共同審閱循序圖，確保其準確地反映了系統的行為。
