メインメニューを開く

段階的詳細化法(だんかいてきしょうさいかほう、: stepwise refinement)は、コンピュータ・プログラミングなどにおいて、段階的に、大まかなプログラム開発方針などを基に意思決定などの確度などに応じて段階的にその仕様などの策定などおよび策定された機能などの、詳細化を繰り返す、ということを特徴とする手法である。また、以上のようなビジネスソフトウェアのようなものに限らず、例えば数学的な再帰的な関数の計算をプログラムに実装する場合に、分割統治法により、まず「それ以上は再帰しない場合」と「再帰する場合」に分け、それ以上は再帰しない場合についてその計算を具体的に実装し、といったようなものもこれに当たる。

目次

概要編集

(以下のような説明は多くの文献にありがちであるが、「引数 → (計算) → 返戻値」という関数型言語的なプログラム観と、「先に実行される手続き → 後に実行される手続き」という手続き型プログラミングあるいは命令型プログラミング的なプログラム観とが混同されたものである。相互に依存関係が無い手続きの間の実行順序には意味が無く、一方で依存関係は以下で説明されるような一直線ではないのが普通である)

プログラムが書かれたテキスト(コード)の構造は一般に多様なものであるが、ふつう文章というものは上から下(左から右)に読めるように書かれるものであるのと同様に、上から下(左から右)の順に実行されるプログラムである順序的プログラム(sequential program)[1]に限定すれば、(順序的)プログラムとは、単純に表せば、

  1. データを入力(input)して、
  2. 操作(manipulation)をして、
  3. 結果を出力(output)するもの

である。つまりは、(順序的)プログラムのテキストは次のように三つの作用に分解できる構造(structure)を持つ。

したがって、(順序的プログラムの)プログラミングとは、次の大雑把な(詳細を無視した)表現からなるもの[2]

input ; manipulate ; output

の『;』の区切り文字で分割された3つの作用のそれぞれを具体化、洗練もとい詳細化(refinement)することとなる[3]

脚注編集

  1. ^ 構造化プログラミング(1975) p.51
  2. ^ ここでは仕様であっても良いしプログラムそのものと見ても良い。ここでの(仕様が固まっていないような状態での)、仕様とプログラムの境界線は曖昧である。
  3. ^ ただし、プログラムによっては入力(input)または出力(output)は無いこともある。ホーアは、公理と推論規則から導かれるものである状態を正確に表す表明(assertion)という用語を用いて
    入力またはそのプログラムが実行される直前に満足されるべき状態の表明である事前条件(precondition)と、
    出力またはそのプログラムが実行された直後に満足されるべき状態の表明である事後条件(postcondition)
    と呼ばれる概念を導入し、3つの作用からなる構造化されたプログラムの仕様、または仕様付きプログラムを
    P { manipulate } Q
    *ここで P : 事前条件、 Q : 事後条件 とする。
    と記述し、プログラムの公理的意味論を提唱した。

参考文献編集

関連項目編集