影響と改良とは? わかりやすく解説

影響と改良

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/07/06 11:41 UTC 版)

構造化定理」の記事における「影響と改良」の解説

ベーム-ヤコピーニの証明は、プログラム改良するよりもプログラム不明瞭にする可能性高かったので、ソフトウェア開発のために構造化プログラミング採用するかどうかという疑問解決しなかった。 それどころ議論始まり告げることになったエドガー・ダイクストラ有名な文書Go To Statement Considered Harmful英語版)(Go to 文は有害と考えられる)」は1968年にその議論続いた幾人かの研究者ベーム-ヤコピーニの結論に対して純粋な手段取った。そして、ループ途中にある breakreturn ですらベーム-ヤコピーニの証明に必要とされていないので悪い実践であると主張した。したがって全てのループ単一脱出ポイントを持つべきだと主張した。この純粋な手段Pascalプログラミング言語19681969設計)で具体化された。Pascal1990年代中頃まで大学入門的なプログラミング講義をするために好まれツールであったエドワード・ヨードンは、構造化プログラミング流行始まった時からの議論基づいて1970年代に非構造化プログラム機械的に構造化プログラム変換することに哲学的な反対があったと述べている。実用本位対照的なこととして、そのような変換既存プログラム大きなコード役立ったということもあった。機械的変換のための最初の提案一つは、エドワード・アッシュクロフト(Edward Ashcroft)とゾハル・マンナ(英語版)(Zohar Manna)による1971年論文であったベーム-ヤコピーニの定理直接的応用は、構造化チャート導入されている余分なローカル変数訳注ループ途中脱出用のフラグのことだろうか?)といくつかの重複コードという結果になったのかもしれない後者問題は、この状況loop and a half problem呼ばれている(訳注:なぜ後者問題なのかは英語版書かれていない)。Pascal はこれらの問題両方影響されており、エリック・S・ロバーツ英語版)(Eric S. Roberts)によって引用され経験的研究に従っている。学生プログラマーであるロバーツは、いくつかの単純な問題配列の中から1つ要素検索する機能も含む)のために Pascal適切な解法公式化することに困難を感じたロバーツによって引用されたヘンリー・シャピロ(Henry Shapiro)による1980年研究は、Pascal提供する制御構造だけを使うと、適切な解法得られ課題20%けだった一方ループ途中return書くこと許せば、この問題のために不適切コードを書く課題存在しなかった。 1973年S.ラオ・コサラジュ(英語版)(S. Rao Kosaraju)は、任意の深さmulti-level break多重ループから複数階層一気脱出できる break)を使えるようにすれば構造化プログラミングにおいて余分な変数追加回避できることを証明した。さらにコサラジュは「プログラム厳密な階層存在する。それは現在 コサラジュ階層(Kosaraju hierarchy) と呼ばれている。n はあらゆる整数である。深さ n の1つmulti-level break含んでいるプログラムは、n よりも小さ深さmulti-level break使ったプログラムとして書き換えることはできないということ証明した。コサラジュは BLISSプログラミング言語multi-level break仕組み引き合い出している。leave label という形式multi-level break は、実際に BLISS-11 で導入されていた。最初BLISS は single-level break一階層しか脱出できない break)のみを採用していた。BLISS言語ファミリー制約のない goto提供していなかった。Javaプログラミング言語は、後に同様にこの手法を採用している:960–965。 コサラジュの論文から得られる単純な結論は、あるプログラム2つ異な脱出口を持つループ含んでいないときだけ(変数追加せずに)あるプログラム構造化プログラム変換できるということである。変換可能性はコサラジュによって定義された。大雑把に言うと、同一機能処理し、同じ「基本動作」を使い、そして元のプログラムと同様であると断言できることである。しかし、元のプログラム異な制御フロー構造を使うことができる(これはベーム-ヤコピーニの使ったものよりも狭い概念変換可能性である)。この結論触発されて、コサラジュが頻繁に引用する循環的複雑度概念導入した論文第6節において、トーマス・J・マッケイブ(Thomas J. McCabe)は非構造化プログラム制御フローグラフCFG : Control Flow Graph)のためのクラトフスキーの定理英語版)と類似したもの記述した。つまり、プログラムCFGを非構造化にする最小誘導部分グラフである。これらの部分グラフ自然言語で非常に良く説明できる。それらは以下のものであるループの外へ分岐(ループサイクルテストからの分岐以外) ループの中へ分岐 決定の中へ分岐(すなわち、if分岐の中へ入る) 決定の外へ分岐 マッケイブはこれらの4つグラフ部分グラフとして登場するときに独立していないことを実際に明らかにした。プログラムが非構造化になるための必要十分条件は、そのCFGがこれらの4つグラフから3つ選んで作った部分集合のどれか1組部分グラフとして持つことである(訳注4つグラフのうち3つのグラフCFG含まれていたら非構造化になるということ)。彼は、もしも非構造化プログラムがこれらの4つ部分グラフ1つ含んでいるならば、その非構造化プログラム4つ部分グラフからもう1つ異な部分グラフを含まなけれならないということ明らかにした。この後者の結論は、非構造化プログラミング制御フロー一般的にスパゲティプログラム呼ばれるものにどのようにしてなっていくのかを説明するのに役立つ。マッケイブは、あるプログラム与えられたとき、それが理想構造化プログラムからどの程度かけ離れているのかを定量化する数値測定手段考案した。マッケイブは彼の測定手段Essential complexity英語版) と呼んだ。 マッケイブの構造化プログラミングにおける禁止グラフ英語版)の特徴づけは不完全であると考えることができる。少なくともダイクストラのD構造訳注:D構造の意味不明)は、建設ブロックと見なされている:274275[要説明]。 1990年まで既存プログラムのほとんどの構造維持しながら goto削除するためにかなり多く提案され手法存在した。この問題への様々な手段はいくつかの等価の概念提案した。それらの概念上で議論され民間伝承的定理のような結果避けるために単純なチューリングマシン等価英語版)よりも厳密である。選ばれ等価の概念の厳密性は必要とされる制御フロー最小セット要求する。ライル・ラムショウ(Lyle Ramshaw)による1988年の JACM (Journal of the ACM)(英語版) の論文は、それまでその分野を調査しており、さらに自身の手法も提案している。ラムショウのアルゴリズムは、Java仮想マシンコードオフセットとして表現され対象を持つ分岐命令を持つので、Java逆コンパイラ例のために使われた。しかし、上位レベルJava言語だけは multi-levelbreakcontinue 文持っている。 Ammarguellat (1992年)は、ループ一箇所からの脱出強制するために後戻りする変換手法提案した

※この「影響と改良」の解説は、「構造化定理」の解説の一部です。
「影響と改良」を含む「構造化定理」の記事については、「構造化定理」の概要を参照ください。

ウィキペディア小見出し辞書の「影響と改良」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「影響と改良」の関連用語

影響と改良のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



影響と改良のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaの構造化定理 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS