ILE(=Integrated Language Enviroment:統合化開発環境)
のプログラムの作成で大きな誤解をする場合がある。
_
ILEとは複数のオブジェクトを統合化、つまり複数の異なるオブジェクトを
まとめて、ひとつに新しいオブジェクトを作成する技術のことである。
これは話の奥があるのでまた別の機会にも解説する。
これは複数のオブジェクトをまとめる、つまり
CRTPGM コマンドによって
①複数のモジュール(*MODULE)をまとめる
②複数のサービス・プログラムをまとめる。
という2つの方法がある。
■ ① 複数のモジュール(*MODULE)をまとめてひとつの
プログラム(*PGM)を生成する。
CRTRPGMOD QTEMP/PGM001 SRCFILE(…. (モジュールをいっぱい作成して)
CRTRPGMOD QTEMP/PGM002 SRCFILE(…
:
CRTRPGMOD QTEMP/PGM010 SRCFUILE(…
CRTPGM PGM(OBJLIB/PGM001) MODULE(QTEMP/PGM001
QTEMP/PGM002 (すべてのモジュールをまとめて
: ひとつのプログラムとする)
QTEMP/PGM010)
■ ②複数のサービス・プログラム(*SRVPGM) をまとめて
ひとつのプログラムを生成する。
CRTRPGMOD QTEMP/PGM001 SRCFILE(…. (やはり各モジュールは作成するが)
CRTRPGMOD QTEMP/PGM002 SRCFILE(…
CRTSRVPGM QTEMP(PGM002) SRCFILE(
:
CRTRPGMOD QTEMP/PGM010 SRCFUILE(…
CRTSRVPGM QTEMP(PGM010) SRCFILE(
(メイン・モジュール以外はサービス・プログラムとして作成する)
CRTPGM PGM(OBJLIB/PGM001) MODULE(QTEMP/PGM001)
BNDSRVPGM(OBJLIB/PGM002 . …. OBJLIB.PGM010) (各サービス・プログラムとメイン・モジュールをまとめて
プログラムを生成する)
_
さてどちらの方法が正しいのだろうか?
①すべてのモジュールをバインドしてひとつのプログラムにまとめる
②メイン・モジュールだけをプログラムとして作成して残りのモジュールは
すべてサービス・プログラムとして作成しておき実行時にバイントして
サービス・プログラムを読み込むようにする。
IBMとしてはどちらの方法も可能としているのであるが
正解は②である。
①の場合は最終的に生成されたプログムのオブジェクトの中に
プログラムPGM002~PGM010のすべてのオブジェクトが含まれたものとして
プログラムPGM001が生成されている。
もしこの後プログラム PGM010に変更があったとすると
PGM010の再コンパイルはもちろんのこと、
最終的なPGM001も再コンパイルつまり再バインドが必要となる。
②の場合はプログラムPGM002~PGM010はサービス・プログラム(*SRVPGM)
として作成されているのでコレラノオブジェクトは最終的なPGM001には
含まれていない。
実行時に初めてPGM001はPGM002~PGM010をインクルードして
メモリー(CPU)に呼び出して実行するのである。
これが真のオブジェクト指向のILE構造である。
ところであなたはIBM iをリリースアップしたときにRPGも再コンパイル
したことはありがろうか?
そんな無駄なことはしなくてもよいはずである。
実はRPGの演算命令も下位レベルではサービス・プログラム(*SRVPGM)として
構成されているので OSをリリース・アップしてもユーザーのプログラムは
再コンパイルの必要がないのである。
例えばあるソフトウェア製品のフレーム・ワークを使ってユーザーが
開発するときにそのフレーム・ワークでは製品がモジュールとして
提供されていたとするとコンパイルをしてユーザー・プログラムを
作成した後でソフトウェア製品に変更があったとする。
その変更をユーザーのプログラムに反映するには
作成済のユーザーのプログラムも再作成しなければならない。
こんな無駄なことをお客さまに要求できないので
そのソフトウェア製品ではPTFを発行することが
できないというかないのである。
購入後、一度もリリース・アップやPTFの適用が
ないソフトウェア製品は①のパターンで開発されたものと
思ってまちがいない。
要は開発会社がILEを理解していないからである。
現実にこのような開発をしているソフトウェア会社は
知っているだけで2社あった。
一社は関東の会社であるが廃業してしまった。
もう一社はリリース・アップもなしで保守契約と称して
保守料金がけを集めているようである。
このようなILEの構造はVisualC++などのオープン系でも同じことで
オブジェクト(.obj)を一時的に作成してそこから.dll(=*SRVPGMと同じ)
または .exe (=*PGMと同じ)を作成する手法である。
普通のIBMユーザーではこのような稚拙な間違いは
あまりなく弊社のお客さまでは②の方法で
正しくILEで開発しているようで安心している。
残念ながらソフトウェア会社のほうが
勉強する時間が少ないのかILEを誤解しているようである。
[結論]
複数のオブジェクトをまとめてひとつのオブジェクト・プログラムを
生成する場合はメイン・モジュールはひとつだけで
その他のオブジェクトはサービス・プログラムとしてバインドすることが
正しいILEの構成方法である。
