1. 導入:なぜ今、COBOLで多態性なのか
レガシーな手続き型COBOLでは、処理の分岐に膨大なIF文やEVALUATE文が必要となり、機能拡張のたびに既存ロジックを修正するリスクがありました。しかし、COBOL 2002以降で導入されたオブジェクト指向機能、特に「多態性(ポリモーフィズム)」を活用すれば、呼び出し側は具体的なクラスを意識することなく、統一されたインターフェースで処理を実行できます。これにより、保守性が高く、変更に強いシステム設計が可能になります。
2. 基礎知識:多態性とは
多態性とは、同一のメッセージ(メソッド呼び出し)を送っても、受け取るオブジェクトの型によって異なる振る舞いをする仕組みです。
例えば、「計算する」というメソッドを、消費税計算クラスと割引計算クラスの両方に持たせたとします。呼び出し側がどちらのクラスであっても「計算メソッドを呼ぶ」と指示するだけで、実行時に適切な処理が自動的に選択されます。これにより、新しい計算ロジックを追加する際、呼び出し側のコードを一切変更する必要がなくなります。
3. 実装/解決策:インターフェースの活用
多態性を実現する鍵は「共通のメソッド名」を持つクラス群を定義することです。呼び出し側では、オブジェクト参照(OBJECT REFERENCE)を保持する変数を用意し、実行時に動的にインスタンスを割り当てます。INVOKE命令は、その変数に入っているインスタンスがどのクラスのものかを実行時に判断し、適切な処理を起動します。
4. サンプルプログラム
以下は、異なる計算ロジックをポリモーフィズムで呼び出す例です。
IDENTIFICATION DIVISION.
CLASS-ID. CALCULATOR-TEST.
PROCEDURE DIVISION.
- 共通のインターフェースを持つクラスを想定
- 税率計算クラス(TAX-CALC)と割引計算クラス(DISCOUNT-CALC)があるとする
LOCAL-STORAGE SECTION.
01 CALC-OBJ OBJECT REFERENCE ANY.
01 AMOUNT PIC 9(7) VALUE 1000.
01 RESULT PIC 9(7).
PROCEDURE DIVISION.
- 税率計算クラスのインスタンスを生成
INVOKE TAX-CALC “NEW” RETURNING CALC-OBJ.
- 同じINVOKE命令でポリモーフィズムが働く
INVOKE CALC-OBJ “EXECUTE-CALC” USING AMOUNT RETURNING RESULT.
DISPLAY “税計算結果: ” RESULT.
- 割引計算クラスのインスタンスに差し替え
INVOKE DISCOUNT-CALC “NEW” RETURNING CALC-OBJ.
- 呼び出し側のコードは変更不要
INVOKE CALC-OBJ “EXECUTE-CALC” USING AMOUNT RETURNING RESULT.
DISPLAY “割引計算結果: ” RESULT.
END CLASS.
5. 応用・注意点:現場で陥りやすい罠
注意点1:型チェックの重要性
OBJECT REFERENCE ANYを使用するとどんなオブジェクトも代入できてしまいますが、呼び出すメソッドが定義されていない場合、実行時に例外が発生します。可能であれば、継承関係にあるクラスやインターフェースを指定して、型安全性を確保することをお勧めします。
注意点2:デバッグの難易度
多態性は「実行時までどの処理が動くか分からない」という特性があるため、ソースコードを追うだけではロジックが追いづらい側面があります。クラス設計時には、メソッド名や引数のインターフェースを明確に定義し、ドキュメント化を徹底してください。
現場での工夫
既存の巨大なIF文の塊をリファクタリングする際は、まず「処理の共通点」を抽出してインターフェースを定義することから始めましょう。一度ポリモーフィズムを導入すると、後続の改修コストが劇的に下がります。

コメント