飯島 裕一(NEC 第二システムソフトウェア事業部)
前回は、COBOLのファイルは大量データ処理向けに最適というお話しをしました。
今回もCOBOLのファイルについてお話しをしたいと思います。
つねづね思っているのですが、「COBOLのファイル」機能は、オブジェクト指向的な考え方で、言語仕様の中に組み込まれたのではないか、ということです。
どういうことか、もう少し説明をします。
オブジェクト指向は、ひとことで言うと、ソフトウェア対象領域の中から、データと、そのデータに関連する手続きとを抽出し、それらをひとくくりにして「オブジェクト」として捉える考え方です。
COBOLの言語仕様が作られた40数年前、その当時は、当然ながらオブジェクト指向というパラダイムも知られていなかった時代ですが、事務処理には欠かせないファイルおよび、そのファイルに関する手続き(入出力操作)を「オブジェクト」として捉え、COBOL言語機能として組み込んだのではないかと思うのです。
もう少し詳しく説明します。
オブジェクト指向言語でプログラムを作るとき、既存オブジェクト(クラス)を再利用することが生産性につながる大きなポイントになります。そして再利用するためには、オブジェクト(クラス)の動作仕様が、きちんと明確化されていなければなりません。
一方、「COBOLのファイル」は、COBOLの中で言語仕様としてきちんと明確化されており、ファイルの概念・動作仕様は、言語説明書に厳密に記載されています。そして、これは丁度、COBOL言語機能の中に組み込まれた「COBOLのファイル」というオブジェクト(クラス)の動作仕様を説明している、と捉えることができると思うのです。
そう捉えて「COBOLのファイル」の言語機能をもう少し詳しく見てみたいと思います。
COBOLでは、そのプログラムで使用するファイルを環境部で定義します。その定義により、プログラムの中で使用する具体的なファイル名と、ファイル編成、呼び出しモードが決まります。
SELECT 顧客マスタファイル ASSIGN TO 〜 ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC.
上記は呼び出しモードが動的(DYNAMIC)である索引編成(INDEXED)の 顧客マスタファイルを定義しています。
このCOBOLのファイル定義ですが、COBOL言語システムにあらかじめ規定されている「COBOLのファイル」というクラスから、プログラムの中で使う具体的なインスタンス「顧客マスタファイル」を定義している、と見ることができないでしょうか。
例えばJavaでの次のようなオブジェクトの生成操作に該当します。
CCBLFile kokyaku = new CCBLFile (INDEXED, MODE_DYNAMIC)
ここで、CCBLFile は、「COBOLのファイル」に相当するクラス、INDEXEDは索引編成ファイルを指定するパラメータ、MODE_DYNAMICは動的呼び出しを指定するパラメータという想定です。
kokyaku には、索引編成ファイルの具体的なオブジェクト(インスタンス)が設定されます。
また、COBOLでは、環境部で定義されたファイルは、手続きの中で、OPEN、CLOSE、READ、WRITE、REWRITE、DELETEなどの入出力文で参照ができます。
OPEN I-O 顧客マスタファイル ・・・ ファイルのオープン READ 顧客マスタファイル ・・・ レコードの読込み REWRITE 顧客マスタレコード ・・・ レコードの更新
これらの入出力文は、オブジェクト指向的な見方をすると「COBOLのファイル」にあらかじめ定義されている手続き(メソッド群)と見ることができないでしょうか。
Javaでは次のように記述することができます。
kokyaku.open(); ・・・ ファイルのオープン kokyaku_rec = kokyaku.read(); ・・・ レコードの読込み (kokyaku_recはレコード領域) kokyaku.rewrite(kokyaku_rec); ・・・ レコードの更新 :
ここで、open(),read(),rewrite() は、CCBLFileクラスに定義されているメソッドという想定です。
いかがでしょうか。
COBOL言語は、実存するファイルをオブジェクトとして捉えて言語仕様をサポートしたからこそ、ファイルの取り扱いが簡単・直感的なのだと思うのです。
以上