日々のつれづれ

不惑をむかえ戸惑いを隠せない男性の独り言

UMLを練習する、アクティビティー図 ベータ版-14

アクティビティー図 その2

アクティビティー図を描いて残念だったこと

  • 行動の位置(ノード)が自動配置の反面、思った位置にいってくれない
  • 行動をつなぐ線・矢印(エッジ)がくねくねの曲線
  • 条件分岐で、ダイヤモンドの外に条件が記載され、条件を見分けにくい
  • 行動は1つだけ、2つ以上の同じ行動を使えない

もちろん、良い機能もたくさんあります。ただ、慣れてくると、贅沢になって、もっと機能が欲しくなるって気持ちです。

アクティビティー図(ベータ版)

plantUMLの公式に、アクティビティー図(ベータ版) の記述がある。どうも、アクティビティー図は過渡期のようで、新しい構文を提唱しているっぽい。

落穂ひろい

ホットケーキレシピで扱えなかった構文について、追記します。

スイムレーンの続き

スイムレーンで 並列処理(fork) 判定(repeat/while) if構文 パーティション(partition) を組み合わせるときは注意がある。

  • 並列処理(fork) はスイムレーンを跨げない
  • 判定(repeat/while)fork を跨げない
  • if構文 の条件と接続点は同じレーンに入る
  • if構文 の接続点が戻ってもレーンの位置情報は変わらない
  • パーティション(partition) はスイムレーンを跨げない
@startuml
title スイムレーンでの他の構文の使い方
|1つ目のスイムレーン|
start
repeat
  :ノードa1;
repeatwhile (条件A1) is (同じスイムレーンでループ)
fork
  :ノードa2;
  -> 同じレーン内の返りのコメント\n出る;
forkagain
  :ノードa3;
  |2つ目のスイムレーン|
  -> forkはレーンを跨げない;
  |2つ目のスイムレーン|
  if (条件B) then (Yes)
    :ノードb1;
  else (No)
  -> 条件の分岐先は別のレーンに描ける;
    |3つ目のスイムレーン|
    :ノードc1;
    -> 条件文は同じレーンで結合する;
  endif
  -> 結合位置に戻っても、レーンの位置は前の情報を保持している;
  :ノードc2;
  if (条件C) then (Yes)
    :ノードc3;
    -> レーンを跨ぐ返りのコメント\n出ない;
  else (No)
    :ノードc4;
    end
  endif
end fork
partition レーンを跨ぐwhile {
  |1つ目のスイムレーン|
  while (条件A2)
  -> ループはレーンを跨げる;
    |2つ目のスイムレーン|
    :ノードb2;
    -> レーンを跨ぐ返りのコメント\n出ない;
  end while (whileを別のレーンに抜けられる)
}
|2つ目のスイムレーン|
:ノードb3;
partition レーンを跨がないwhile {
  |1つ目のスイムレーン|
  while (条件A3)
  -> ループはレーンを跨げる;
    :ノードa3;
    -> 同じレーン内の返りのコメント\n出る;
  end while (whileを別のレーンに抜けられる)
}
|2つ目のスイムレーン|
:ノードb4;
stop
@enduml

f:id:myopomme:20190714230427p:plain

このとき

  • ノードa2からforkの矢印コメント $\rightarrow$ 出る
  • ノードc3からforkの矢印コメント $\rightarrow$ 出ない
  • ノードb2から条件A2へのループの矢印コメント $\rightarrow$ 出ない
  • ノードa3から条件A3へのループの矢印コメント $\rightarrow$ 出る

と、スイムレーンを跨ぐとき、コメントが出ない。
1つ目のスイムレーンを start の前に書くことや、forkpartition がスイムレーンを跨げないことを考えると、スイムレーンは一番上位の制約で、他はその中で制御される仕様なのかもしれない。