構造 こうぞう 化 か プログラミング( こうぞうかプログラミング 、( 英 えい : structured programming )は、コンピュータプログラム の処理 しょり 手順 てじゅん の明瞭 めいりょう 化 か 、平易 へいい 化 か 、判読 はんどく 性 せい 向上 こうじょう を目的 もくてき にしたプログラミング 手法 しゅほう である。一般 いっぱん 的 てき には順接 じゅんせつ 、分岐 ぶんき 、反復 はんぷく の三種 さんしゅ の制御 せいぎょ 構造 こうぞう (control structures)によって処理 しょり の流 なが れを記述 きじゅつ することと認識 にんしき されている[1] [2] 。制御 せいぎょ 構造 こうぞう は制御 せいぎょ 構文 こうぶん 、構造 こうぞう 化 か 文 ぶん (structured statement)、制御 せいぎょ フロー文 ぶん (control flow statement)とも呼 よ ばれる。また、プログラムを任意 にんい に分割 ぶんかつ した部分 ぶぶん プログラム(サブルーチン とコードブロック )の階層 かいそう 的 てき な組 く み合 あ わせによるプログラムの構造 こうぞう 化 か も指 さ している。
このプログラミング手法 しゅほう の普及 ふきゅう に貢献 こうけん したのは、1968年 ねん の計算 けいさん 機 き 科学 かがく 者 しゃ エドガー・ダイクストラ によるACM 機関 きかん 紙 し への投書 とうしょ 「Go To Statement Considered Harmful」と言 い われている。しかし同 おな じくダイクストラが、1969年度 ねんど NATO ソフトウェア工学 こうがく 会議 かいぎ で発表 はっぴょう した論文 ろんぶん 「Structured Programming」との混同 こんどう を招 まね いてこちら側 がわ の名称 めいしょう で知 し られるようになった。現在 げんざい に到 いた るまでの国内外 こくないがい の多 おお くの書籍 しょせき で、構造 こうぞう 化 か プログラミングは制御 せいぎょ 構文 こうぶん に関 かん する説明 せつめい に結 むす び付 つ けられている。なお、1969年 ねん の論文 ろんぶん 内容 ないよう はプログラム正当 せいとう 性 せい 検証 けんしょう のための設計 せっけい 技法 ぎほう を扱 あつか っており、トップダウン設計 せっけい 、段階 だんかい 的 てき な抽象 ちゅうしょう 化 か 、階層 かいそう 的 てき なモジュール化 か 、抽象 ちゅうしょう データ構造 こうぞう と抽象 ちゅうしょう ステートメントを連携 れんけい させる共同 きょうどう 詳細 しょうさい 化 か といった考 かんが え方 かた が提唱 ていしょう されていた[3] 。
制御 せいぎょ 構文 こうぶん (control structures)とは、goto文 ぶん によるフロー分岐 ぶんき やループ表現 ひょうげん を、if文 ぶん の選択 せんたく 構文 こうぶん やwhile文 ぶん の反復 はんぷく 構文 こうぶん に置 お き換 か えるためのプログラム記法 きほう を意味 いみ している。ラベル先 さき にジャンプするというgoto文 ぶん の機能 きのう を、if文 ぶん やwhile文 ぶん は「特定 とくてい のコード群 ぐん だけを実行 じっこう する」という概念 がいねん に置 お き換 か えている。goto文 ぶん を用 もち いた制御 せいぎょ フローは、(1)データの照合 しょうごう /比較 ひかく の結果 けっか にしたがって次 つぎ の実行 じっこう コード群 ぐん を選択 せんたく するパターンと、(2)データの照合 しょうごう /比較 ひかく の結果 けっか が任意 にんい 条件 じょうけん を満 み たしているならば実行 じっこう コード群 ぐん を反復 はんぷく するパターンの、二 に 通 とお りに集約 しゅうやく されることが経験 けいけん 則 そく で知 し られていたので、これを専用 せんよう の記号 きごう で形式 けいしき 化 か したのが制御 せいぎょ 構文 こうぶん であった。
コード群 ぐん とは命令 めいれい コード(instruction code)のまとまりであり、構造 こうぞう 化 か 定理 ていり では部分 ぶぶん プログラム(subprogram)と定義 ていぎ されている。部分 ぶぶん プログラムはステートメント (statement)コードブロック (code block)サブルーチン (subroutine)の総称 そうしょう である。ステートメントは命令 めいれい コードの一 いち 行 ぎょう を意味 いみ する。コードブロックは一 いち 行 ぎょう 以上 いじょう のステートメントをまとめたものである。サブルーチンは一 いち 行 ぎょう 以上 いじょう のステートメントまたは一 いち 個 こ 以上 いじょう のコードブロックを内包 ないほう している。部分 ぶぶん プログラムは直列 ちょくれつ 状 じょう または入 い れ子 こ 状 じょう に配置 はいち される。その実行 じっこう 順序 じゅんじょ を決定 けってい するものが制御 せいぎょ 構文 こうぶん であり、以下 いか の三 みっ つがある。
順次 じゅんじ (sequence)部分 ぶぶん プログラムを順々 じゅんじゅん に実行 じっこう する。
選択 せんたく (selection)条件 じょうけん 式 しき が導出 どうしゅつ した状態 じょうたい に従 したが い、次 つぎ に実行 じっこう する部分 ぶぶん プログラムを選択 せんたく して分岐 ぶんき する。
反復 はんぷく (repetition)条件 じょうけん 式 しき が導出 どうしゅつ した特定 とくてい の状態 じょうたい の間 あいだ 、部分 ぶぶん プログラムを繰 く り返 かえ し実行 じっこう する。
順次 じゅんじ 、選択 せんたく 、反復 はんぷく の描写 びょうしゃ 図 ず (青 あお はNSダイアグラム、緑 みどり はフローチャート)
制御 せいぎょ 構造 こうぞう の導入 どうにゅう は1960年 ねん 公開 こうかい の「ALGOL60 」まで遡 さかのぼ れるが、当時 とうじ 広 ひろ く使 つか われていたFORTRAN やCOBOL での正式 せいしき 導入 どうにゅう は1977年 ねん 以降 いこう だったので、多 おお くの開発 かいはつ 現場 げんば では馴染 なじ みのないものであった。1966年 ねん にコラド・ベーム らが「順次 じゅんじ ・選択 せんたく ・反復 はんぷく 」のフロー万能 ばんのう 性 せい を数学 すうがく 的 てき に証明 しょうめい したが、それはあくまで論理 ろんり 的 てき 研究 けんきゅう だった。それを参考 さんこう にしたとされるダイクストラ の1968年 ねん の投書 とうしょ 「goto文 ぶん は有害 ゆうがい 」はいわゆるgoto文 ぶん 論争 ろんそう を引 ひ き起 お こしたが、同時 どうじ に制御 せいぎょ 構造 こうぞう への関心 かんしん を大 おお きく高 たか めた。1970年代 ねんだい 、goto文 ぶん が多用 たよう される開発 かいはつ 現場 げんば での制御 せいぎょ 構造 こうぞう の普及 ふきゅう を重視 じゅうし していたIBM 社 しゃ のハーラン・ミルズ は、1969年 ねん にダイクストラが発表 はっぴょう していた論文 ろんぶん 題名 だいめい から知名度 ちめいど を得 え ていた「構造 こうぞう 化 か プログラミング」を自社 じしゃ の技術 ぎじゅつ セミナーマーケティングに活用 かつよう するために、上述 じょうじゅつ のベームらの数学 すうがく 的 てき 証明 しょうめい を「構造 こうぞう 化 か 定理 ていり 」という独自 どくじ のタイトルで復刻 ふっこく させて、彼 かれ らが勧 すす めるフローチャート 制御 せいぎょ 構造 こうぞう の裏付 うらづ け理論 りろん にした。こうして構造 こうぞう 化 か プログラミングは、IBM社 しゃ が提唱 ていしょう する構造 こうぞう 化 か 定理 ていり を論拠 ろんきょ にした制御 せいぎょ 構造 こうぞう を用 もち いるプログラミング手法 しゅほう として世間 せけん に定着 ていちゃく することになった。
制御 せいぎょ 構造 こうぞう を導入 どうにゅう したプログラミング言語 げんご を指 さ しての「構造 こうぞう 化 か 言語 げんご 」というワードが浮上 ふじょう したのは1970年代 ねんだい からであり、これは当時 とうじ のgoto文 ぶん 中心 ちゅうしん だったFORTRAN やCOBOL やBASIC を意識 いしき してそれと線引 せんひ きするための用語 ようご として存在 そんざい していた。
構造 こうぞう 化 か 設計 せっけい [ 編集 へんしゅう ]
構造 こうぞう 化 か 設計 せっけい の一 いち 例 れい
上述 じょうじゅつ の制御 せいぎょ 構文 こうぶん をコーディング視点 してん の下流 かりゅう 工程 こうてい テクニックとすると、構造 こうぞう 化 か 設計 せっけい (structured design)はプログラムデザイン視点 してん の上流 じょうりゅう 工程 こうてい テクニックであり、こちらも構造 こうぞう 化 か プログラミングと呼 よ ばれるものである。構造 こうぞう 化 か 設計 せっけい では、サブルーチン (subroutine)をまとめたサブルーチン複 ふく 合体 がったい と、データ要素 ようそ をまとめたデータ構造 こうぞう (data structure)が主要 しゅよう な役割 やくわり を果 は たしている。段階 だんかい 的 てき 詳細 しょうさい 化 か に則 のっと ったサブルーチン複 ふく 合体 がったい の階層 かいそう 的 てき な組 く み合 あ わせと、それに必要 ひつよう なデータ構造 こうぞう を連携 れんけい させてプログラム全体 ぜんたい を構築 こうちく するというテクニックが構造 こうぞう 化 か 設計 せっけい である。サブルーチン複 ふく 合体 がったい はプログラムモジュール (program module)とも読 よ み替 か えられ、モジュール凝集 ぎょうしゅう 度 ど と結合 けつごう 度 ど もここから生 う まれている。
1974年 ねん 頃 ごろ から当初 とうしょ はIBM社 しゃ が主導 しゅどう する形 かたち で、いずれも構造 こうぞう 化 か (structured)が接頭 せっとう 辞 じ につく数々 かずかず のテクニックが発表 はっぴょう されるようになり、1975年 ねん 発表 はっぴょう 「ジャクソンの構造 こうぞう 化 か プログラミング -Jackson structured programming(JSP)-」、1975年 ねん 発表 はっぴょう 「構造 こうぞう 化 か 設計 せっけい -structured design(SD)-」、1978年 ねん 発表 はっぴょう 「構造 こうぞう 化 か 分析 ぶんせき -structured analysis(SA)-」、1981年 ねん 発表 はっぴょう 「構造 こうぞう 化 か 分析 ぶんせき 設計 せっけい 技法 ぎほう -structured analysis and design technique(SADT)-」、1980年代 ねんだい 発表 はっぴょう 「構造 こうぞう 化 か 体系 たいけい 分析 ぶんせき 設計 せっけい 手法 しゅほう -structured systems analysis and design method(SSADM)-」、1989年 ねん 発表 はっぴょう 「モダン構造 こうぞう 化 か 分析 ぶんせき -modern structured analysis-」などが広 ひろ く普及 ふきゅう している。著名 ちょめい な専門 せんもん 家 か としては、グレンフォード・マイヤーズ、ラリー・コンスタンティン、マイケル・ジャクソン、エドワード・ヨードン 、トム・デマルコ などがいる。これらは「構造 こうぞう 化 か 開発 かいはつ 」と総称 そうしょう されるようになり、1980年代 ねんだい までのソフトウェア開発 かいはつ の主流 しゅりゅう になった。
この構造 こうぞう 化 か 設計 せっけい と、ダイクストラ の構造 こうぞう 化 か プログラミングの違 ちが いは、前者 ぜんしゃ がサブルーチン複 ふく 合体 がったい とデータ構造 こうぞう の連携 れんけい を中心 ちゅうしん にしたテクニックであるのに対 たい して、後者 こうしゃ は専属 せんぞく サブルーチンを通 とお して扱 あつか われる抽象 ちゅうしょう データ構造 こうぞう を中心 ちゅうしん にしたテクニックであるという点 てん である。後者 こうしゃ では、段階 だんかい 的 てき に抽象 ちゅうしょう 化 か した各 かく モジュールの階層 かいそう 的 てき な連結 れんけつ と、抽象 ちゅうしょう データ構造 こうぞう と抽象 ちゅうしょう ステートメントを連携 れんけい させる共同 きょうどう 詳細 しょうさい 化 か といった考 かんが え方 かた が提示 ていじ されており、この詳細 しょうさい については後 こう 節 ふし で述 の べられる。ダイクストラが提唱 ていしょう した抽象 ちゅうしょう (abstraction)指向 しこう の構造 こうぞう 化 か は、その思想 しそう の前衛 ぜんえい 性 せい から1970年代 ねんだい を通 とお して理解 りかい を得 え られることはなく、発案 はつあん 者 しゃ 本来 ほんらい の構造 こうぞう 化 か プログラミングは上流 じょうりゅう 工程 こうてい 視点 してん からも普及 ふきゅう することはなかった。
第 だい 一幕 ひとまく
構造 こうぞう 化 か プログラミングの誕生 たんじょう は、1960年代 ねんだい から浮上 ふじょう したソフトウェア危機 きき 問題 もんだい と密接 みっせつ に結 むす びついている。ソフトウェア危機 きき とはコンピュータ性能 せいのう の進化 しんか に伴 ともな うソフトウェア要求 ようきゅう 度 ど の高 たか まりが、プログラムサイズの際限 さいげん 無 な い肥大 ひだい 化 か と複雑 ふくざつ 化 か を招 まね き、近 ちか いうちに現実 げんじつ 的 てき な期間 きかん 内 ない でのプログラム開発 かいはつ が不可能 ふかのう になるだろうとする悲観 ひかん 的 てき 予測 よそく である[注釈 ちゅうしゃく 1] 。実際 じっさい に1960年代 ねんだい のソフトウェア開発 かいはつ 現場 げんば では仕様 しよう 不一致 ふいっち 、納期 のうき 遅 おく れ、予算 よさん 超過 ちょうか といった事態 じたい が頻発 ひんぱつ していた[4] 。当時 とうじ のプログラムはgoto文 ぶん を多用 たよう するタコ足 あし フローチャート によるものが大半 たいはん だったので[5] 、すぐにスパゲティコード 化 か することが多 おお く、複雑 ふくざつ 怪奇 かいき なジャングルフロー図 ず と化 か しているものも珍 めずら しくなかった[6] 。1959年 ねん に計算 けいさん 機 き 科学 かがく 者 しゃ ハインツ・ツェマネク は、goto文 ぶん の多用 たよう に警鐘 けいしょう を鳴 な らす論文 ろんぶん を発表 はっぴょう している。1960年 ねん に公開 こうかい されたプログラミング言語 げんご 「ALGOL60 」は、BEGINとENDで区切 くぎ られたコードブロック を制御 せいぎょ するIF選択 せんたく 文 ぶん とFOR反 はん 復文 ふくぶん を初 はじ めて提供 ていきょう していた。計算 けいさん 機 き 科学 かがく 者 しゃ ニクラウス・ヴィルト はこれらを構造 こうぞう 化 か 文 ぶん (structured statement)と呼 よ んだ[7] 。1966年 ねん に計算 けいさん 機 き 科学 かがく 者 しゃ コラド・ベーム とジュゼッペ・ヤコピーニは、あらゆるフローチャートは順次 じゅんじ ・選択 せんたく ・反復 はんぷく の組 く み合 あ わせで表現 ひょうげん できることの数学 すうがく 的 てき 証明 しょうめい をし、これはベームとヤコピーニの証明 しょうめい と呼 よ ばれた[8] 。計算 けいさん 機 き 科学 かがく 者 しゃ ドナルド・クヌース は、これらの潮流 ちょうりゅう を構造 こうぞう 化 か 文 ぶん の第 だい 一幕 ひとまく と定義 ていぎ した[6] 。
第 だい 二 に 幕 まく
1968年 ねん 、計算 けいさん 機 き 科学 かがく 者 しゃ エドガー・ダイクストラ のACM 機関 きかん 紙 し への投書 とうしょ 「Go To Statement Considered Harmful -goto文 ぶん は有害 ゆうがい -[9] 」は、その物議 ぶつぎ を醸 かも す題名 だいめい でコンピュータプログラミング界隈 かいわい にいわゆるgoto文 ぶん 論争 ろんそう を巻 ま き起 お こした[10] [11] 。これは構造 こうぞう 化 か 文 ぶん の認知 にんち 度 ど を高 たか めることに貢献 こうけん している[12] 。これを構造 こうぞう 化 か 文 ぶん の第 だい 二 に 幕 まく と定義 ていぎ したクヌースは「第 だい 二 に 幕 まく はそのムーブメントの大 おお きさによって、多 おお くの人 ひと にとっての第 だい 一幕 ひとまく になった」と評 ひょう した[13] 。1968年度 ねんど 開催 かいさい のNATO ソフトウェア工学 こうがく 会議 かいぎ でソフトウェア危機 きき は正式 せいしき な用語 ようご になり[14] 、産業 さんぎょう 界 かい と計算 けいさん 機 き 科学 かがく 共通 きょうつう の懸案 けんあん 事項 じこう になった[15] 。翌 よく 69年度 ねんど 開催 かいさい の同 どう 会議 かいぎ においてダイクストラは「Structured Programming -構造 こうぞう 化 か プログラミング-[3] 」と題 だい した論文 ろんぶん を寄稿 きこう した。これが「構造 こうぞう 化 か プログラミング」の正式 せいしき な初出 しょしゅつ である。その論旨 ろんし はソフトウェア危機 きき 解決 かいけつ 策 さく としてのソフトウェア正当 せいとう 性 せい 検証 けんしょう 技術 ぎじゅつ の確立 かくりつ であり、プログラムを適切 てきせつ に分割 ぶんかつ し抽象 ちゅうしょう 化 か して良 よ く構造 こうぞう 化 か (well-structured)しておけば、プログラムサイズ拡大 かくだい に関係 かんけい なくその正当 せいとう 性 せい を証明 しょうめい できるとしていた。その具体 ぐたい 的 てき 手法 しゅほう としてはトップダウン設計 せっけい 、段階 だんかい 的 てき な抽象 ちゅうしょう 化 か 、階層 かいそう 的 てき なモジュール化 か 、抽象 ちゅうしょう データ構造 こうぞう と抽象 ちゅうしょう ステートメントを連携 れんけい させる共同 きょうどう 詳細 しょうさい 化 か などが挙 あ げられていた。goto文 ぶん 抑制 よくせい など構造 こうぞう 化 か 文 ぶん に関 かん する事柄 ことがら は数 すう 行 ぎょう に留 とど まっていたが[注釈 ちゅうしゃく 2] 、goto文 ぶん 論争 ろんそう に熱心 ねっしん なプログラマの間 あいだ ではこの論文 ろんぶん を昨年 さくねん の投書 とうしょ の延長 えんちょう と見 み る向 む きも少 すく なからず存在 そんざい していた。後年 こうねん のダイクストラは構造 こうぞう 化 か プログラミングという言葉 ことば を作 つく った際 さい に二 ふた つの失敗 しっぱい をしたと述 の べている。商標 しょうひょう 登録 とうろく しなかった事 こと と、厳密 げんみつ な定義 ていぎ 化 か を避 さ けた事 こと である[16] [15] 。
第 だい 三 さん 幕 まく
1960年代 ねんだい からの構造 こうぞう 化 か 文 ぶん 第 だい 一幕 ひとまく の潮流 ちょうりゅう は、産業 さんぎょう プログラム界隈 かいわい にも影響 えいきょう を及 およ ぼしており、こちらでは制御 せいぎょ 構造 こうぞう (control structures)などの名義 めいぎ でフローチャート に導入 どうにゅう されていた。産業 さんぎょう コンピュータ市場 いちば の最大手 さいおおて であるIBM社 しゃ の上席 じょうせき 研究 けんきゅう 員 いん ハーラン・ミルズ は制御 せいぎょ 構造 こうぞう を重視 じゅうし し、ニューヨーク・タイムズ社 しゃ のニュースアーカイブシステム構築 こうちく プロジェクトで大 おお きな成功 せいこう を収 おさ めた。順次 じゅんじ ・選択 せんたく ・反復 はんぷく の制御 せいぎょ 構造 こうぞう は、IBM社 しゃ のプログラミング規範 きはん をまとめたImproved Programming Technologies通称 つうしょう 「IPT」に採用 さいよう され、後 のち に同社 どうしゃ の技術 ぎじゅつ セミナーなどを通 とお して広 ひろ く流布 るふ されるようになった[17] [18] 。1970~71年 ねん 頃 ごろ から計算 けいさん 機 き 科学 かがく 者 しゃ デビッド・ハレルは、前述 ぜんじゅつ のベームとヤコピーニの数学 すうがく 的 てき 証明 しょうめい に「Structure theorem -構造 こうぞう 化 か 定理 ていり -」 という全 まった く新 あたら しい題名 だいめい を付 つ けて主 おも に産業 さんぎょう ソフトウェア開発 かいはつ 界隈 かいわい で紹介 しょうかい した[19] [注釈 ちゅうしゃく 3] 。ハレルはこの命名 めいめい が実 じつ はハーラン・ミルズの提案 ていあん であったことを後 のち に明 あ かしている[20] 。構造 こうぞう 化 か 定理 ていり はIPTの合理 ごうり 性 せい を裏付 うらづ ける根拠 こんきょ として盛 さか んに引用 いんよう されたので、構造 こうぞう 化 か (Structured)プログラミングと言 い えばIBM社 しゃ の発明 はつめい 品 ひん だと信 しん じるプログラマたちも続出 ぞくしゅつ した[21] 。IBM社 しゃ が1974年 ねん 頃 ごろ から発表 はっぴょう するようになった所属 しょぞく 研究 けんきゅう 員 いん たちによるプログラム開発 かいはつ 方法 ほうほう 論 ろん の数々 かずかず にも構造 こうぞう 化 か (Structured)の接頭 せっとう 辞 じ が付 つ けられていたが、それらは抽象 ちゅうしょう 化 か を重視 じゅうし するダイクストラの構造 こうぞう 化 か とは異 こと なり、サブルーチン複 ふく 合体 がったい とデータ構造 こうぞう を適切 てきせつ に連携 れんけい させるための構造 こうぞう 化 か であった。その違 ちが いを指摘 してき して本来 ほんらい のダイクストラ方式 ほうしき を改 あらた めて紹介 しょうかい する動 うご きもあったが、抽象 ちゅうしょう 化 か 指向 しこう のダイクストラ理論 りろん は産業 さんぎょう 界 かい ではむしろ不人気 ふにんき でさえあった[22] [23] [24] 。クヌースの言葉 ことば を借 か りれば、構造 こうぞう 化 か 文 ぶん の第 だい 三 さん 幕 まく はIBM社 しゃ とハーラン・ミルズ がプロモートした制御 せいぎょ 構造 こうぞう の舞台 ぶたい になり、構造 こうぞう 化 か プログラミングに対 たい する世間 せけん 一般 いっぱん の認識 にんしき はこちらの方 ほう で定着 ていちゃく するようになった。
終幕 しゅうまく
後年 こうねん 、ダイクストラは自身 じしん が作 つく った構造 こうぞう 化 か プログラミングという言葉 ことば に不快 ふかい 感 かん を示 しめ して避 さ けるようになった[25] 。この言葉 ことば を作 つく った時 とき 、彼 かれ はプログラミングが手工 しゅこう 芸 げい から科学 かがく へ発展 はってん することを期待 きたい していた[16] 。しかし構造 こうぞう 化 か プログラミングという言葉 ことば は実利 じつり を求 もと めるために使 つか われるようになった[25] 。次 つぎ のような逸話 いつわ がある。構造 こうぞう 化 か 開発 かいはつ の第一人者 だいいちにんしゃ エドワード・ヨードン の事務所 じむしょ にセミナー依頼 いらい の電話 でんわ がかかってきた。プロジェクトメンバー全員 ぜんいん に構造 こうぞう 化 か プログラミングを1日 にち で叩 はた きこんで欲 ほ しいという内容 ないよう である。それが終 お わったらプロジェクト期間 きかん を半分 はんぶん にするという。その理由 りゆう は「構造 こうぞう 化 か プログラミングは生産 せいさん 性 せい を2倍 ばい にするという話 はなし ですから」であった[26] 。
ダイクストラの構造 こうぞう 化 か プログラミング [ 編集 へんしゅう ]
「Structured Programming」という言葉 ことば を作 つく ったのは計算 けいさん 機 き 科学 かがく 者 しゃ エドガー・ダイクストラ であり、1969年 ねん のNATOソフトウェア工学 こうがく 会議 かいぎ で発表 はっぴょう された論文 ろんぶん が初出 しょしゅつ とされている。彼 かれ は2001年 ねん のノートで自分 じぶん が作 つく り出 だ した「構造 こうぞう 化 か プログラミング」という用語 ようご は結局 けっきょく 異 こと なる解釈 かいしゃく で持 も ち去 さ られてしまったと述 の べている[27] 。
ダイクストラが提唱 ていしょう した構造 こうぞう 化 か プログラミングは、プログラム正当 せいとう 性 せい 検証 けんしょう 技術 ぎじゅつ の確立 かくりつ を原点 げんてん にして構想 こうそう された数々 かずかず のプログラム開発 かいはつ 理論 りろん の複 ふく 合体 がったい である。遅 おそ くとも1967年 ねん からその構想 こうそう は始 はじ められていた。1968年 ねん のgoto文 ぶん に依存 いぞん しないシーケンスの制御 せいぎょ 、1969年 ねん のトップダウン設計 せっけい 、抽象 ちゅうしょう 化 か 、モジュール化 か 、共同 きょうどう 詳細 しょうさい 化 か から始 はじ まり、1972年 ねん には抽象 ちゅうしょう データ構造 こうぞう 、情報 じょうほう 隠蔽 いんぺい 、階層 かいそう 的 てき プログラム構造 こうぞう といった考 かんが えも取 と り上 あ げられていた[28] [22] [17] 。1972年 ねん の共著 きょうちょ は、ダイクストラの第 だい 一 いち 章 しょう ・構造 こうぞう 化 か プログラミングから始 はじ まり、オルヨハン・ダール の第 だい 三 さん 章 しょう ・階層 かいそう 的 てき プログラム構造 こうぞう で締 し め括 くく られている。ダール はオブジェクト指向 しこう プログラミング言語 げんご の草創 そうそう Simula67 の開発 かいはつ 者 しゃ である。
1968年 ねん の投書 とうしょ 「goto文 ぶん は有害 ゆうがい 」 [ 編集 へんしゅう ]
1968年 ねん のACM 機関 きかん 紙 し への投書 とうしょ 「Go To Statement Considered Harmful[9] 」は、そのセンセーショナルなタイトルで当時 とうじ のプログラマの間 あいだ に大 おお きな論争 ろんそう を巻 ま き起 お こした。その要約 ようやく は次 つぎ の通 とお りである。
プログラマの仕事 しごと は正 ただ しいプログラムを作 つく り上 あ げた時 とき に終結 しゅうけつ し、コンピュータにそのプログラム実行 じっこう が委託 いたく されるとプログラマの手 て を離 はな れて、コンピュータ内 ない の動作 どうさ 形態 けいたい であるプロセスに作 つく り替 か えられることになる。
私 わたし たち人間 にんげん の能力 のうりょく は、静的 せいてき なプログラムの内容 ないよう を把握 はあく するのには向 む いているが、コンピュータ内 ない で逐一 ちくいち 変化 へんか していく動的 どうてき なプロセスの状態 じょうたい を把握 はあく することには向 む いていない。従 したが って私 わたし たちは静的 せいてき なプログラムと動的 どうてき なプロセスの間 あいだ にあるギャップを埋 う めなければならない。
そのためには、動的 どうてき なプロセスの動態 どうたい 指標 しひょう (dynamic index)と正確 せいかく に対応 たいおう できる静的 せいてき なプログラムの文体 ぶんたい 指標 しひょう (textual index)の表現 ひょうげん が必要 ひつよう になる。goto先 さき ラベルはその要求 ようきゅう を満 み たしていない。「if B then A」「if B then A1 else A2」の選択 せんたく 節 ぶし や「while B repeat A」「repeat A until B」の反復 はんぷく 節 ぶし の方 ほう が適 てき している。
gotoとラベルを用 もち いた選択 せんたく 文 ぶん と反 はん 復文 ふくぶん の記述 きじゅつ では、状態 じょうたい 判定 はんてい とジャンプが個々 ここ に並 なら べられるので、これはプログラムの混乱 こんらん の原因 げんいん になる。特 とく にラベルの多用 たよう は取 と り除 のぞ かれるべきであり、それに伴 ともな ってgotoの使用 しよう 数 すう も削減 さくげん される。
ただし、前述 ぜんじゅつ の節 ふし (clause、選択 せんたく 節 ぶし と反 はん 節 ふし 復 ふく )使用 しよう の徹底 てってい であらゆる必要 ひつよう 性 せい をまかなえるという訳 わけ ではない。goto文 ぶん の論理 ろんり 冗長 じょうちょう 性 せい は証明 しょうめい されているが、goto文 ぶん 削減 さくげん がそのままフロー明瞭 めいりょう 化 か に繋 つな がる保証 ほしょう はないので推奨 すいしょう まではしない。
この投書 とうしょ は、当時 とうじ のソフトウェア開発 かいはつ 現場 げんば で横行 おうこう していたgoto先 さき ラベルの安易 あんい な使用 しよう に警鐘 けいしょう を鳴 な らすためのものであったが、添 そ えられた学術 がくじゅつ 的 てき 注釈 ちゅうしゃく と文芸 ぶんげい 的 てき 比喩 ひゆ の数々 かずかず が却 かえ って読 よ み手 て の理解 りかい を妨 さまた げてしまい、冒頭 ぼうとう のタイトル印象 いんしょう のみを先走 さきばし りさせて、goto文 ぶん 論争 ろんそう を発生 はっせい させることになった。この投書 とうしょ は比較的 ひかくてき さり気 げ ないもので、当時 とうじ のダイクストラが方々 かたがた の現場 げんば で目 め にしていたラベル多用 たよう をたしなめたい所感 しょかん から書 か かれていた。ダイクストラが記 しる していた元々 もともと の題名 だいめい はA case against goto statement(goto文 ぶん への訴 うった え)であり、その時 とき の編集 へんしゅう 者 しゃ によって挑戦 ちょうせん 的 てき なタイトルにすげ替 か えられていたのが事 こと の真相 しんそう である[29] 。
goto文 ぶん 論争 ろんそう はプログラミング分野 ぶんや の一 ひと つの流行 りゅうこう として1970年代 ねんだい から80年代 ねんだい までの長 ちょう きに渡 わた って続 つづ いており、多 おお くのプログラマにとっても馴染 なじ み深 ふか いテーマになっている。goto文 ぶん と構造 こうぞう 化 か 定理 ていり の応酬 おうしゅう はプログラミング談義 だんぎ の定番 ていばん でもあった。ダイクストラは後年 こうねん の著作 ちょさく で自分 じぶん が提唱 ていしょう した構造 こうぞう 化 か プログラミングの本質 ほんしつ の一 ひと つは、この投書 とうしょ のテーマであった状態 じょうたい 遷移 せんい の適切 てきせつ な表現 ひょうげん 方法 ほうほう と把握 はあく 手段 しゅだん の確立 かくりつ としている[30] 。
1969年 ねん の論文 ろんぶん 「構造 こうぞう 化 か プログラミング」 [ 編集 へんしゅう ]
1969年度 ねんど NATO ソフトウェア工学 こうがく 会議 かいぎ に寄稿 きこう されたこの「Structured Programming[3] 」は、プログラム正当 せいとう 性 せい の効率 こうりつ 的 てき な検証 けんしょう 技術 ぎじゅつ に重点 じゅうてん を置 お き、当時 とうじ 問題 もんだい 視 し されていたコードサイズの際限 さいげん なき肥大 ひだい 化 か によるソフトウェア危機 きき の解決 かいけつ 策 さく として従来 じゅうらい のボトムアップ設計 せっけい からトップダウン設計 せっけい への移行 いこう を推奨 すいしょう していた。
論文 ろんぶん の前半 ぜんはん では、プログラムサイズの肥大 ひだい 化 か に伴 ともな い、各 かく プログラム部品 ぶひん およびそれらを組 く み合 あ わせた際 さい のプログラムの正当 せいとう 性 せい (program correctness )の立証 りっしょう (demonstration )に必要 ひつよう な労力 ろうりょく が指数 しすう 的 てき に増加 ぞうか して完遂 かんすい が不可能 ふかのう になるというソフトウェア危機 きき の問題 もんだい について述 の べている。ダイクストラはプログラムの正 ただ しさに対 たい して証明 しょうめい を与 あた える従来 じゅうらい の研究 けんきゅう を分析 ぶんせき して、証明 しょうめい の手続 てつづ きを考 かんが えずに書 か かれたプログラムは証明 しょうめい に必要 ひつよう な労力 ろうりょく がプログラムのサイズに対 たい して爆発 ばくはつ するとし、「与 あた えられたプログラムに対 たい してどうやって証明 しょうめい をするか」ではなく「証明 しょうめい がしやすいプログラムの構造 こうぞう とは何 なに か」についてフォーカスするとした。
後半 こうはん ではそのための方法 ほうほう について説明 せつめい している。まず推論 すいろん しやすい構造 こうぞう として、ステートメントが順 じゅん に並 なら んだだけのものを挙 あ げている。また、if文 ぶん 1つだけも推論 すいろん しやすいとしている。しかし、if文 ぶん がN個 こ 並 なら んだ場合 ばあい 、そのままでは2のN乗 の ステップの推論 すいろん が必要 ひつよう であるとしている。そこでif文 ぶん を抽象 ちゅうしょう ステートメントで1つずつ置 お き換 か える段階 だんかい 的 てき 抽象 ちゅうしょう 化 か (step-wise abstraction )により、Nに比例 ひれい する推論 すいろん で正 ただ しさを示 しめ せるとした。また、そのためには制御 せいぎょ のジャンプを制限 せいげん し、制御 せいぎょ 構造 こうぞう は順次 じゅんじ の他 ほか に、選択 せんたく 、反復 はんぷく 、および手続 てつづ き呼 よ び出 だ しに限 かぎ るべきとしている(なお、順次 じゅんじ 、選択 せんたく 、反復 はんぷく のいわゆる制御 せいぎょ 構造 こうぞう (control structures )に触 ふ れているのはこの文節 ぶんせつ だけである)。この例 れい のように詳細 しょうさい なプログラムを抽象 ちゅうしょう 化 か (abstraction )していくのではなく、逆 ぎゃく に抽象 ちゅうしょう 的 てき なプログラムから始 はじ めて詳細 しょうさい 化 か (refinement )していくというやり方 かた を示 しめ している。
詳細 しょうさい 化 か の際 さい には共同 きょうどう 詳細 しょうさい 化 か (joint-refinement )という考 かんが え方 かた が示 しめ されている。これは抽象 ちゅうしょう データ構造 こうぞう の詳細 しょうさい 化 か と共 とも にそれを扱 あつか う抽象 ちゅうしょう ステートメントを同時 どうじ に詳細 しょうさい 化 か し、それを1つのプログラムテキストのユニットに分離 ぶんり するというものである。このユニットをダイクストラは真珠 しんじゅ (pearl)と呼 よ んだ。また、抽象 ちゅうしょう 的 てき な真珠 しんじゅ が1段階 だんかい 具体 ぐたい 的 てき な真珠 しんじゅ に依存 いぞん し、その真珠 しんじゅ がさらに具体 ぐたい 的 てき な真珠 しんじゅ に依存 いぞん していったものをネックレスに例 たと えた。そしてネックレスの上部 じょうぶ は下部 かぶ に関 かか わらず正 ただ しさを証明 しょうめい することができ、また下部 かぶ を取 と り替 か えることでプログラムのバリエーションを労力 ろうりょく をかけずに作 つく れるとした。
1972年 ねん の共著 きょうちょ 「構造 こうぞう 化 か プログラミング」 [ 編集 へんしゅう ]
1972年 ねん の共著 きょうちょ 「Structured Programming[31] 」は計算 けいさん 機 き 科学 かがく 界 かい の錚々たる三 さん 名 めい による三 さん 章 しょう 構成 こうせい で、第 だい 一 いち 章 しょう はエドガー・ダイクストラの「structured programming」、第 だい 二 に 章 しょう はアントニー・ホーア の「data structuring」、第 だい 三 さん 章 しょう はオルヨハン・ダール の「hierarchical program structures」となっていた。結 むす びの章 しょう の「階層 かいそう 的 てき プログラム構造 こうぞう 」を著 あらわ したダールはSimula67 の開発 かいはつ 者 しゃ である。Simula67はオブジェクト指向 しこう プログラミングの草分 くさわ けであり、この章 しょう 名 めい から継承 けいしょう によるクラス階層 かいそう 構造 こうぞう を重視 じゅうし していたことがうかがえる。ダイクストラの構造 こうぞう 化 か プログラミングは、制御 せいぎょ 構文 こうぶん と構造 こうぞう 化 か 定理 ていり と構造 こうぞう 化 か 設計 せっけい の影 かげ に隠 かく れながらも、Simula67をモデルにしたオブジェクト指向 しこう プログラミング発展 はってん の歴史 れきし に組 く み込 こ まれて受 う け継 つ がれていったと言 い える。1983年 ねん にC++ を開発 かいはつ したビャーネ・ストロヴストルップ は「What Is Object-Oriented Programming?[32] 」において、オブジェクト指向 しこう を抽象 ちゅうしょう データ構造 こうぞう と階層 かいそう 的 てき プログラム構造 こうぞう の発展形 はってんけい として解説 かいせつ し、同時 どうじ にSimula67の言語 げんご 仕様 しよう を紹介 しょうかい している。
ダイクストラ提唱 ていしょう の構造 こうぞう 化 か プログラミングを支持 しじ するドナルド・クヌース は、1974年 ねん に自著 じちょ 「Structured Programming with go to Statements[6] 」を発表 はっぴょう し、その中 なか でgoto-lessの本質 ほんしつ に関 かん する補足 ほそく と解説 かいせつ を加 くわ えている。これは当時 とうじ のgoto文 ぶん 論争 ろんそう に一 ひと つの区切 くぎ りを付 つ けるものであったが、幅広 はばひろ い認知 にんち を得 え るには到 いた らずにgoto文 ぶん 論争 ろんそう は1980年代 ねんだい になっても散発 さんぱつ 的 てき に繰 く り広 ひろ げられた。1970年代 ねんだい 後半 こうはん からマイコン が普及 ふきゅう してBASIC などを扱 あつか うパーソナルユーザーが増 ふ えると、goto命令 めいれい を使 つか わないのが構造 こうぞう 化 か プログラミングといった見解 けんかい が取 と り上 あ げられて再 ふたた び議論 ぎろん が始 はじ まるなど、この論争 ろんそう の影響 えいきょう は後年 こうねん まで根強 ねづよ く残 のこ っている[注釈 ちゅうしゃく 4] 。
プログラム正当 せいとう 性 せい 検証 けんしょう のための構造 こうぞう 化 か (1967年 ねん のノート) [ 編集 へんしゅう ]
ダイクストラは、プログラマは正 ただ しいプログラムを作 つく り出 だ すばかりでなく納得 なっとく のいくやり方 かた で正 ただ しさを証明 しょうめい (検証 けんしょう )することも仕事 しごと の一 ひと つであるという立場 たちば を取 と っていた[33] 。プログラムがどんなに巨大 きょだい 化 か しても良 よ く構造 こうぞう 化 か (well-structured)されていれば、サイズに関係 かんけい なくその正当 せいとう 性 せい を検証 けんしょう [34] できるというのが彼 かれ の信念 しんねん であった[注釈 ちゅうしゃく 5] [35] 。well-formed formula(論理 ろんり 式 しき )に因 ちな んでいるwell-structuredには、数理 すうり 論 ろん 理学 りがく の証明 しょうめい 論 ろん をソースコードにも導入 どうにゅう する意図 いと が込 こ められていた。1967年 ねん のノート「Towards Correct Programs」でダイクストラは、良 よ く構造 こうぞう 化 か するための三 みっ つのメンタルツール(mental tool)をこのように示 しめ している。
列挙 れっきょ (enumeration): 一人 ひとり の人間 にんげん の能力 のうりょく でできる範囲 はんい でプログラムの命令 めいれい の妥当 だとう 性 せい を一 ひと つ一 ひと つ確認 かくにん していく作業 さぎょう
数学 すうがく 的 てき 帰納 きのう (mathematical induction): while文 ぶん など計算 けいさん 機 き 特有 とくゆう の多数 たすう の繰 く り返 かえ し文 ぶん についてのみ数学 すうがく 的 てき 帰納 きのう 法 ほう を用 もち いて確認 かくにん する作業 さぎょう
抽象 ちゅうしょう (abstraction): プログラムのブロックなどに名前 なまえ をつけ、さらに中身 なかみ を見 み ないで正 ただ しいと仮定 かてい することで検証 けんしょう 作業 さぎょう を後回 あとまわ しにする操作 そうさ
プログラムが正 ただ しいことを確認 かくにん するには、それを証明 しょうめい しなければならない[3] [注釈 ちゅうしゃく 6] 。テストはプログラムに対 たい する疑 うたが いを全 すべ て取 と り除 のぞ くには不十分 ふじゅうぶん であるという意見 いけん が上 あ がった[7] [37] 。これについてダイクストラは「テストはバグの存在 そんざい を示 しめ すには有効 ゆうこう だが、バグが存在 そんざい しないことは証明 しょうめい できない」という表現 ひょうげん を好 この んで用 もち いた[3] [38] [39] [40] [41] 。構造 こうぞう 化 か プログラミングの支持 しじ 者 しゃ らは、プログラムの正 ただ しさの重要 じゅうよう 性 せい と証明 しょうめい の方法 ほうほう や表明 ひょうめい (assertion)の使 つか い方 かた について熱心 ねっしん に説 と いた[4] [31] [7] [37] [42] 。理想 りそう 的 てき にはテストだけに依存 いぞん せず、プログラムの正 ただ しさの証明 しょうめい も与 あた えるべきだと言 い われている[43] [44] 。所与 しょよ のプログラムの正 ただ しさを後 こう 付 づ けで証明 しょうめい することは、はじめから証明 しょうめい を意識 いしき して作 つく られたプログラムの場合 ばあい より難 むずか しいことが経験 けいけん 的 てき に知 し られている[45] 。ダイクストラは、プログラミングと同時 どうじ にプログラムの証明 しょうめい を(わずかに証明 しょうめい を先行 せんこう して)進 すす めることを推奨 すいしょう している[46] 。そのようなアプローチでプログラムの正当 せいとう 性 せい の問題 もんだい にあたれば、複雑 ふくざつ な問題 もんだい であっても知的 ちてき 管理 かんり が可能 かのう であると述 の べた[注釈 ちゅうしゃく 7] 。しかし形式 けいしき 的 てき な証明 しょうめい は、時 とき として非 ひ 人間 にんげん 的 てき な長 なが さの記述 きじゅつ になることもダイクストラは認 みと めている[46] [15] 。同氏 どうし は、プログラムの証明 しょうめい が形式 けいしき 的 てき であることにはこだわらないという意見 いけん を明 あき らかにした[46] [6] [注釈 ちゅうしゃく 8] 。
構造 こうぞう 化 か 定理 ていり との関係 かんけい [ 編集 へんしゅう ]
1970年代 ねんだい 初頭 しょとう に計算 けいさん 機 き 科学 かがく 者 しゃ デビッド・ハレル (英語 えいご 版 ばん ) は、1966年 ねん に発表 はっぴょう されていたベーム とヤコピーニの数学 すうがく 証明 しょうめい に、構造 こうぞう 化 か 定理 ていり (Structure theorem)という全 まった く新 あたら しいタイトルを付 つ けて主 おも に産業 さんぎょう ソフトウェア開発 かいはつ 界隈 かいわい で紹介 しょうかい した。ハレルが後 のち に明 あ かしたところによると「構造 こうぞう 化 か 定理 ていり 」という名称 めいしょう は、当時 とうじ IBM社 しゃ の上席 じょうせき プログラマーであったハーラン・ミルズ の提案 ていあん だったという[20] 。ダイクストラの提唱 ていしょう 内容 ないよう とは全 まった く異 こと なる、制御 せいぎょ 構造 こうぞう (順次 じゅんじ ・選択 せんたく ・反復 はんぷく )主体 しゅたい の構造 こうぞう 化 か プログラミングは、IBM社 しゃ のIPT(Improved Programming Technologies)に採用 さいよう されており、同社 どうしゃ 主催 しゅさい の技術 ぎじゅつ セミナーなどを通 とお して当時 とうじ のプログラマに広 ひろ く流布 るふ されていた。その中 なか で恐 おそ らく意図 いと 的 てき にダイクストラのそれと名称 めいしょう を似 に せた「構造 こうぞう 化 か 定理 ていり 」は、彼 かれ らが勧 すす める制御 せいぎょ 構造 こうぞう の合理 ごうり 性 せい を数学 すうがく 的 てき にも証明 しょうめい した根拠 こんきょ として盛 さか んに引用 いんよう されていた。このような経緯 けいい から制御 せいぎょ 構造 こうぞう の使用 しよう と構造 こうぞう 化 か 定理 ていり は同一 どういつ 視 し されるようになり、ダイクストラのgoto文 ぶん 有害 ゆうがい 説 せつ から誤解 ごかい された構造 こうぞう 化 か プログラミングとも同一 どういつ 視 し されるようになった。goto文 ぶん 論争 ろんそう の中 なか で引 ひ き合 あ いに出 だ されていた構造 こうぞう 化 か 定理 ていり もまた、ベームとヤコピーニから見 み れば誤解 ごかい であった。
なお、ベームとヤコピーニの証明 しょうめい は、フローチャートやそれによって表現 ひょうげん されるプログラム・関数 かんすう ・チューリングマシンなどの理論 りろん 的 てき 側面 そくめん に注目 ちゅうもく している。これは任意 にんい の論理 ろんり 回路 かいろ がNAND 素子 そし の組 く み合 あ わせによって表現 ひょうげん できるとか、ラムダ式 しき がSとKの2つのコンビネータ によって表現 ひょうげん できるとかいった研究 けんきゅう に近 ちか い。回路 かいろ 設計 せっけい 者 しゃ が直接 ちょくせつ NANDを組 く み合 あ わせて電子 でんし 回路 かいろ を設計 せっけい しないのと同 おな じように、構造 こうぞう 化 か 定理 ていり は良 よ いプログラムの作成 さくせい を(少 すく なくとも直接的 ちょくせつてき には)意図 いと していない。ハレルも構造 こうぞう 化 か 定理 ていり は実際 じっさい の内容 ないよう 以上 いじょう に引用 いんよう されて民間 みんかん 伝承 でんしょう 定理 ていり (folk theorem)化 か していると指摘 してき していた[20] 。
ダイクストラの後述 こうじゅつ [ 編集 へんしゅう ]
ダイクストラは2001年 ねん のノート「What led to “Notes on Structured Programming” 」(構造 こうぞう 化 か プログラミング表記 ひょうき の由来 ゆらい )でこのように述 の べている。
1968年 ねん の自分 じぶん は「A case against goto statement」(goto文 ぶん への訴 うった え)と題 だい した記事 きじ (article)をCommunications of the ACM(ACM の機関 きかん 紙 し )に投稿 とうこう したが、当期 とうき の刊行 かんこう を急 いそ ぐ編集 へんしゅう 担当 たんとう 者 しゃ の意向 いこう で投書 とうしょ (letter to the Editor)にされる事 こと になり、更 さら にその担当 たんとう 者 しゃ 独自 どくじ の考 かんが えで「The goto statement considered harmful」(goto文 ぶん は有害 ゆうがい )という全 まった く新 あたら しい題名 だいめい を付 つ けられた。その担当 たんとう 者 しゃ とはニクラウス・ヴィルト であった。また、自分 じぶん が提唱 ていしょう した構造 こうぞう 化 か プログラミングの本質 ほんしつ 的 てき 内容 ないよう の普及 ふきゅう を好 この まない某社 ぼうしゃ がハーラン・ミルズ の主導 しゅどう で、まるでgoto文 ぶん を廃止 はいし するかのようなプログラミング手法 しゅほう へと矮小 わいしょう 化 か し、構造 こうぞう 化 か プログラミングという用語 ようご まで持 も ち去 さ ってしまった。
注釈 ちゅうしゃく
^ ソフトウェア危機 きき の始 はじ まりと構造 こうぞう 化 か プログラミングの歴史 れきし について[4] の第 だい 23章 しょう に詳 くわ しい。
^ "statements transferring control to labelled points" という言葉 ことば で一応 いちおう goto 文 ぶん に触 ふ れている[3]
^ Harel,David (1980)."On Folk Theorems"(PDF) のP381の左 ひだり 列 れつ の中央 ちゅうおう にハーラン・ミルズ(Harlan Mills)が未 み 公表 こうひょう の講義 こうぎ 資料 しりょう の中 なか で "The Structure Theorem" と名付 なづ けたことが書 か かれている。この資料 しりょう の出典 しゅってん [67]が1972年 ねん のため構造 こうぞう 化 か 定理 ていり が発明 はつめい されたのは1970年代 ねんだい 初頭 しょとう と推測 すいそく される。
^ 直接 ちょくせつ は無関係 むかんけい だが、ダイクストラはBASIC批判 ひはん の急先鋒 きゅうせんぽう でもあった。マイコン普及 ふきゅう 以前 いぜん の1970年代 ねんだい に既 すで に、BASICでプログラミング教育 きょういく をすべきでない、と強 つよ く主張 しゅちょう している(wikiquote:Edsger W. Dijkstra#How do we tell truths that might hurt? (1975) )。
^ すなわち、プログラム検証 けんしょう と構造 こうぞう 化 か プログラミングとは不可分 ふかぶん の関係 かんけい にある。
^ D.グリースはプログラムの正 ただ しさの証明 しょうめい を、抽象 ちゅうしょう 的 てき なレベルでは正当 せいとう 性 せい 証明 しょうめい 、具体 ぐたい 的 てき なレベルではプログラムの検証 けんしょう と言葉 ことば を使 つか い分 わ けているが[36] 、ここでは厳密 げんみつ な区別 くべつ はしない。
^ ダイクストラはプログラミングと証明 しょうめい を並行 へいこう するのに適 てき した、最 さい 弱 じゃく 事前 じぜん 条件 じょうけん をによる検証 けんしょう 方法 ほうほう を考案 こうあん した。ホーア論理 ろんり は作 つく り終 お わったものは証明 しょうめい できるが、これから作 つく るプログラムについては指標 しひょう を与 あた えてくれない[47] 。
^ 形式 けいしき 化 か にとらわれない点 てん では(当時 とうじ のダイクストラの)構造 こうぞう 化 か プログラミングは形式 けいしき 手法 しゅほう と趣 おもむ きが異 こと なる。なおプログラムの正 ただ しさの証明 しょうめい とはウォークスルーやインスペクションによるレビューではなく、帰納 きのう 法 ほう や最 さい 弱 じゃく 事前 じぜん 条件 じょうけん による検証 けんしょう を指 さ す。
形式 けいしき 的 てき でない証明 しょうめい の方法 ほうほう については、ロバートの「プログラムの証明 しょうめい 」[43] が良 よ い入門 にゅうもん 書 しょ の一 ひと つである。
出典 しゅってん
^ “構造 こうぞう 化 か プログラミングとは - IT用語 ようご 辞典 じてん ”. IT用語 ようご 辞典 じてん e-Words . 2020年 ねん 6月 がつ 1日 にち 閲覧 えつらん 。
^ “構造 こうぞう 化 か プログラミング - 意味 いみ ・説明 せつめい ・解説 かいせつ : ASCII.jpデジタル用語 ようご 辞典 じてん ”. yougo.ascii.jp . 2020年 ねん 6月 がつ 1日 にち 閲覧 えつらん 。
^ a b c d e f E. W. Dijkstra, “Structured Programming”, In Software Engineering Techniques , B. Randell and J.N. Buxton, (Eds.), NATO Scientific Affairs Division, Brussels, Belgium, 1970, pp. 84–88.
^ a b c グリース, D. 筧 かけい 捷 とし 彦訳 (1991). プログラミングの科学 かがく . 培風館 ばいふうかん . ISBN 4563007943
^ 山崎 やまざき 利治 としはる , "流 なが れ図 ず ", プログラムの設計 せっけい , 共立 きょうりつ 出版 しゅっぱん , 1990, pp.110-113. ISBN 4320023781
^ a b c d Knuth, D. E. (1974). “Structured Programming with go to Statements Computing Surveys”. ACM, New York, NY, USA 6 (4): 261-301. CiteSeerx : 10.1.1.103.6084 .
^ a b c N.ヴィルト, 系統 けいとう 的 てき プログラミング/入門 にゅうもん , 野下 のげ 浩平 こうへい , 筧 かけい 捷 とし 彦, 武市 たけいち 正人 まさと 訳 やく , 近代 きんだい 科学 かがく 社 しゃ , 1978.
^ Böhm, C.; Jacopini, G (1966). “Flow Diagrams, Turing Machines And Languages With Only Two Formation Rules”. Communications of the ACM (ACM, New York, NY, USA) 9 (5): 366-371. CiteSeerx : 10.1.1.119.9119 .
^ a b E. Dijkstra (1968). “Go To Statement Considered Harmful”. Communications of the ACM 11 (3): 147-148. CiteSeerx : 10.1.1.132.875 .
^ E.W.ダイクストラ 木村 きむら 泉 いずみ 訳 やく (1975), GO TO 論争 ろんそう :第 だい 1部 ぶ go to 文 ぶん 有害 ゆうがい 説 せつ , 7 , 共立 きょうりつ 出版 しゅっぱん , pp. 6-9
^ B.リーヴェンワス編 へん , ed. (1975), “GO TO 論争 ろんそう :第 だい 2部 ぶ GO TO 論争 ろんそう ”, bit (共立 きょうりつ 出版 しゅっぱん ) 7 (5): 10-26
^ 木村 きむら 泉 いずみ , "GO TO 論争 ろんそう :第 だい 3部 ぶ 解説 かいせつ ", bit , Vol.7, Issue 5, 1975, pp.27-39, 共立 きょうりつ 出版 しゅっぱん .
^ 有澤 ありさわ 誠 まこと 訳 やく 『文芸 ぶんげい 的 てき プログラミング』p.45
^ B. Randell and J.N. Buxton, (Eds.), Software Engineering , NATO Scientific Affairs Division, Brussels, Belgium, 1969.
^ a b c E.W.ダイクストラ (1977), “プログラミング−工芸 こうげい から科学 かがく へ”, 情報処理 じょうほうしょり (情報処理 じょうほうしょり 学会 がっかい ) 18 (12): 1248-1256, NAID 110002753409
^ a b 和田 わだ 英一 ひでかず , "ダイクストラかく語 かた りき", bit , Vol.9, Issue 1, 1977, pp.4-6, 共立 きょうりつ 出版 しゅっぱん .
^ a b 山崎 やまざき 利治 としはる , "構造 こうぞう 的 てき プログラミング", プログラムの設計 せっけい , 共立 きょうりつ 出版 しゅっぱん , 1990, pp.113-142.
^ 玉井 たまい 哲雄 てつお (2008), “ソフトウェア工学 こうがく の40年 ねん ” (PDF), 情報処理 じょうほうしょり 49 (7): 777-784, NAID 110006830060 , http://www.graco.c.u-tokyo.ac.jp/~tamai/pub/40yearsSE.pdf
^ Linger,R.C., Mills, H.D., Witt, B.I., Structured Programming: Theory and Practice , Addison-Wesly, 1979.
^ a b c Harel, David (1980-07-01). “On folk theorems” . Communications of the ACM 23 (7): 379–389. http://portal.acm.org/citation.cfm?doid=358886.358892 .
^ Edward Nash Yourdon ed., "Introduction (Chief Programmer Team Management of Production Programming)", Classics in Software Engineering , YOURDON inc., 1979, pp.63-64.
^ a b 木村 きむら 泉 いずみ (1975). “プログラミング方法 ほうほう 論 ろん の問題 もんだい 点 てん :超 ちょう 職業 しょくぎょう 的 てき プログラミングについて”. 情報処理 じょうほうしょり (情報処理 じょうほうしょり 学会 がっかい ) 16 (10): 841-847. NAID 110002720277 .
^ 木村 きむら 泉 いずみ , 米澤 よねざわ 明憲 あきのり , 算法 さんぽう 表現 ひょうげん 論 ろん , 岩波書店 いわなみしょてん , 1982.
^ D.シャシャ, C.ラゼール, "エズガー・W・ダイクストラ", コンピュータの時代 じだい を開 ひら いた天才 てんさい たち , 鈴木 すずき 良 りょう 尚 なお 訳 わけ , 竹内 たけうち 郁雄 いくお 監訳 かんやく , 日経 にっけい BP社 しゃ , 1998, pp.61-74. ISBN 4822280462
^ a b 中山 なかやま 晴康 はるやす , "ダイクストラ教授 きょうじゅ との3日間 にちかん ", bit , Vol.9, Issue 1, 1977, pp.7-9, 共立 きょうりつ 出版 しゅっぱん .
^ Edward Nash Yourdon, 構造 こうぞう 化 か 手法 しゅほう によるソフトウェア開発 かいはつ , 黒田 くろだ 純一郎 じゅんいちろう , 渡部 わたなべ 研一 けんいち 訳 やく , 日経 にっけい BP社 しゃ , 1987.
^ “What led to “Notes on Structured Programming” ”. 2020年 ねん 1月 がつ 閲覧 えつらん 。
^ 筧 かけい , 捷 とし 彦 (1975). “ストラクチャード・プログラミング用 よう 言語 げんご ”. 情報処理 じょうほうしょり (情報処理 じょうほうしょり 学会 がっかい ) 16 (10): 856-863. NAID 110002720279 .
^ “E.W. Dijkstra Archive: What led to "Notes on Structured Programming" (EWD1308) ”. www.cs.utexas.edu . 2021年 ねん 8月 がつ 16日 にち 閲覧 えつらん 。
^ E.W.ダイクストラ, W.H.J.フェイエン, プログラミングの方法 ほうほう , 玉井 たまい 浩 ひろし 訳 やく , サイエンス社 しゃ , 1991.
^ a b O.-J. Dahl and E. W. Dijkstra and C. A. R. Hoare, Structured Programming , Academic Press, London, 1972
^ Bjarne Stroustrup, “What Is Object-Oriented Programming?”, In IEEE Software , Vol. 5, Issue. 3, IEEE Computer Society Press, Los Alamitos, CA, USA, 1988, pp. 10-20
^ 構造 こうぞう 化 か プログラミング(1975) p.6
^ D.グリースはプログラムの正 ただ しさの証明 しょうめい を、抽象 ちゅうしょう 的 てき なレベルでは正当 せいとう 性 せい 証明 しょうめい 、具体 ぐたい 的 てき なレベルではプログラムの検証 けんしょう と言葉 ことば を使 つか い分 わ けているが、ここでは厳密 げんみつ な区別 くべつ はしない。
金山 かなやま 裕 ひろし 編 へん , "構造 こうぞう 的 てき プログラミング −批判 ひはん と支持 しじ −", bit , Vol.7, Issue 7, 1975, pp.6-13, 共立 きょうりつ 出版 しゅっぱん .
^ 所与 しょよ のプログラムの正 ただ しさを後 こう 付 づ けで証明 しょうめい することは、はじめから証明 しょうめい を意識 いしき して作 つく られたプログラムの場合 ばあい より難 むずか しいことが経験 けいけん 的 てき に知 し られている、と言 い われる。
E.W.Dijkstra, "Programming methodologies, their objectives and their nature", Structured Programming , Infotech state of the art report, 1976, pp.205-212, Infotech International.
^ 金山 かなやま 裕 ひろし 編 へん , "構造 こうぞう 的 てき プログラミング −批判 ひはん と支持 しじ −", bit , Vol.7, Issue 7, 1975, pp.6-13, 共立 きょうりつ 出版 しゅっぱん .
^ a b R.Geoff Dromey, How to Solve it by Computer , Prentice Hall, 1982.
^ E.W.ダイクストラ, “謙虚 けんきょ なプログラマ”, ACMチューリング賞 しょう 講演 こうえん 集 しゅう , 木村 きむら 泉 いずみ 訳 やく , 共立 きょうりつ 出版 しゅっぱん , 1989, pp.23-43.
^ E.W.Dijkstra, "The Programming Task Considered as an Intellectual Challenge", 1969.
^ E.W.Dijkstra, "Concern for Correctness as a Guiding Principle for Program Composition", 1970.
^ E.W.Dijkstra, "Programming as a discipline of mathematical nature", 1973.
^ John C. Reynolds, The Craft of Programming , Prentice-Hall, 1981.
^ a b ロバート B.アンダーソン, 演習 えんしゅう プログラムの証明 しょうめい , 有沢 ありさわ 誠 まこと 訳 やく , 近代 きんだい 科学 かがく 社 しゃ , 1980.
^ 小野 おの 寛 ひろし 晰, プログラムの基礎 きそ 理論 りろん , サイエンス社 しゃ , 1975.
^ E.W.Dijkstra, "Programming methodologies, their objectives and their nature", Structured Programming , Infotech state of the art report, 1976, pp.205-212, Infotech International.
^ a b c E.W.ダイクストラ, プログラミング原論 げんろん ― いかにしてプログラムをつくるか , 浦 うら 昭治 しょうじ 訳 やく , サイエンス社 しゃ , 1983.
^ 二木 ふたき 厚吉 こうきち 監修 かんしゅう , ソフトウェアクリーンルーム手法 しゅほう , 日 にち 科技 かぎ 連 れん , 1997.
E.W.ダイクストラ; C.A.R.ホーア; O.-J.ダール 著 ちょ 、野下 のげ 浩平 こうへい 訳 やく 『構造 こうぞう 化 か プログラミング』サイエンス社 しゃ 、1975年 ねん 。
落水 おちみず 浩 ひろし 一郎 いちろう 『ソフトウェア工学 こうがく 実践 じっせん の基礎 きそ -分析 ぶんせき ・設計 せっけい ・プログラミング』。
D.L.Parnas (1975), Use of the concept of transparency in the design of hierarchically structured systems , http://ivizlab.sfu.ca/arya/Papers/SW/TranspDesignHierSys.pdf
D.L.Parnas (1971), Information Distribution Aspects of Design Methodology , http://cseweb.ucsd.edu/~wgg/CSE218/Parnas-IFIP71-information-distribution.PDF
B.H.Liskov, S.N.Zilles (1974), Programming with Abstract Data Type , http://www.znu.ac.ir/members/afsharchim/lectures/p50-liskov.pdf
金 きむ 藤 ふじ 栄 さかえ 孝 こう ,二木 ふたき 厚吉 こうきち (2004), 多重 たじゅう ループからの脱出 だっしゅつ でのgoto文 ぶん の是非 ぜひ : Hoare理論 りろん の観点 かんてん から, https://ci.nii.ac.jp/naid/110002712129
金 きむ 藤 ふじ 栄 さかえ 孝 こう ,二木 ふたき 厚吉 こうきち (2004), 有限 ゆうげん 状態 じょうたい 機械 きかい に基 もと づくプログラミングでのgoto文使 ふみづかい 用 よう の是非 ぜひ : Hoare論理 ろんり の観点 かんてん から, https://ci.nii.ac.jp/naid/110002712260
林 はやし 達也 たつや , システム設計 せっけい 言語 げんご DEAPLANについて , https://ci.nii.ac.jp/naid/110002719409
D.グリース 著 ちょ 、筧 かけい 捷 とし 彦 訳 やく 『プログラミングの科学 かがく 』培風館 ばいふうかん 、1991年 ねん 。
Donald E. Knuth 著 ちょ 、有澤 ありさわ 誠 まこと 訳 やく 「第 だい 2章 しょう go to文 ぶん を用 もち いた構造 こうぞう 化 か プログラミング」『文芸 ぶんげい 的 てき プログラミング』アスキー、1994年 ねん 。
E.W.ダイクストラ 著 ちょ 、浦 うら 昭治 しょうじ 訳 やく 『プログラミング原論 げんろん ― いかにしてプログラムをつくるか』サイエンス社 しゃ 、1983年 ねん 。
E.W.ダイクストラ; W.H.J.フェイエン 著 ちょ 、玉井 たまい 浩 ひろし 訳 やく 『プログラミングの方法 ほうほう 』サイエンス社 しゃ 、1991年 ねん 。
関連 かんれん 人物 じんぶつ
言語 げんご 水準 すいじゅん 言語 げんご 処理 しょり 系 けい 言語 げんご 分類 ぶんるい その他 た 関連 かんれん 項目 こうもく