この場合、下位の反復処理は必ず入れ子に納まっていなければならな い。即ち下位の繰り返し処理は上位の繰り返し処理の範囲内に納まっていなければならない。 プログラミング言語と手続処理型デ−タベ−ス言語の大きな違いは、データベース言語では、コマンドの制約から、自ずと構造化された処理の流れを組み立て ねばならない点である。 一つの反復処理単位を実行する時は、常にその反復処理単位の1つの入り口へとび こみ、1つの出口から脱ける流れにしなければならない。下位の反復処理の入口も出口も上位反復処理の中に 包含するように入れ子にしなければならない。
(注)何らかの割り込みやイベントが発生した時には、緊急に他のプログラムルーチンへ脱出させる事は可能である。 手続処理型デ−タベ−ス言語の構造化された処理形態は、後から見た時に非常に分かり やすいプログラムになる。一方、プログラミング言語の場合は自在に組める為、スパゲテイのように入り組ん だ分かりにくいプログラムになりやすい。
デ−タベ−ス言語によるシステム開発で、最も要求される技術は、如何にして入れ子構造を組み立てるかである。各ル−プ(反復)処理をネストさせず(入れ子をまた がらせず)に、ル−プ処理を階層的に納めて行くかという技術である。階層構造型プログラミングは、分かりやすいプログラミング手法として、あらゆる手続処理型デ−タベ−ス言語に採用され ている。
|
階層構造型のプログラミングのポイントは次の2点である。 1 反復処理を見出す。 2 それら反復処理の上下関係を階層構造で把握する。
階層構造にならないプログラム例 複数の各々別々にル−プする処理が在ったとき、 下記の例の場合、これら異なるル−プ処理同志がネスト(階層をまたがる事)してはならない。
ex. A教室に60名、B教室に50名の生徒が居り、合計110人分の12ケ月分、(1人当たり12)x110人=1320レコードから成るファイルが有る。各レコードには1月から12月までの各月間合計点数と未集計の年間合計点数(12月分レコードのみに12ケ月分合計が集計、記録される)の月間合計点数フィールドが記録されている。これらのレコードで、両教室共男女生徒が混在する時、次の2種類の反復処理を行ないたい。 (1)男子の全生徒の1月から12月までの各月の点数を、12月分レコードの年間合計点数合計Aフィールドに足し込む。(処理A) (2)A教室の全生徒の1月から12月までの各月の点数を、12月分レコードの年間合計点数合計Aフィールドに足し込む(上記(1)と類似)。その後、年間合計点数合計Aフィールドを年間合計点数A教室分計(1変数)に合計する。(処理B)
上記例題では、処理Aで、一旦各生徒の年間合計点数合計Aを集計し、レコードに記録した後、処理Bで、それら年間合計点数合計Aを生徒数分集計し、年間合計点数A教室分計を算出している為、処理Bが処理Aの上位階層とみなされる。
| |