================================================ :program:`graphviz` による遷移状態図とクラス図 ================================================ アルゴリズムの記述にはフローチャートがよく使われるが、 複雑な処理を表現するには **統一モデリング言語(UML)** が良く使われる。 UMLで定義される図にはクラス図のようなシステムの構造を表す構造図と、 状態線維図などの動作や変化を表す振る舞い図に分類される。 それぞれ :program:`graphviz` でどのように表現されるか見てみよう。 状態遷移図と状態遷移表 ----------------------- 状態遷移: ある状態から別の状態へ変化すること 状態遷移図 ~~~~~~~~~~~~ 状態遷移例:: 初期状態(黒丸)は状態Aであり、イベントAが起こると、 アクションAを実行して状態Bに遷移する。 状態Bの時にイベントAが発生しても状態Bのままであるが、 イベントBが起こるとアクションBを実行して状態Aに戻る。 状態Aの時に終了(黒二重丸)できる。 .. graphviz:: :caption: 状態遷移図 digraph G1 { graph [size="8,4"]; node [shape=circle,style=filled,fillcolor=black] s ; node [shape=doublecircle] e ; node [shape=box,style=rounded] a b ; a [label="状態A"]; b [label="状態B"]; s [label=""]; e [label=""]; rankdir = TB; s->a; a->e; a->b [label="イベントA/アクションA"]; b->a [label="イベントB/アクションB"]; b->b [label="イベントA"]; {rank=same;a;b} } .. code-block:: none :caption: 状態遷移図 digraph G1 { graph [size="8,4"]; node [shape=circle,style=filled,fillcolor=black] s ; node [shape=doublecircle] e ; node [shape=box,style=rounded] a b ; a [label="状態A"]; b [label="状態B"]; s [label=""]; e [label=""]; rankdir = TB; s->a; a->e; a->b [label="イベントA/アクションA"]; b->a [label="イベントB/アクションB"]; b->b [label="イベントA"]; {rank=same;a;b} } 状態遷移表 ~~~~~~~~~~~ 例:: * 状態AでイベントAが発生すると、アクションAを実行し状態Bに遷移する。 * 状態AでイベントBが発生することはありえない * 状態BでイベントAが発生するとなにもしない * 状態BでイベントBが発生すると、アクションBを実行し、状態Aに遷移する .. table:: 状態遷移表 +------------+-------------------+----------------+ | | 状態A     |状態B | +============+===================+================+ | | アクションA | | | イベント A +-------------------+ | | | 状態B | | | |(遷移先の状態) | | +------------+-------------------+----------------+ | | | アクションB | |イベントB | +----------------+ | | | 状態A  | | | |(遷移先の状態)| +------------+-------------------+----------------+ クラス図 ~~~~~~~~~~~