情報技術/構造化プログラミング
概要
[編集]構造化プログラミングは、非構造化プログラミングの解毒剤として提案されたものです。 非構造化プログラミングは、構造化プログラミングが発明される数十年前から既に存在していました。
初めに、非構造化プログラミングがあった
[編集]非構造化プログラミングとは、手続き型のプログラムのことで、書かれている通りに文が順番に実行されます。しかし、このタイプのプログラミングでは、GOTO文を使用します。GOTO文は、プログラム内の任意の場所に制御を渡すことができます。 GOTO文が実行されると、GOTOの対象から順番に実行されます。このように、プログラムの仕組みを理解するためには、プログラムを実行するふりをしなければなりません。つまり、このようなプログラムの論理を理解するのは難しい場合が多いのです。プログラムコンパイラの中には、GOTOの接続先をクロスインデックス化して、ソースコードを高速にナビゲートする実用的なものもある。 しかし、いくつかのプログラミング言語では、GOTOの行き先に関連した変数を使用することが一般的であったため、自動インデックス化は実用的ではありませんでした。 構造化されたプログラミング言語の中には、多くの人が同じコンピュータのデータを人間の言語で見ることができるようにするための外国語ビューの実装方法など、同様の問題があります。
これは、構造化プログラミングのように、プログラムがどのように動作するかを理解するために、ある種の抽象化を使用するという考えとは対照的です。
このような理由から、ダイクストラはGOTO文を禁止すべきだと提案しました。
構造化プログラミング
[編集]構造化されたプログラミングとは、危険なGOTO文を使わないようにしたプログラミングという見方があります。これにより、混乱を招く恐れのある制御の移行を防ぐことができます。 多くの構造化プログラミング言語はGOTO文をサポートしており、構造化された方法で使用することができます。 例えば、ルーチンの最後に抜けたり、ループの最初に戻ったりするために使用します。
別の見方をすれば、構造化プログラミングは、1つのエントリーポイントと1つのエグジットポイントのみを持つ制御構造を使用することに限定される。これらの構造のうち最も重要なものは、順接、選択(ifおよびif...else)、反復(while)です。
また、構造化されたプログラムとは、抽象化によって容易に理解できるように書かれたプログラムであるという見方もあります。抽象化とは、細かい部分を理解しなくても、コードの全体的な目的を理解できるようにすることです。抽象化のための代表的なメカニズムは、プロシージャ(メソッド)です。しかし、上記のような単一エントリ単一出口の構造もまた抽象化に役立ちます。
構造化されたプログラミングを可能にしたのは、高レベルの言語と関連するプログラムのパッケージであり、プログラマーでなくても理解できるソフトウェアの図解技術を用いてフローチャートを作成することができる。
発明者紹介
[編集]構造化プログラミングのアイデアを発見し、それを他のプログラマーの世界に伝えたのは、数人のコンピュータ科学者である。構造化プログラミングを最初に具現化したのはALGOL(Algorithmic Language)言語で、これはバロース B5000 MCP(OS)でシステムプログラミングに使われた最初の高級言語となりました(設計したのはBob Bartonで、後にユタ大学の教授となり、GUIウィンドウを発明した学生Alan Kayに影響を与え、Smalltalkの開発者の一人となりました)。その結果、ALGOLは最初のオブジェクト指向言語であるSimulaの基礎となりました。
ALGOLは、John BackusとPeter Naurの名前をとってBNF(Backus-Naur Form)と呼ばれる言語設計形式をベースにしていました。
この技術の画期的な本は、"Structured Programming"(Academic Press 1972: ISBN 978-0-12-200550-3)で、Edsger W. Dijkstraの "Notes on Structured Programming"、C.A.R. Hoareの "Notes on Data Structuring"、Ole-Johan DahlとC.A.R. Hoareの "Hierarchical Program Structures "という3つのセクションで構成されています。最後のセクションでは、Simulaとそのオブジェクト指向および並行処理機能が紹介されています。
Edsgar Djikstraは「A Discipline of Programming」(Prentice Hall, 1976: ISBN 978-0132158718)という本も書いています。
また、構造化プログラミングの世界では、Donald Knuthも有名です。彼は、複数巻からなる『The Art of Computer Programming』を執筆しました。
その後、Ed YourdonとLarry Constantineによって『Structured Design』(ISBN 978-0138544713)という本が書かれ、多くの人がこれを構造化プログラミングとみなしていますが、そうではありません。これはグラフィカルな手法で、実際には非常に退屈なものだった。ほとんど放棄されてしまったが、UMLのような他の非形式的なアプローチの後継者がいる。ストラクチャード・デザインとストラクチャード・プログラミングで説明されている手法は全く異なるものであり、Structuredという言葉を共有しているからといって混同してはならない。