ストラクチャーチャートの書き方
(プログラム構造図)

1.はじめに
2.構造化の基準
3.展開の方法
4.モジュールの構造に関する基準
5.制御と処理
附.記号とその使い方


1.はじめに  TOPへ戻る

 プログラム開発に先立って最初に行う作業が、作成するプログラムの設計図(プログラム構造図)を書くことです。

 一般的にプログラム論理は単一処理を処理順に流線で結合したフローチャートと呼ばれる図で示す事ができます。
 ここではプログラム論理を構造化し、作成者も含め誰でもがプログラムの論理構造を把握できるような「プログラム構造図」の書き方を学びます。



2.構造化の基準  TOPへ戻る

 構造化定理(どんな論理でも順次・選択・繰返しの3つの基本的パターンを用いれば記述できる)を適用してプログラミングすれば、プログラムを難解にしていたGOTO命令の使用を避けられます。この構造化プログラミング技法に基づき、プログラム全体の処理の流れを、原則として初期処理、主処理(繰返し処理)、終了処理の3つの部分に分けます。

(1)初期処理部
 ・繰返し処理に必要とする入出力ファイルのOPEN
 ・実行に必要なパラメータ、コントロールメッセージなどのセット
 ・カウンタ、レジスタなどの初期値のセット
 ・繰返し処理に必要とする各ファイルからの第1レコードの読込み
 ・など
(2)主処理部
 ・プログラムにおける主たる処理を繰り返し行う部分
 ・処理が前後半に分かれる場合は、主処理もそれぞれに分かれる
(3)終了処理
 ・総計の出力処理
 ・総入出力件数の表示
 ・使用したファイルのCLOSE
 ・など

次に各部分で出現する処理機能モジュールをくくり出して、共通処理部とします。

 共通処理部に配列する処理機能モジュールは、実行順に無関係で、かつ、そのモジュールを呼び出す制御論理モジュールとの接続関係は図示されなくてよいが、それぞれの処理機能モジュールとのインターフェースのために使用するコモンエリアなどの条件を注記しておくとよい。


3.展開の方法  TOPへ戻る

 ストラクチャーチャートは構造化の基準にしたがい、初期処理、主処理(繰返し処理)、終了処理の3つの部分をドライブする第1レベルの構造図から書き始め、順次各部分の下位レベルにおける制御論理および処理機能モジュールを展開して書き加える方法で作成します。
 なお、第1レベルの構造図の主処理部は、繰返し処理する各機能モジュールの制御モジュールとなります。



 第2レベル以降は、第1レベルの構造図の下部に必要な制御論理および処理機能モジュールを書き加えてゆく。たとえば次のようになる。


 書き方は縦方向でもよい。


 繰返し処理の部分は次のように書く。
 たとえば共通部分を持つ2種類の形式のデータカードの入力チェックの場合を考える。
 流れとしては、初期処理で第1レコードが入力された状態からスタートするので、チェック処理→正常またはエラーデータそれぞれの出力→次のレコードの入力、の繰返しとなる。



 データチェックの部分は、まず共通部分(たとえばキーとなるコード、データの作成日付、発行部課などでデータ形式が同一のもの)のチェックから始め、そこでエラーのあったものはチェックを打ち切り、そうでない時は第1形式、第2形式の区分コードによりそれぞれ形式別のチェックをすることにする。



 ストラクチャーチャートの展開はこのレベルで止めてもよい。
 しかし、共通部分に含まれる日付のチェックに暦日をチェックする外部ルーチンが含まれていたり、形式1、形式2の各項目のうち6桁の数値フィールドの桁ずれチェックを共通ルーチンで行うというようなことを図示するのであれば、それぞれの処理機能モジュールをさらに分解して図示に書き加えればよい。
 図3.5に展開例を示す。



 次の終了処理は、入出力件数の表示(入力件数、出力件数は入力・出力のそれぞれのモジュールでカウントしておく)と、ファイルのCLOSEとする。




4.モジュールの構造に関する基準  TOPへ戻る


(1)モジュールは一つの機能としてまとまったものであり、一部の機能が共通的な手順によって処理される場合は、そのサブ・モジュールを呼ぶことができる。
(2)処理機能をまとめる時の基準は、同一のデータ構造に対する一連の処理とする。ただし、計算と編集のように性質の違う処理は原則として別の処理機能としてまとめる。
(3)上位と下位の関係にあるモジュールは常に上位のモジュールが下位のモジュールの実行を支配し、下位のモジュールの実行が終了した時は、強制中断を除き必ず上位のモジュールに戻ることとする。
(4)モジュールは常に1つの入口と1つの出口を持つ構造とする。
(5)1つのモジュールが他のモジュールの処理内容を変更することは許されない。
(6)1つの処理モジュールでセットされた変数の値は、他のモジュールでリセットする以外、値を変更することは許されない。
(7)1つのモジュールの中に含まれる部分を独立して他のモジュールで使用することは許されない。
(8)複数のモジュールを順次実行させる場合には、必ずその上位に制御処理モジュールを置く。
(9)モジュールの物理的な大きさ(ステートメントの行数)には特に制限はないが、ソースコード・リストの1頁に収まる大きさが適切である。





5.制御と処理  TOPへ戻る


 モジュール間に階層関係がある時、上位のモジュールは下位のモジュールの実行を制御する制御モジュールと定義します。
 下位に制御すべきモジュールを持たない(ただし共通処理モジュールの制御を除く)モジュールを処理モジュールと定義します。



(1)下位モジュールの制御順は、上から下、左から右の順とする。



 処理−1、2、3、4の順に実行




(2)下位に制御モジュールを持つ時の実行順



処理−1、処理2−1、処理2−2(第2の制御モジュールによる)、処理−3、処理−4の順。

第2の制御モジュールによって制御される処理2−1、処理2−2は繰返し実行または選択実行になることもある。


(3)繰返し実行の制御


繰り返し終了条件を満たすまで、処理−1、処理−2の順に繰り返す。

繰り返し終了条件は、制御モジュールBOXの横に記述する。


(4)選択実行の制御



条件1が成立した時、処理−1を実行。条件2(その他)は処理−2を実行。

選択条件は流線の上に書く。
条件1、条件2の2者択一形式のとき、一方は省略してよい。




  3つ以上の選択実行を制御する場合、階層化して2者択一形式の制御を積み重ねることができる。



選択実行の一方に処理がない時は、一方をダミーとする。ダミーのコーディングはモジュールの出口への直接分岐でもよい。



選択実行の一部が強制中断の時




(5)共通処理と外部モジュールのCALL

共通処理モジュールとは、同一プログラム中で共通の処理機能としてくくり出したモジュールのことである。(制御モジュールを含む場合もある。その場合は制御モジュールのレベルで共通処理とする)

チャート上ではモジュールのBOXの右下スミを塗りつぶして見やすくする。



共通処理が外部ルーチンまたはサブ・プログラムとしてCALLまたは挿入されるとき、プログラム中で自らコーディングすべきモジュールと区別するために次の記号を使用する。






附.記号とその使い方   TOPへ戻る


処理モジュール
制御モジュール

プログラム中の
共通処理モジュール
流線 CALLする
外部処理モジュール
ページ間結合子
次ページへの連絡
ダミー・モジュール
出口へ直行する選択処理部分
選択を含む
制御モジュール
処理の強制中断
繰返し処理を
下位に含むモジュール
  



戻る



ストラクチャーチャートの書き方 1996年12月
 痛さん