ジャクソンの構造化プログラミング
ジャクソンの構造化プログラミング(ジャクソンのこうぞうかプログラミング、英: Jackson Structured Programming, JSP)とは、ダイクストラらに始まる構造化プログラミングを踏まえた上で、制御の流れではなくデータ構造の分析を中心とするプログラム設計法を言う[1][2]。1970年代にマイケル A. ジャクソンによって開発された。
事前に設計について分析を行い、分析した入出力構造の対応関係から順次的プログラム(sequantial program)の実装を具体的に導出する詳細化技法からなる。
概要
編集単一スレッド(single-thread)計算機上で大規模開発をするにあたって、ダイクストラらに始まる構造化プログラミングは、"単線的な計算プロセスの進行"と"それを生成する静的なソースコードの記述の進行"は直接的に対応させなくてはならないという主張のもと[3]、それまで無秩序に記述されていた流れ図(flowchart)を一つの階層ごとに上から下に読めるよう単線化(構造化)させる段階的詳細化法をもたらした上で[4]、「(構造化された)流れ図から直接プログラミング言語への翻訳が可能である」と主張した[5]。これは、プログラムの構造化の概念と事前に行う机上の設計という概念を与えたが、肝心の流れ図から具体的にプログラムを導出する方法については曖昧であった[6]。
これに対し、イギリス生まれのコンサルタントのマイケル A. ジャクソンは、流れ図はそもそも制御の流れを記述するものであり、それから作られたプログラムは変更にも弱くなるので[7]、プログラムの設計にあたっては、制御を中心に考える流れ図は避け[8]、逆にデータ構造を中心に考えるべきと主張した。
ジャクソンは、データ構造の分析表記法としてジャクソン構造図(Jackson structure diagram)[9]を提案した上で、ダイクストラの構造化プログラミングにおける一つの入口と一つの出口を持つ順次的プログラムの入出力の構造をそのジャクソン構造図で記述することを通して具体的に導出する方法、ジャクソンの構造化プログラミング(Jackson Structured Programming、JSP)を開発した。
ジャクソン構造図(Jackson structure diagram)
編集ダイクストラらに始まる構造化プログラミングの教義は、goto文とラベルで混線化し混沌状態となった計算プロセスの進行を、連接・選択・繰り返しの抽象による入れ子構造に置き換えさせることで単線化させた。並行性や並列性があまり知られていなかった1960年代において、プログラムといえば単線のプロセスであったことから、その単線化された構造は明らかに適切な構造であるとみなされ、プログラミングだけではなく、当然のように分析や仕様の分野にも輸入されるようになった[10]。
- 流れ図(flowchart)における制御に関する3つの分解の型
-
連接(concatenation)
複合文(ブロック文) -
選択(selection)
条件文(if文)、場合分け文(case文) -
繰り返し(repetition)
繰り返し文(while文、for文)
一方で、ジャクソンは、プログラムを作り上げるにあたってはコーディングの前に必ず設計を行うべきであるが、流れ図はその名が示すように制御の流れを記述するものであり、問題の構造について考える設計段階でプログラムの実行とその進行について考えさせてしまうことから、流れ図を書くことは設計ではないと主張した[11]。
ダイクストラがまずアルゴリズムを決めそこからデータ構造を導く手法(データ抽象化)を用いたのに対し、逆にジャクソンは、設計技法としてはまずデータ構造を分析してからアルゴリズムなどのプログラム構造を決めるべきとし[12]、ホーアが主張した制御構造とデータ構造の対応関係[13]を踏まえてか、上記の流れ図の分解に代わり、データ構造の分析手段として提案したのが以下のジャクソン構造図(Jackson structure diagram)である。
- ジャクソン構造図(データ構造に関する3つの分解の型)
-
順次(sequence)
直積型データ構造 -
選択(selection)
直和型データ構造 -
反復(iteration)
配列型データ構造
構造的対応によるプログラム設計
編集一つの入口と一つの出口を持つプログラムは、入口から入ってくる入力データストリームを出口から出て行く出力データストリームに変換する装置と見ることができる。入力と出力のデータストリームをジャクソン構造図で表現してからそれぞれの構造図の要素を対応付け・合成し、求めるプログラムの構造を導出する方法をJSPプログラム設計法と呼ぶ[14]。
脚注
編集- ^ Jackson(1975)
- ^ JSPの考え方をシステム開発法へ拡張したものとしてジャクソンのシステム開発法(JSD)がある。Jackson(1983) p.xv
- ^ ダイクストラ(1972)(構造化プログラミング p.26)
- ^ ダイクストラ(1972)(構造化プログラミング pp.18-22)
- ^ ダイクストラ(1972)(構造化プログラミング p.22)
- ^ Jackson(1975) p.xi 「訳者序文」
- ^ Jackson(1975) pp.6-10
- ^ Jackson(1975) pp.10-11,p.17
- ^ 飯泉・大槻(2011) p.22
- ^ Jackson(1995) p.174
- ^ Jackson(1975) p.11
- ^ Jackson(1975) p.13,17
- ^ ホーア(1972)(構造化プログラミング pp.161-162)
- ^ Jackson(1995) pp.50-51
参考文献
編集- Michael A. Jackson 著、鳥居 宏次(訳) 編『構造的プログラム設計の原理』日本コンピュータ協会、1980年。
- Michael Jackson 著、大野侚郎,山崎 利治(監訳) 編『システム開発 ーJSD法ー』共立出版株式会社、1989年。
- マイケル・ジャクソン 著、玉井 哲雄,酒匂 寛(訳) 編『ソフトウェア博物誌 ー世界と機械の記述ー』トッパン、1997年。
- 飯泉 純子,大槻 繁『ずっと受けたかったソフトウェア設計の授業 ー構造化・モジュール化・仕様化の原理ー』翔泳社、2011年。
- E.W.ダイクストラ、C.A.R.ホーア、O.-J.ダール 著、野下浩平,川谷慧,武市正人 訳『構造化プログラミング』サイエンス社、1975年。
- E.W.ダイクストラ (1972), 構造化プログラミング論
- C.A.R.ホーア (1972), データ構造化序論
- 河村 一樹『ソフトウェア工学入門』近代科学社、1995年。(改訂版は内容が異なる)