構造化プログラミング(structured programming)
順次・選択・繰返しの3つだけで処理を組み立てる書き方。どこへでも飛べる書き方をやめる。
もう少し詳しい説明
構造化プログラミングは、処理の組み立て方を3つの形だけに限るという考え方です。この3つを基本構造と呼びます。
| 基本構造 | すること | 書くときに使うもの |
|---|---|---|
| 順次 | 上から順に実行する | (とくに無い。並べて書くだけ) |
| 選択 | 条件によって、どちらかの道へ進む | if 文、switch 文 |
| 繰返し | 条件を満たすあいだ、同じ処理をくり返す | for 文、while 文 |
この3つは、プログラムだけの話ではありません。料理のレシピも、同じ3つでできています。
- 順次 …「材料を切る → 炒める → 味を付ける」。書かれた順にやる
- 選択 …「辛いのが苦手なら、唐辛子を抜く」。条件によって、やることが分かれる
- 繰返し …「とろみが付くまで混ぜる」。条件を満たすまで、同じことをくり返す
プログラムで使う if(選択)や for(繰返し)も、やっていることはこれと同じです。新しい考え方を覚える話ではなく、もともとある3つの形に名前が付いているだけだと思ってください。
この3つだけで、どんな処理でも書けます。 言い換えると、ほかの書き方は要りません。
なぜ3つに限るのか
昔のプログラムには、どこへでも飛べる命令(goto文)がありました。飛び先を自由に書けるので、短く書こうとすると処理が行ったり来たりします。
困るのは、書いた後です。
- どこからこの行へ来るのか、全部の飛び先を探さないと分からない
- 一部を直すと、思わぬところから飛んできて壊れる
- 動かす順番が目で追えないので、読むのに時間がかかる
3つの形に限ると、処理のまとまりが入口1つ・出口1つになります。中で何をしていても、外から見れば「上から入って下から出る」箱です。箱を並べただけの形になるので、上から下へ読めば順番が分かるようになります。
入口1つ・出口1つが効いてくる場面
まとまりが箱になっていると、その箱だけを取り替えられます。中を書き直しても、入口と出口が同じなら、外側に影響しません。
ホワイトボックステストでも効きます。通り道が限られているので、どこを通る場合を試せば足りるかを数えられます。どこへでも飛べる書き方では、通り道の数が膨れ上がって数え切れません。
構造化言語とは
3つの基本構造を書きやすいように文法として用意した言語を、構造化言語と呼ぶことがあります。if や while がそれにあたります。
いまの高級言語(人が読み書きしやすい形で書くプログラム言語。Java、Python、C言語など)は、ほぼすべてこの形を備えています。わざわざ構造化言語と呼ぶ必要がないほど当たり前になったので、言葉としては試験で見かける程度です。
goto文自体も、多くの言語に残ってはいます。禁じられているのではなく、使わずに書けるようになったため、使う理由がなくなりました。
分割して、独立させる
構造化プログラミングには、もう1つの柱があります。大きな処理を小さなまとまりに分けることです。モジュール(プログラムを機能ごとに分けた、ひとかたまりの部品)分割と呼びます。
分けるときに目指すのは、まとまりの中は結び付きが強く、まとまりどうしの結び付きは弱いという形です。
- 結び付きが強いまとまり … 1つの目的のことだけをしている
- 結び付きが弱い関係 … やり取りするのは引数(呼ぶときに渡す値)と戻り値(呼ばれた側が返す値)だけで、相手の中身を知らない
こうしておくと、1か所の修正が他へ波及しません。どこを直せばよいかが分かる状態こそが、構造化の狙いです。
オブジェクト指向との関係
構造化プログラミングは処理の分け方を整えました。しかし、データのほうは整理されないままでした。
どのまとまりからも触れるデータが残っていると、値がおかしくなったときに、どこが書き換えたのかを全部調べることになります。
ここに手を入れたのがオブジェクト指向です。データと、そのデータを扱う処理を1つにまとめ、外から直接触らせないようにしました。構造化を否定したのではなく、分け方の単位を変えたという関係です。
試験ではこう出る
科目A(旧・午前)で出ます。いちばん多いのは、基本構造の3つを選ばせる問題です。「順次・選択・繰返し」で確定します。
次に多いのが、モジュール分割の良し悪しを問う問題です。応用情報では、まとまりの中の結び付きの強さ(強度・凝集度)と、まとまりどうしの結び付きの弱さ(結合度)を、段階に分けて答えさせる形まで出ます。中は強く、外とは弱くが良い、という向きだけは取り違えないでください。
goto文については、「使うと保守が難しくなる」という向きで出ます。禁止されているから使わないのではなく、追えなくなるから使わないという理由のほうが問われます。
関連する用語
- オブジェクト指向
- データと処理をひとまとめにする考え方。構造化の次に出てきた、分け方の工夫
- プログラム言語
- 機械語・アセンブリ言語・高級言語の段。3つの基本構造は高級言語に取り入れられていった
- ホワイトボックステスト
- プログラムの通り道を網羅するテスト。通り道が限られているほど、網羅しやすくなる
- 要件定義
- 何を作るかを決める工程。分け方の良し悪しは、ここで決めたまとまりに引きずられる
ミニクイズ
構造化プログラミングで用いる基本構造の組合せはどれか。
正解は 1番:順次・選択・繰返し
構造化プログラミングは、処理を上から順に行う順次、条件で道を分ける選択、同じ処理を繰り返す繰返しの3つだけで組み立てる書き方です。この3つがあれば、どんな処理でも書けることが分かっています。入力・処理・出力はプログラムの働きを大づかみに分けた言い方で、制御の組み立て方の話ではありません。カプセル化・継承・多相性はオブジェクト指向の3つの柱で、構造化プログラミングの次に出てきた別の考え方です。
この分野をまとめて解く → アルゴリズムとプログラミングのミニテスト(全44問)
最終更新:2026-10-09