• 締切済み

構造化プログラムについて

noname#208507の回答

noname#208507
noname#208507
回答No.4

構造化プログラミングは、プログラムの正当性を証明できるように、あるいは後から証明しやすいように心がけてプログラミングするという考え方です。 構造化プログラミングを提唱したE.W.ダイクストラは「テストはプログラムにバグがあることは示せるが、バグが無いことは証明できない」と述べています(The Humble Programmer, 1972)。 ダイクストラは、無秩序なgoto文の利用が正当性の証明を難しくしバグの発見や修正を困難にすることを見出して、プログラミング言語からgoto文を排除した方が良いと述べました(Go To Statement Considerd Harmlful, 1968)。当時goto文の利用は一般的だったので、これは大きな論争を引き起こしました。 この頃、プログラムの正当性を証明する最も有力な手法の一つがC.A.R.ホーアが提案した公理に基づく証明方法でした。ホーアは、順次(;)・選択(if)・反復(while)の3つの基本制御構造について推論規則を定義し、記号論理に基づいてプログラムにバグが存在しないことを証明できることを示しました(An Axiomatic Basis for Computer Programming, 1969)。これはホーア論理として知られています。 自身が引き起こした論争に応えてダイクストラは、推論規則の定義された制御構造を用い、大きな処理から小さな処理へと徐々に問題を小さく分解しながら証明しやすい構造のプログラムを作るという、段階的詳細化(stepwise refinement)の考えを示しました。すなわちこれが構造化プログラミングです(Structured Programming, 1972, E.W.ダイクストラ, C.A.R.ホーア, O.J.ダール)。 その後、ホーア論理は形式手法(formal method)の研究の流れに受け継がれていきました。一方、構造化プログラミングの注目を受けて、段階的詳細化や基本制御構造のアイディアは設計や分析の工程にも適用され、構造化設計や構造化分析として広まりました。良く知られている構造化○○の「分かりやすいプログラムを作る」という考え方は後者から来たものです。 C.BohnとG.Jacopiniはダイクストラが論文で引用したので引き合いに出されますが、3つの制御構造だけでもプログラムは書けるという言及が含まれるだけで、構造化プログラミング自身とはさほど関係が深くありません。BohnとJacopiniの論文のタイトルも3つではなく2つです(Flow Diagrams, Turing Machines and Languaes with Only Two Formation Rules, 1966)。

関連するQ&A

  • 構造体のプログラム・・・・

    構造体のプログラムを作っているのですが、コンパイル時に "Fatal: ファイル 構造体1-1.OBJが開けません"と出て実行できません。 やっぱりファイル名が日本語だとダメなんですか? 他の日本語の名前のプログラムは実行できるのに・・。

  • すみません。C言語の構造体で簡単なプログラムがあれば教えてください。

    すみません。C言語の構造体で簡単なプログラムがあれば教えてください。

  • プログラム構造化設計の問題について

    プログラム構造化設計の問題がどうしてもわからなくて困っています…ずっと考えているのですが…。 願書データ入力→応募ファイル更新→応募登録確認処理 という一連の流れを、モジュール分割してプログラム構造図・IPO図を作成するという問題なのですが、 応募登録という全体の作業の、どこをどう分割すればいいのかわかりません。入力と参照以外に何があるのでしょうか… 無知ですみません、よろしければヒント等お願いいたします。

  • 最適化に必要な、プログラム構造解析の機能

    最適化のためには、プログラム構造解析がどのような機能を持っている必要がありますか?わかる方教えて下さい!お願いします。

  • プログラムはどのように動いているのか

    プログラムはどうやって動いているのかを構造的に教えて下さい。 「プログラムは、メモリーにロードされ、CPUによって解釈・実行されます」とありますが コンピュータの内部ではプログラムの正体はどんな物で メモリとCPUはどんな構造をしていて どうやってメモリに読み込んで、CPUはどうやってプログラムを解釈、実行しているのかを構造的に教えて下さい。

  • どんな構造になっている?

    昨夜も放送がありましたが、NHKのBS-2の番組で「世界の街歩き」というのがあります。カメラマンの技術がいいのか、カメラがいいのかわかりませんが、ぶれない、きれいな画面に引き込まれて見ています。ぶれないカメラならどんな構造をしているのでしょうか?NHKに訊けばいいのかもしれませんが・・・。

  • 美しいプログラムとは

    プログラムを勉強中なのですが、あまり美しいプログラムではないような気がします。 行数が多いソースになると、どうしても 見た目の美しさに欠け、構造も使い回しができないようなプログラムになってしまいます。 美しいプログラムを書くはどうすればよろしいでしょうか? 参考になる書籍、サイトがあれば、教えていただきたいです。 よろしくお願いいたします。

  • 最適化できるプログラムってたとえばなにがあるんですか?

    最適化のためにはプログラム構造解析がどのような機能を持ってる必要がいるんですか?

  • 構造耐力について

    建築基準法 第20条 について質問です。 「安全上必要な構造方法に関して政令で定める技術技術的基準に適合すること」とは具体的にはどういうことですか?ご回答よろしくお願いします。

  • 構造化プログラムのATMを使っての具体的な例

    構造化プログラムのATMを使っての具体的な例 こんにちは。構造化プログラムについて理解を深めたいと思います。そこで身の回りに多いATM(自動払い出し機)に使われているソフトウェアもコレに基づいていると思いましたがまだ少し自分には分からないことがあるので質問させて下さい。 sequence,selection, repetition が最低限基本の要素だというのは分かりました。 selection(if A then~)は、例えば使用者がお金を引き出す時に一日の最高引き出し金額に達していたら、お金を引き出せないようにする。達していなければ引き出す手続きに進ませる。というような例を自分で考えたのですがこれがあっているでしょうか? あと他のsequence や repetition のATMのソフトで使われていそうな上に書いたような具体的な例はどのようなものがありそうでしょうか?selectionの例もまだ沢山あると思います。 それぞれ3つの例を初心者な自分にどうか教えて下さい。真剣にこれについて考えているのでよろしくお願いします。 どれか一つだけでもかまいません。