## 連載:面向對象葵花寶典:思想、技巧與實踐(21) - SSD
用例圖是用來描述系統的,而SSD(系統序列圖)又是來描述用例的,oh?my?god,這不是在玩我們么?
System?Sequence?Diagram,縮寫為SSD(注意不要與SSD硬盤混淆),中文翻譯為“**系統順序圖**”,主要用于描述某個用例的某個分支場景下,外部參與者與系統的交互過程。簡單來說:SSD就是用例的可視化描述。
?
細心的朋友可能會發現,前面我們在介紹“用例方法”的時候說不需要畫圖,這里又說SSD是用來描述用例的,這不是互相沖突了么?
?
事實上并不沖突,原因在于:用例方法分析需求的時候,確實不需要圖;但用例方法分析完成后得到的用例,我們可以使用SSD讓用例更直觀一些。
?
SSD有幾點需要特別注意:
1)SSD不是標準的UML圖形:UML只有順序圖、用例圖,但是沒有一個專門的“系統順序圖”;之所以叫做“系統”順序圖,是因為這個順序圖中只有兩類對象:系統、與系統交互的對象;
2)SSD是用來描述某個用例的某個分支,而不是描述系統的結構;
3)畫SSD的時候,整個系統被當做一個黑盒,不涉及系統的分解;
4)不需要為每個用例每個分支都畫一個SSD,挑出關鍵的用例和分支即可;
?
有的朋友可能會有疑問:如何知道哪些用例的哪些分支是關鍵的呢?
?
我的答案是:你認為是關鍵的你就畫,你認為不是關鍵的你就不畫;如果你認為所有的用例都很關鍵,那么所有的用例你都畫即可,只要你不怕麻煩或者工作量太大;如果你認為所有的用例都很簡單,那么一個都不畫也可以。至于你的判斷是否正確,主要靠經驗積累,當經驗不夠的時候,也可以求助有經驗的人。
?
以POS機為例,假如我們認為POS機的正常處理流程是關鍵分支,則對應的SSD如下:
?
仔細對照SSD和POS機的用例,我們會發現SSD和用例基本上是對應的,但并不完全對應,例如:
??用例中第1步是“顧客攜帶選擇好的商品到收銀臺”,但SSD中第1步是開始交易;
??用例中“顧客將錢交給收銀員”,但SSD中并沒有對應的步驟;
??用例中最后一步是“買單完成,顧客攜帶商品和小票離開”,但SSD中最后一步是“交易結束”;
?
為什么會出現這種不對應的情況呢?
主要原因在于:用例是整個業務的流程,而SSD是站在系統的角度來描述系統與外部對象的交互,這就需要我們在畫SSD的時候做一些技巧性的處理:
??刪除系統無關的業務步驟
例如上述的“顧客將錢交給收銀員”,這個步驟和POS機沒有關系,因此無需體現,再說了,就算你想體現,你也體現不了;
??將業務語言轉換為系統語言
例如用例中是描述“顧客攜帶選擇好的商品到收銀臺”,但對應系統來說,這就意味了“交易開始”;同樣,“買單完成,顧客攜帶商品和小票離開”意味著“交易結束”。
?
有的朋友可能會認為,應該在用例分析的時候就應該詳細寫清楚。例如,“買單完成,顧客攜帶商品和小票離開,收銀員告訴POS機交易結束”。
這種想法本身沒錯,但問題在于,理想和現實總是有差距的,用例不可能那么完善,甚至有的時候用例可能都存在錯誤,如果我們自己沒有一定的分析和理解能力,完全依賴原始的用例,這樣做是不可能設計出優秀的系統的,甚至連合格的系統都可能做不到。
?
綜合上面的分析,我們可以看到,SSD雖然來源于用例,但還需要在用例的基礎上稍微加工一下,使得SSD能夠更加聚焦于“系統”這個主角。
?
最后小小吐槽一下:**用例圖是用來描述系統的,而SSD又是來描述用例的,oh?my?god,這不是在玩我們么?**
- 前言
- (1) - 程序設計思想的發展
- (2) - 面向對象語言發展歷史
- (3) - 面向過程 vs 面向對象
- (4) - 面向對象是瑞士軍刀還是一把錘子?
- (5) - 面向對象迷思:面向對象導致性能下降?
- (6) - 不要說你懂“類”
- (7) - “對象”新解
- (8) - “接口” 詳解
- (9) - “抽象類” 詳解
- (10) - “抽象” 詳解
- (11) - “封裝” 詳解
- (12) - “繼承” 詳解
- (13) - “多態” 詳解
- (14) - 面向對象開發技術流程
- (15) - 需求詳解
- (16) - 需求分析終極目的
- (17) - 需求分析518方法
- (18) - 用例分析
- (19) - 功能點提取
- (20) - 用例圖的陷阱
- (21) - SSD
- (22) - 領域模型
- (23) - 領域建模三字經
- (24) - 設計模型
- (25) - 類模型
- (26) - 類模型三板斧
- (27) - 動態模型設計
- (28) - 設計原則:內聚&耦合
- (29) - 高內聚低耦合
- (30) - SRP原則
- (31) - OCP原則
- (32) - LSP原則
- (33) - ISP原則
- (34) - DIP原則
- (35) - NOP原則
- (36) - 設計原則如何用?
- (37) - 設計模式:瑞士軍刀 or 錘子?
- (38) - 設計模式之道
- (39) - 設計原則 vs 設計模式
- (40) - DECORATOR模式
- (完)- 書籍已經出版