構造化プログラミングとは、プログラムを作成する際に頭の中を整理するための手法です。プログラムとは、物事の段取りや順序のことです。「プログラム」と聞くとコンピュータープログラムのことを思い浮かべる人が多いと思いますが、他にも式典の式次第や演奏会の曲順などもプログラムと言います。
「プログラミング」とは一般的にコンピュータープログラムを作成することを言いますが、その手法はコンピューター以外のプログラムを考える際にも使えます。例えば、「これの後はこれを行う。この場合はこれ、その他の場合はこっち」などと考えることがありますね。そして、それがかなり複雑で困ることがあります。その際に、構造化プログラミングが役立ちます。
構造化プログラミングは、具体的には「順次、選択、反復」という3つの基本構造を組み合わせて物事の順序を整理します。この、“限られた基本構造に分解して組み合わせる” ことで、複雑なことが整理できるのです。つまり、構造化プログラミングの結果は「順次、選択、反復」の集合体です。そして、今存在するプログラミング言語のほとんどは、構造化プログラミングの基本構造を備えています。つまり、構造化プログラミングは、多くのプログラミング言語の共通記法なのです。ですので、構造化プログラミングが出来ていれば、プログラミング言語が変わったとしても同じ動きのプログラムを記述することが出来ます。さらには、プログラミング言語の違いだけでなく、ソフトウェア以外の段取りや作業の流れも表すことも出来ます。
複雑な段取りを考えるときに「フローチャート」を作ったことがある人もいると思います。四角形や菱形などの図形を矢印でつなげた図です。フローチャートという名前は知らなくても、やる事の順番を考える時に、洗い出した “やる事” を矢印で結んだことがあるのではないでしょうか。あれがフローチャートの原型です。
フローチャートは、図で表すことで頭の中のモヤモヤを分かりやすくすることが出来るので便利なのですが、次のような欠点があります。
欠点1:複雑になると矢印が絡み合ってわけが分からなくなる。
実際のコンピュータープログラムでは、このようにして作ったものを「スパゲッティプログラム」と言います。
欠点2:プログラミング言語でコンピュータープログラムを作成する際に分かりづらい。
プログラムは上から下へ記述しますが、フローチャートは縦横(平面的)に広がっていきます。平面の情報を直線的に(上から下へ)書き直すことはかなり面倒です。
このような理由から、多くのIT企業では、フローチャートに代わって “構造化チャート” を用いています。構造化チャートとは、先に述べた3つの基本構造を図で表す表記法のことで、企業によって様々なものが用いられています(例えば、日立はPAD、NECはSPDなど)。構造化チャートもフローチャートと同じく平面表現ですが、3つの基本構造が明確なので、簡単にプログラミング表記(上から下へ)にすることが出来ます。
つまり、コンピュータープログラムの作成は、次の様なステップで行われているのです。
①頭の中のモヤモヤを3つの基本構造で整理する → 構造化チャートで表記する。
②構造化チャート(平面表現)を、構造化プログラミング記法(上下表現)に変える。
③構造化プログラミングをもとに、プログラミング言語の記法で実際のプログラムを記述する。
まとめると、コンピュータープログラムは、次の様な段階を経て作られます。
モヤモヤ → 構造化チャート → 構造化プログラミング → プログラミング言語による記述
※ プログラムの大きさによって一部のステップを省略することがあります。
そして、構造化プログラミングまでのステップは、ソフトウェア以外においても適応することが出来ます。
構造化チャートや構造化プログラミングは、頭の中のモヤモヤを整理するための手法ですが、特に次の2つのモヤモヤを扱う際に効果的です。
・複雑な条件
・複雑な流れ
以下、これらの実例を示します。
このように、構造化チャートと構造化プログラミングを用いると、複雑なことを整理することができます。あまり複雑な例ではなかったので「フローチャートの方が分かりやすい」と思われたかも知れませんが、もっと複雑になるとフローチャートでは手に負えなくなります。そういう時は、構造化チャートを作ってみることをお勧めします。構造化チャートを説明しているサイトは多くあります。「構造化チャート NSチャート」や「構造化チャート PAD」などで検索してみてください。
プログラミング初心者は、具体的なプログラミング言語を勉強する前に構造化プログラミングを練習することをお勧めします。構造化プログラミングで “3つの基本構造” に慣れれば、プログラミング言語の文法を覚えるだけでプログラムが簡単に作れます。
構造化プログラミングは難しくありません。「順次」と「選択(IF-ELSE-ENDIF)」と「反復(DO-ENDDO)」を組み合わせるだけです。是非チャレンジしてみてください。
コメント