前回は構造化プログラミングについて整理しました。またその前回に書きましたがこのサイトでは構造化プログラミングについては開発現場で認識されて利用されている考え方に従います。そこで今回はフローチャートと構造化チャートについて書いてみます。
フローチャートと構造化プログラミング
フローチャートについては言うまでもないでしょうが、処理の流れ(フロー)を表現する図です。フローチャートで構造化プログラミングの3要素(順次・選択・反復)を表現すると以下のようになります。(※フローチャートを書くための各種ツールもありますが、この図はExcelの図形で「イラっと」しながら自分で書きました。もし利用したい方がいらっしゃればご自由にお使い下さい。)
少し補足します。
図ではYES、NOと書きましたが、プログラミング的にはTRUE(真)とFALSE(偽)を使います。また反復構造の条件は「反復を続ける」条件です。条件を満たす間処理を反復(繰り返し)します。
このフローチャートの特徴は見て頂いての通りですが、処理の流れを矢印で書いています。そのため、特に反復の処理は反復の構造が分かりにくい部分もあります。また矢印で流れを書くので場合によっては、下から上に等にどこにでも処理(流れ)を書くことが出来ます。
つまり、フローチャートでは構造化プログラミングも表現することが出来ますが、場合によってはどのようなプログラミングでも表現出来るということです。
もちろん、フローチャートで構造化プログラミングを表現するためにいろいろと工夫もされていて今現在でもプログラミングの学習では広く利用されています。
構造化チャート
そこで、構造化プログラミングのフローを専用に表現するために開発されたのが構造化チャートです。但し企業や国によって開発されたためいろいろな記法があります。主なものは以下です。
記法:開発元
HCP:NTT
PAD:日立
SPD:NEC
YAC:富士通
HIPO:IBM
NSチャート:アメリカ
この中でここではPADを取り上げてみます。理由は以外と言えば失礼ですがいまだにネットで取り上げられていて解説があり、確かにぱっと見て分かりやすいと思ったからです。(※「いまだに」と言ったのは今現在ではオブジェクト指向のUMLもあるからと思ったからです。やはり構造化プログラミングは重要だと思いました。UMLはページ最後の補足2を参照して下さい。)
PADとは
PAD(Problem Analysis Diagram)は上でも書きましたが、日立製作所で発明された構造化チャートです。このPAD図で構造化プログラミングの3要素(順次・選択・反復)を表現してみました。以下のようになります。
ぱっと見では何だこれはと思うかもしれないですが、左側の線の上から順に処理が進んで、階層構造が右側に展開されます。当然階層構造の途中で変なところに飛んだりしないで上から下と左から右の階層構造の2次元で表現されています。
ブロックとは構造化プログラミングでは通常は「関数」という処理の単位です。何かのまとまった処理をしてその結果を返すという流れを実行します。(処理結果を返さないで処理だけする場合もあります。)やや強引な表現かもしれないですがブロックはプログラム全体を構成する部品のようなものでしょうか。
ということで構造化プログラミングを表現するにはフローチャートよりもかなり分かりやすいと思いますがいかがでしょうか。
PadToolsで作図
上記のPAD図は以下を利用して作成しました。作者様ありがとうございます。大変使いやすいと思いました。
PadTools
リリースの説明は以下です。
PadTools1.3リリース
導入は単純です。実行ファイルを一式をダウンロードしてPadTools.exeを起動すればいいです。以下のように起動されます。
左側のエリアでプログラムを書くようにテキストを書いていけば図が生成されます。書き方の詳細はドキュメントを参照して頂ければと思いますが、実際にプログラムを書く前にこれを使って整理する方法も有効かと思います。
Scratchもあります
Scratchについては以下で書きました。
Scratch Desktop版のインストールから動作確認まで
Scratch自体はプログラミング言語といえるもので実際に実行することが出来ます。ですので別にここで取り上げるのはどうかと思うのですが、Scratchも視覚的にプログラムを書くことが出来るということで処理のフローがよく見えます。
また制御ブロックには判定による分岐、繰り返しのブロックが何種類かあります。これらを順番に組み合わせていくプログラミングは構造化プログラミングそのものではないかと思います。以下のオレンジのブロックです。
そういった意味ではScratchは実際に実行出来て視覚的な理解も出来るので構造化プログラミングの勉強、実践という意味でも有効かと思います。
(補足1)構造化プログラミングとオブジェクト指向
ここまで構造化プログラミングをテーマにしていますが、今現在ではオブジェクト指向が主流でありオブジェクト指向プログラミングを勉強、習得すればいいのではということになるかもしれないですが、オブジェクト指向でのプログラミングでも構造化プログラミングは重要な要素です。オブジェクト指向でのメソッドと呼ばれる処理で実際にプログラムを書く場合でも構造化プログラミングの要素も使っています。
つまり、構造化プログラミングは古いから必要なくてオブジェクト指向だけ習得すればいいということではないです。始めに構造化プログラミングの範囲で確実に基礎を押さえつつ、オブジェクト指向でのプログラミングも徐々に習得する方法もあるかと思います。オブジェクト指向は馴染みのない単語がいくつも出てくるのでそれだけでいやになることもあります。
(補足2)UMLでのフロー表現
UMLとは、Unified Modeling Language(統一モデリング言語)の略です。言語となっていますが、オブジェクト指向設計のための表記方法です。今回取り上げた構造化チャートと違って統一されています。そのUMLの種類で処理のフローを表記をするのがアクティビティ図です。オブジェクトという概念が絡んできますが、ぱっと見ではフローチャートのような印象です。UMLではこのアクティビティ図で手続き的な流れやプログラムの制御フローを表記します。
以下は簡単な例です。クラスもオブジェクトもなければフローチャートと何も変わらない印象ですがこのような図です。
これは以下を使って書きました。テキストベースで書けるので私も納品物作成時に実際に使ったことがあります。
PlantUML
ここでは以下のWeb版で作成しました。
http://plantuml.com/plantuml/