構造化プログラミングは、プログラミングのなかでも重要なテーマ。
といっても難しそうなので、カレー作りを例として、わかりやすく学んでみましょう。
構造化プログラミングの3つの要素
プログラミングは、以下の3つの要素ですべて組み立てられる、というものです。
- 順次 順番に実行する。
- 選択 条件により分岐する。
- 反復 条件により繰り返す。
まずは、この3つの組み合わせでプログラムができるとだけ、覚えてください。
カレーを作ろう
プログラミングと料理は似ている、と言われます。手順立てて行ったりするところですね。
みんな大好き、カレーを作りましょう。以下はバーモントカレーのレシピです。
- 炒める 鍋で具材を炒める
- 水を入れ煮込む あくを取り、具材が柔らかくなるまで煮込む
- ルウを入れる ルウを割り入れて溶かす
- 煮込む 時々かきまぜながら煮込む
はちみつを入れる場合、2.で入れる
これを、構造化プログラミングしてみます。
カレー作りで構造化プログラミング
プログラミング言語 “スクラッチ”
プログラミング言語として、初心者にもやさしい、スクラッチ を使いましょう。
スクラッチは、子供も学びやすいビジュアルプログラミング言語です。
このように、ブロックを組み合わせてプログラミングします。
「順次処理」まずは順番に並べよう
レシピにそってプログラミングしましょう。まずレシピの内容を並べます。
このブロック1つ1つが、順次処理です。単純に、順番に処理するということですね。
さて、おかしいですね。はちみつは煮込む前に入れないといけません。直しましょう。
順次処理は、その名のごとく、順番通りに並べないといけません。
「選択処理」条件によってやることを変えよう
はちみつは、あればカレーがおいしくなりますが、なくてもできます。ここをもうすこし細かくしましょう。
「はちみつがあるか」という条件によって分岐します。これが選択処理です。
「反復処理」同じことを繰り返そう
水を入れ煮込む、も、もう少し細かくしましょう。あくを取る、を表現します。
あくって、どんなタイミングで取ればいいのでしょう?1分ごとに取ることにしましょうか(やりすぎ?)。
あくを取る→1分待つ→あくを取る→1分待つ→…という手順になりますね。
同じ手順が何回も出てきて、無駄な感じ。整理しましょう。
15分煮込むなら、あくを取る→1分待つ、を、15回繰り返せばよいですね。
このように同じことを繰り返すのが、反復処理です。
カレープログラム完成!
これで、カレーの構造化プログラミングが完成しました!
「順次」「選択」「反復」の組み合わせでプログラミングが出来ました。このプログラムを動かせば、我が家のカレーが、いつでも作れます。
モジュール化でさらにプログラミングしよう
カレー作りをモジュールにしよう
さて、カレープログラムができたわけですが、まだ続きがあります。
この「カレーを作る」は、1つの順次処理としてまとめることができます。
このように、「順次」「選択」「反復」のかたまりを1ブロックにすることを、モジュール化するといいます。
この「カレーを作る」モジュールを使うと、「料理を作る」プログラムができます。
ルーがあったらカレーを作ろう、なければポトフにしようかな、というように。
さらに、うえで作った「料理を作る」もモジュール化できます。これを使うと「夜ごはんを食べる」プログラムもできるわけです。
モジュール化=抽象化
モジュール化する、ということは、中身を一言で言い換えること、とも言えます。「元気があれば料理、なければ外食」を、一言で「夜ご飯を食べる」と言い換えることです。
「順次」「選択」「反復」を、「一言で言うと〇〇」に置き換える、これを「抽象化する」といいます。
逆に、「ポトフを作る」の手順を、「順次」「選択」「反復」の組み合わせに分解することもできるわけです。
この抽象化と分解を考えていくことで、いろいろなプログラミングができます。
まとめ
構造化プログラミングの神髄は、こうなります。
- 「順次」「選択」「反復」の組み合わせで、処理を作る
- その処理を、大きなかたまり(1つの順次処理)に抽象化する
- それを組み合わせて、より大きな処理を作る
この考えかたを使えば、とても大規模なプログラミングを行うこともできるのです。
実際のプログラミングは、開発が進むたびにとても大きなものになっていきます。構造化プログラミングの考え方を身につけましょう。
コメント