日々のつれづれ

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

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

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

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

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

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

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

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

ホットケーキレシピを描きなおす ... 焼き加減をチェック、繰り返し、判定

ということで、改めて fork構文 を使ってホットケーキを焼いてみる。
焼く時は焼き加減を見ながら、裏面が焼けたら、裏返す。

ただ、このレシピは

  • 裏面が焼ける -> 裏返す
  • 裏面が焼けない -> 焼けるまで待つ -> 裏返す

と状態が完了するまで再帰的に繰り返すループになっている。

ベータ版で下から上につなぎたいときは 繰り返し になる。そして、繰り返しには 後判定前判定 がある。

後判定

repeat と repeat while ではさむ。その間が条件成立まで繰り返す行動。repeat while の後ろに判定条件を書いて($\dots$)で囲う。判定条件の後ろに 「is ($\dots$)」とつけると、判定条件を 満たさないとき のラベルを追記できる。

repeat
  :判定条件が成立するまで実施すること;
repeat while (判定条件を()で囲う) is (判定結果、Noとか)

前判定

while と end while ではさむ。その間が条件成立まで繰り返す行動。while の後ろに判定条件を書いて($\dots$)で囲う。判定条件の後ろに 「is ($\dots$)」とつけると、判定条件を 満たさないとき のラベルを追記できる。end while の後ろに 「is ($\dots$)」とつけると、判定条件を 満たしたとき のラベルを追記できる。

while (判定条件を()で囲う) is (条件のラベル、Noとか)
  :判定条件が成立するまで実施すること;
end while (条件のラベル、Yesとか)
@startuml
title ホットケーキミックスの準備_repeat構文とwhile構文
start
fork
  fork
    :ボウルにAをふるい入れる;
    :泡立て器で混ぜる;
  fork again
    :別のボウルに卵を割りほぐす;
    :別のボウルに牛乳を加える;
    :卵と牛乳を混ぜる;
  end fork
  :混ぜ合わせた卵と牛乳をAに加える;
  :泡立て器で粉っぽさがなくなるまで混ぜる;
  :生地を作る;
  :生地をおたま1杯とる;
fork again
  fork
    :キッチンペーパーに油を染み込ませる;
    :フライパンに油を塗る;
    :フライパンを熱する;
  fork again
    :ふきんを濡らし置く;
  end fork
:ぬれたふきんの上にフライパンを置いて熱を取る;
:再び弱火にかける;
end fork
:生地を上からフライパンにの中心に落とす\n(こうすると丸い形になる);
repeat
:待つ;
repeat while (3分経過) is (No)
:表面を見る;
while (プツプツと穴がでる) is (No)
:待つ;
end while (Yes)
:生地を裏返す;
stop
@enduml

f:id:myopomme:20190714222511p:plain

注意点

  • repeat は while より結合点があるので一つ多くなる。
  • repeat も while も判定がダイヤモンドでなくヘキサゴンになる。
  • repeatの再帰先の結合点がダイヤモンドになる。