2009-06-05 88 views
28

我喜歡用UML圖來描述我的軟件。在大多數情況下,這些圖表是供我自己使用的,我將它們用於更多涉及代碼,交互等的部分,我將從以後能夠回顧它們中受益。是否有一個UML方法來描述線程

我發現自己做了幾種不同的方法的一件事是圖表線程。根據它們的性質,線程往往會出現在更多的代碼中,並且跟蹤它們通常是我設計文檔的主要目的。

在過去,我在序列圖中使用了一個符號來顯示新線程的創建,但回頭看一些圖表,它在對象的生命週期(哪些序列圖表適用)和線程一生。將線程合併到UML中是否有更好的方法?

+0

似乎是相同的http://stackoverflow.com/questions/1643733/how-to-illustrate-multiple-threads-in-sequence-diagram – feuGene 2012-08-06 19:23:35

回答

11

我設法生成了一個在繪製時對我有意義的圖表。基本前提是我已經用代表線程壽命的藍色方框覆蓋了代表類實例的灰色框。它讓我跟蹤的主要事情是知道當我調用某些方法時,我將執行哪個線程。

毫無疑問,有更好更直觀的方法來進行線程和類建模。對我而言,成功的標準是我自己的圖表是否能夠讓我在6個月的軌道上達到相同的理解水平。

2

我不知道一種方式,但考慮到一個線程是以Thread(或類似的)類實現的多種語言,使用序列圖似乎並不完全不合適。

最符合UML的方法可能是添加某種類型的註釋,指示'object'表示一個線程。

+1

是的,我使用之前的序列圖來描述線程同步。我只是發現另一個圖表[時序圖](http://www.visual-paradigm.com/support/documents/vpumluserguide/94/200/6715_drawingtimin.html),非常有趣。 – Felix 2013-02-20 05:34:16

0

UML最強點是描繪了靜態結構。如果你使用短暫的線程,我也看不到任何簡單的方法來繪製它們。也許你可以找到一個解決方案,把事情做一下:你爲什麼使用/需要線程?他們提供的功能是什麼?如果他們彼此交互並遵循一些(消息傳遞)API,將它們繪製爲組件可能是有意義的。

3

UML活動圖有fork和join元素來顯示並行邏輯流。

+0

活動圖通常被理解爲爲業務流程建模。我更感興趣的是對我的軟件的內部工作進行建模。不過,我明白你的觀點,活動圖的某些方面在建模軟件線程時很有用。 – sipwiz 2009-06-05 05:42:51

+1

@sipwiz:活動圖不僅僅用於業務流程。請看我的答案。 – 2013-07-29 22:07:20

9

活動,順序和狀態圖是全部顯示線程行爲的正確方法。

1st:(To vs的評論)UML中有兩套圖或建模元素,靜態結構,就像你說的那樣,還有行爲。任何書都可以幫助你理解分割,通常在內容/目錄中,另外它可以在Martin Fowler的UML第11頁上看到,在我看來,這是一個近乎事實上的開始UML的標準。

第二:(要sipwiz的問題和意見)活動圖不是通常理解的業務過程模型,它們可以被用於該然而,大多數的例子或簡單的教程會從商業的角度來看接近它。

談你的選擇模型主題:

活動圖 - 允許分叉,並通過使用BAR和用法線指定的併發性。請注意,底部的示例不是業務流程,example。大多數人可以閱讀這些,商業,管理和開發人員,但有時他們可能缺乏細節或混亂。

序列交互圖 - 在同一職位,example,你會看到序列圖讓你通過拳擊帶有標籤「相提並論」並行的行爲,以指定序列中並行的行爲,這是非常有用的讀者展示了什麼方法可以或應該並行調用,即通過不同的線程。這是我將用於詳細開發人員的方法,例如圍繞構建對象的討論。

狀態圖 - 狀態圖就像活動允許通過使用BAR和使用行進行併發一樣。

注:這些不會模擬特定線程,它的確切升降週期,因爲這是建模的實例/運行時層的一部分,如果你想澄清你的問題是什麼,我會迴應。我只是使用上面的模型之一進行建模,因爲除了MDA/UML專家之外,沒有其他人會打電話給你,而且你沒有生成正在運行的系統。

另請參閱:大多數UML書籍中都有更多詳細信息。 另外槓桿:http://www.jguru.com/faq/view.jsp?EID=56322

8

傳統的線程已被描繪爲使用Petri網的圖示。羅馬馬丁有an article在UML多線程,你可能會發現有用的。

更新 - 只記得你可以用活動圖表中的叉表示線程 - 我已經設法到find something that explains this

很難找到Petri網的任何免費教程,但我知道Petri網對建模併發性很好,所以我Google'd「生產者 - 消費者Petri網」(我最喜歡的線程)和found this

我也發現了一些幻燈片顯示Petri網modeling a Semaphore

+2

您的「解釋此事的東西」鏈接現在已被破壞 – 2014-07-31 18:02:43

2

UML由UML上層結構定義,您可以在這裏找到它http://www.omg.org/spec/UML。 如果您閱讀規範,則會發現UML類可以處於活動狀態。一個活動類是一個類的元屬性isActive設置爲true。它也有不同的描述。 活動類的對象實例自動執行「分類器行爲」。至於任何行爲,您可以通過您在其中等待異步信號(AcceptEventActions)並調用方法(CallOperationAction)或其他行爲(CallBehaviorActions)的活動來定義它。這就是活動對象如何在UML中建模。你只需要閱讀UML規範。

1

活動圖將使用分叉和連接來模擬軟件的內部工作,以表示線程。要找出究竟是如何正確建模,請參閱康拉德博克的優秀系列文章。 Here是涵蓋分叉和連接的文章,但您應該按照鏈接回到本系列的第一篇文章,以瞭解如何使用「有色Petri網」進行正確建模。這不是你的想法(這很容易)!

有一個在OMG一個新的,在處理標準名爲Alf語言,它提供了更方便的表面記法活動圖,是用於代表代碼。從規格:

動作語言的一個主要目的是充當表面符號爲正在使用 UML的通常圖形符號主要爲更廣泛的模型內指定可執行 行爲。例如,這可能包括類的操作方法或狀態機上的轉換效果行爲。

對於程序員來說,你可能不會比Alf更直觀。它會完美轉換成UML活動圖。

相關問題