RPG

354. ウォーター・フォール式とイベント・ドリブン式

プログラムの処理構造は大きく分けて

・ウォーター・フォール式

・イベント・ドリブン式

の2つの方式がある。
前者のウォーター・フォール式というのは我々が使っているRPGCOBOLそれに
C/400などの言語でありメイン・ルーチンがあり
ロジックの始まりから終わりまでを記述する方式である。
プログラムをRPGやCOBOLで始めた方にとってはこれが普通であり
「それがどうした?」というところである。

これに対してイベント・ドリブン式とは何かイベントつまり
エンド・ユーザーがボタンを押したとか実行キーを押したとかのような
操作上のトリガーとなる挙動(イベント)が発生したときだけの
処理を記述するのがイベント・ドリブン式である。

JavaVisualBASIC, VisualC++などがこれに相当する。
Javaのようなイベント・ドリブン式からプログラムの入門となった人にとっては
先のメイン・ルーチンがあることが非常にわかりづらいらしい。
ここがオープン系の開発者がRPGに馴染めない理由のようである。

実はイベント・ドリブン(駆動)の VBやVC++もかつてはメイン・ルーチン
存在していた。(BASICやC++にはメイン・ルーチンが必要)
Microsoftがメイン・ルーチンをOSの中に隠してしまって
イベント・ハンドラだけを書きなさいというふうに変えてしまったので
イベント・ドリブン型の開発者が育ってしまったというわけである。

ウォーター・フォール式の場合はプログラム全体を見渡して考えなければ
ならないし一本のプログラムだけですべてのイベントも処理の流れも
制御するので莫大なプログラムになってしまう。

これに対してイベント・ドリブン(駆動)の場合はイベントに対する
プログラム(=イベント・ハンドラーと呼ぶ)だけに集中すればよいので
考える範囲は圧倒的に狭い範囲で済む。
つまり初心者でも書きやすい。
ただしイベント・ハンドラー個々が独立する傾向にあるので
ひとつの画面の処理に数多くのイベント・ハンドラーで処理し
結局プログラム本数は増えてしまう傾向にある。

これはIBMユーザーにとって一見、非効率なように思えるかも知れないが
イベント・ハンドラーは単純な処理となるので
いろいろな適用業務で共有して使える場面が多くなる。
例えばIBM iのユーティリティなどで「F21=すべての選択」という
操作があるがいろいろな場面で見かけたことがあると思う。
恐らくはそれらは同じ一本のプログラム(=イベント・ハンドラー)である。

このように品質が保証されたオブジェクトを組み合わせて再利用することを
オブジェクト指向と呼ぶ。

開発の方向はまちがいなくウォーター・フォール式からイベント・ドリブン式に
向っている。

実はIBM iのi5/OSそのものはウォーター・フォール式ではなく
オブジェクト指向によるイベント・ドリブン式によって開発されている。