科学と家事とプログラミング (python を中心に)

python 温度計測 湿度計測 DS18B20 USB9097

超構造化(06) フローチャート/データフロー図/状態遷移図

動的側面を表す3つのチャート (FC / DFD / SMD)

プログラムの動的側面を表現するチャートの代表として、 FC(フローチャート),DFD(データフロー図), SMD(状態機械図/状態遷移図) の三つを取り上げる。 いずれもノードとアークから構成された有向グラフとして表現される。 これらのチャートについて説明すると、大抵の人はあまり疑問を感じずに分かったつもりになるらしい。 状態遷移図のノードは何を表しますか?と質問すれば、ほぼ100%の人から正しく「状態」という答が返ってくるけれど、 それは、状態遷移図という名称に反応しているだけで、「状態」に関する理解が伴っているわけではない(場合が多い)。 実際に状態遷移図を書いてもらうとフローチャートのようなものが出来上がる。 通り一遍の説明では、伝わりにくいテーマだということだろう。 説明を補う試みとして、チャートが表現するものだけでなく、 それらが表現しないもの(それぞれのチャートが無視する側面)に注目して整理しなおしてみよう。

FC (flow chart)

注目する側面 / 何を表現すのか

How
処理の具体的な手順。入力が決まれば、要素処理の実行順序(処理の流れ)が決まる。

無視する側面 / 何を表現しないのか

実行される(呼び出される)タイミング。どういう条件で呼び出されるかは、上位水準で表現される。

DFD (data flow diagram)

注目する側面 / 何を表現すのか

What
処理の入出力。処理の依存関係。

無視する側面 / 何を表現しないのか

いつ実行するか、どのように実現(実装)するかについての情報は含まない。
バッファを介して直列する2つの処理の実行頻度は一般的には異なる。

SMD (state machine diagram)

注目する側面 / 何を表現すのか

When
全ての状態と、全ての可能な遷移。遷移が生起する条件。
可能性がある全ての遷移を一枚の図で表現したもの。

無視する側面 / 何を表現しないのか

FC 的な意味で処理の順序を表すものではない。
イベント列が与えられて初めて具体的な状態(とそれに付随する処理)の順番が確定する。

フローチャート(FC) と 状態機遷移図(SMD) の違い

SMD の注目する側面に示した When は、時計が示す時刻ではなくて、event が発生した や、ある状態を保っている を意味する。 状態遷移図は、状態遷移表と一対一に対応するけれど、FC には、それに対応する同種の表は存在しない。 このことは、FC と SMD の違いを端的に表している。 SMD の場合は、イベント列が与えられて初めて具体的な順番が確定する。 この違いに対する感度が理解の分かれ目かと思う。違いはわかりましたか?

それが表現しないもの?

それが表現しないもの(無視する側面)は何ですか?という質問は、理解度を確かめるうえで有効かも しれない。全体の枠組みが理解できていないと答えられない質問ということか。 横から見た様子だけでなく、上から見た時の様子もちゃんと分かっているか?あるいは逆に、横から 見たとき隠れてしまう事はなにか?みたいな。

f:id:sken20k:20180210191750j:plain