「構造化プログラミング」の版間の差分

削除された内容 追加された内容
編集の要約なし
1行目:
'''構造化プログラミング'''(こうぞうかプログラミング|{{lang-en-short|''structured programming''}})は、コンピュータプログラムに「構造」の考え方を導入してソフトウェアの開発効率と品質プログラムエラー向上抑制を図ったプログラミング技法である。今日の「構造化プログラミング」は一般に誤解を招く言葉になっており、以下の3つの解釈が存在している。
 
# 1969年に計算機科学者の[[エドガー・ダイクストラ|ダイクストラ]]が発表した論文<ref name="structured_programming" />と後年の関連著作で示された手法。構造化プログラミング(''structured programming'')という言葉はこれが初出となる。論文の内容はプログラムの構造設計に関するものであり、抽象から細部へのトップダウン設計、抽象データ構造と抽象ステートメントを定義するモジュール、共同詳細化といった考え方が提唱されていた。
# 1966年に計算機科学者の[[コラド・ベーム|ベーム]]とヤコピーニが発表した論文で示された手法。内容は制御フローの正規化に関するものであり、順次、選択、反復の三つの手段(と補助的なフラグのスタック)によりあらゆる制御フローを表現できると提唱し、その数学的証明が添えられていた。本来はベームとヤコピーニの証明と呼ぶべきものだが、後年に幾つか[[ハーラン・ミルズ]]事情から提案で[[構造化定理|構造化定理(''structured theorem)'']]として紹介された為にダイクストラの構造化プログラミングとの混同を招く事になった。
# 1970年代にIBM研究員兼上席プログラマーの[[ハーラン・ミルズ]]が、(1)と(2)を基にして提唱したソフトウェア開発技法。この[[ミルズの構造化プログラミング|ミルズ発案の構造化プログラミング論]]は一般に''goto-less''プログラミングとして知られている。
# IBMの{{仮リンク|ハーラン・ミルズ|en|Harlan Mills}}(Harlan Mills)の提案に由来するgoto-lessプログラミング。
 
今日の構造化プログラミングに対する一般的な認識は(3)になっている。しかし(1)の[[エドガー・ダイクストラ|ダイクストラ]]が提唱した理論が本来の意味での「構造化プログラミング」であり本稿では(1)について説明する。(2)については「'''[[構造化定理]]'''」が該当記事になる。(3)については「[[ミルズの構造化プログラミング|'''ミルズの構造化プログラミング''']]」が該当記事になる。
 
== 一般認識としての構造化プログラミングの制御構文 ==
{{独自研究|date=2020年2月|section=1}}
正確な定義をさて置くと、国内における構造化プログラミングという言葉に対して一般認識はコーディングレベルのテーマであり、的に連想されるプログラム文に概念は、ブロック単位の制御構造(''control structures'')を導入する事を意味すである。ブロックとは括弧記号またはBEGIN&ENDなどで区切られた一行以上のステートメントのかたまりであり、それぞれは直列または入れ子状に配置される。視覚的に判別しやすいブロックの起点と終点が自動的にフロージャンプの位置指定になるので、結果的に無差別ジャンプのgoto文を使わないで済むようになる。制御構造には以下の四種がある。
 
#'''順次'''(''sequence'')ステートメントを順々に処理する。
16行目:
#'''サブルーチン'''(''subroutine'')これをコールした次のステートメントに復帰(''return'')する事を前提にして対象ブロックの起点にジャンプする。終点に達すると自動的に復帰する他、任意の途中位置でも復帰できる。
 
また制御構造の補助構文は、上述のサブルーチンからの'''復帰'''(''return'')、現行反復ブロック終点の次のステートメントにジャンプする'''離脱'''(''break-out'')、現行反復ブロック終点にジャンプして結果的に起点に戻る'''中断'''(''discontinue'')の三種が標準とされる。
[[ファイル:Structured_program_patterns.png|中央|サムネイル|700x700ピクセル|順次、選択、反復の描写図(青はNSダイアグラム、緑はフローチャート)]]