2012-06-12 70 views
4

在UML序列圖中,一個方法只能有一個返回行(至少在Astah中,我無法從一個方法中繪製兩條回線),我如何在if-else塊?如何在UML序列圖中繪製多個回報

在下面的示例中,返回行'a'結束methodX(),如何繪製返回行'b'?

String methodX(int i) { 
    if (i>0) 
    return 'a'; 
    else 
    return 'b'; 
} 

    +------------+   +------------+ 
    | Foo  |   |  Bar | 
    +-----+------+   +------+-----+ 
      |       | 
      |  methodX(i)   | 
      +-+----------------------->+-+ 
      | |      | | 
    +-----+------------------------------------+ 
    | alt | | | [i>0]     | |  | 
    +-----+ | |   a   | |  | 
    |  | |<- - - - - - - - - - - -+-+  | 
    |  | |       |  | 
    |  | |       |  | 
    +------------------------------------------+ 
    |  | | [else]     |  | 
    |  | |       |  | 
    |  | |   b    |  | 
    |  | |<- - - - - - - - - - - - | ?? | 
    |  | |       |  | 
    |  | |       |  | 
    +------------------------------------------+ 
      | |       | 
      +-+       | 
      +       + 

回答

1

問題出在你的工具上,而不是用UML。檢查出visual paradigm for UML。您可以在每個alt片段的開頭手動添加激活,並在激活結束時發送返回消息。

1

快速意見:

(1)請注意,一個類/對象可以將消息發送到本身( 「DoSomething的」), 這使得 「替代品」 更diificult到appreaciate。

(2)使用「alt」時,必須提及條件。 「alt」表示「if-then-else」,「switch-case」和來自編程語言的類似概念。

而那些句子,必須添加條件,必須添加到UML圖(「[條件]」)。 (3)在「alt」的每個條件或情況下,幾個對象之間或者自己或者沒有(只有「返回」箭頭)可能有幾條消息。

.......................................................... 
.......+---------+..............+---------+............... 
.......| Foo |..............| Bar |............... 
.......+----+----+..............+----+----+............... 
............|........................|.................... 
..........+-+-+....................+-+-+.................. 
..........| |......methodX().....| |.................. 
..........| +------------------->+ |.................. 
..........| |....................| |..DoSomething()... 
..........| |....................| +---+.............. 
..........| |....................| |...|.............. 
..........| |....................| |...|.............. 
..........| |....................| |...|.............. 
..........| |....................| |<--+.............. 
..........| |....................| |.................. 
..+-----+-------------------------------------+........... 
..|.alt.|.| |....................| |......|........... 
..+-----+-------------------------------------+........... 
..|.[option=1].....................| |......|........... 
..|.......| |....................| |......|........... 
..|.......| |....................| +---+..|........... 
..|.......| |....................| |...|..|........... 
..|.......| |....................| |...|..|........... 
..|.......| |....................| |...|..|........... 
..|.......| |....................| |<--+..|........... 
..|.......| |<-------------------+ |......|........... 
..|.......| |....................| |......|........... 
..+-----+-------------------------------------+........... 
..|.[option=2].....................| |......|........... 
..|.......| |....................| |......|........... 
..|.......| |....................| |......|..// The wide bar its kept, 
..|.......| |<-------------------+ |......|..// even if there is a 
..|.......| |....................| |......|..// previous return arrow 
..+-------------------------------------------+........... 
..|.[else]|...|....................| |......|........... 
..|.......| |....................| |......|........... 
..|.......| |....................| |......|........... 
..|.......| |<-------------------+ |......|........... 
..|.......| |....................| |......|........... 
..+-------------------------------------------+........... 
..........| |....................| |.................. 
..........+-+-+....................+-+-+.................. 
............|........................|.................... 
............|........................|.................... 
............X........................X.................... 
.......................................................... 

乾杯。

P.D.貓的任何芝士堡或金槍魚魚堡?

+0

您的答案不能解決我的問題,即如何從方法中繪製多個返回行。 doSomething()的返回行只允許指向調用它的類/對象,在示例中它是Bar而不是Foo。請使用UML工具嘗試Astah。 – aleung

+0

我省略了衛兵,使ascii圖畫清晰。 – aleung

+0

@aleung:請檢查更新。即使前面有「返回箭頭」,班級寬欄也會保留。如果一個「警衛」不是真的,那麼它被省略,並被忽略,因爲它不存在,並檢查下一個「alt」,依此類推。你的圖表,在第一個「後衛」上切出寬條。 – umlcat