「構造化プログラミング」の版間の差分
削除された内容 追加された内容
Baudanbau20 (会話 | 投稿記録) m "Template:" を含むテンプレート呼び出し |
|||
2行目:
{{プログラミング・パラダイム}}
'''構造化プログラミング'''(こうぞうかプログラミング、{{lang-en-short|''structured programming''}})とは、[[コンピュータプログラム]]上での処理の流れを明瞭かつ平易化
このプログラミング手法の普及に貢献したのは、
なお、1969年の論文の内容はプログラムの構造設計に関するものであり、
== 制御構造
{{main|ミルズの構造化プログラミング}}[[制御構造]](''control structures'')とは、
上述の「プログラム部分」とは命令コード(''instruction code'')のまとまりを意味しており、サブプログラム(''subprogram'')と総称されている。サブプログラムとは、[[ステートメント]](''statement'')[[コードブロック]](''code block'')[[サブルーチン]](''subroutine'')の総称である。ステートメントは命令コードの一行を意味する。コードブロックは一行以上のステートメントをまとめたものである。サブルーチンは一行以上のステートメントまたは一個以上のコードブロックを内包する。サブプログラムは直列状または入れ子状に配置される。その実行順序を決定するものが制御構造であり、以下の三つがある。
#'''順次'''(''sequence'')サブプログラムを順々に実行する。
15 ⟶ 17行目:
#'''反復'''(''repetition'')条件式が導出した特定の状態の間、サブプログラムを繰り返し実行する。
<br />[[ファイル:Structured_program_patterns.png|中央|サムネイル|700x700ピクセル|順次、選択、反復の描写図(青はNSダイアグラム、緑はフローチャート)]]
<br />'''サブルーチン'''(''subroutine'')は一定量の命令コードを任意の定義名で抽象化し、その実装内容を分離したものである。コードブロックとサブルーチンは相互再帰の関係にある。コードブロックの中のステートメントからサブルーチンが呼び出され、そのサブルーチンの中にもまたコードブロックとステートメントがあるといった具合である。サブルーチンはその終点に達すると復帰(''return'')されて、呼び出したステートメントの次の行に制御が移る。また終点前の任意の位置でも復帰できる。
制御構造の登場は1960年公開のプログラミング言語「[[ALGOL|ALGOL60]]」まで遡る事ができる。1966年に[[コラド・
== 歴史 ==
構造化プログラミングの誕生は、1960年代から浮上した[[ソフトウェア危機]]問題と密接に結びついている。ソフトウェア危機とはコンピュータ性能の進化に伴うソフトウェア要求度の高まりが、プログラムサイズの際限無い肥大化と複雑化を招き、近いうちに現実的な期間内でのプログラム開発が不可能になるだろうとする悲観的予測である{{#tag:ref|[[ソフトウェア危機]]の始まりと構造化プログラミングの歴史について<ref name="the_science_of_programming"/>の第23章に詳しい。|group="注釈"}}。実際に
1968年、計算機科学者[[エドガー・ダイクストラ]]の[[Association for Computing Machinery|ACM]]機関紙への投書「Go To Statement Considered Harmful<ref name="go_to_statement_considered_harmful">{{Cite journal|id={{citeseerx|10.1.1.132.875}} |author=E. Dijkstra |authorlink=エドガー・ダイクストラ |title=Go To Statement Considered Harmful |journal=Communications of the ACM |volume=11 |issue= 3 |year=1968 |pages= 147-148 }}</ref>」は、その物議を醸す題名でソフトウェア界隈にいわゆるgoto文論争を巻き起こ
ダイクストラとは別に、1970年代初期の産業プログラム分野では制御構造(''control structures'')を基軸に据えた[[フローチャート]]設計技法が導入されていた。[[IBM|IBM社]]の上席研究員[[ハーラン・ミルズ]]は制御構造を重視し、[[ニューヨーク・タイムズ|ニューヨークタイムズ社]]のニュースアーカイブシステム構築のプロジェクトで大きな成功を収めていた。順次・選択・反復の制御構造は、IBM社のプログラミング規範をまとめたImproved Programming Technologies通称「IPT」に採用され、後に同社の技術セミナーなどを通して広く流布されるようになった<ref name="program_design_chap6sec2">山崎利治, "構造的プログラミング", ''プログラムの設計'', 共立出版, 1990, pp.113-142. </ref><ref name="tamai_40years_se">{{cite|url=http://www.graco.c.u-tokyo.ac.jp/~tamai/pub/40yearsSE.pdf|format=PDF|author=玉井哲雄|title=ソフトウェア工学の40年|journal=情報処理|volume=49|number=7|year=2008|pages=777-784|naid=110006830060}}</ref>。
後年、ダイクストラは自身が作った構造化プログラミングという言葉に不快感を示して避けるようになった<ref name="three_days_with_dijkstra">中山晴康, "ダイクストラ教授との3日間", ''bit'', Vol.9, Issue 1, 1977, pp.7-9, 共立出版. </ref>。この言葉を作った時、彼はプログラミングが手工芸から科学へ発展することを期待していた<ref name="also_speech_dijkstra" />。しかし構造化プログラミングという言葉は実利を求めるために使われるようになった<ref name="three_days_with_dijkstra" />。次のような逸話がある。ソフトウェア技術者[[エドワード・ヨードン]]の事務所にセミナー依頼の電話がかかってきた。プロジェクトメンバー全員に構造化プログラミングを1日で叩きこんで欲しいという内容である。それが終わったらプロジェクト期間を半分にするという。その理由は「構造化プログラミングは生産性を2倍にするという触れ込みですから」であった<ref name="managing_the_structured_techniques">Edward Nash Yourdon, ''構造化手法によるソフトウェア開発'', 黒田純一郎, 渡部研一 訳, 日経BP社, 1987. </ref>。
32 ⟶ 34行目:
「Structured Programming」という用語自体を生み出したのは計算機科学者[[エドガー・ダイクストラ]]であり、1969年のNATOソフトウェア工学会議で発表された論文が初出とされている。彼は2001年のノートで自分が作り出した「構造化プログラミング」という用語は結局異なる解釈で持ち去られてしまったと述べている<ref>{{Cite web|url=https://www.cs.utexas.edu/users/EWD/transcriptions/EWD13xx/EWD1308.html|title=What led to “Notes on Structured Programming”|accessdate=2020-1|publisher=}}</ref>。
ダイクストラが提唱した構造化プログラミングは、[[正当性 (計算機科学)|プログラム正当性]][[プログラム検証|検証]]技術の確立を主な目的にして構想された数々のプログラム設計理論の複合体である。遅くとも1967年からその構想は始められていた。1968年の[[goto文]]に依存しないシーケンスの制御、1969年の[[トップダウン設計とボトムアップ設計|トップダウン設計]]、[[抽象化 (計算機科学)|抽象化]]、[[モジュール化]]、共同詳細化から始まり、1972年には
=== 1968年の投書「goto文は有害」 ===
|