【COBOL学習|豆知識】モダンCOBOLの隠れた武器!PROPERTY句でGetter/Setterをスマートに実装しよう

導入:なぜPROPERTY句が重要なのか

長年COBOLに携わっていると、データ項目へのアクセス制御のために、わざわざGetter(取得用)やSetter(設定用)のメソッドを記述することに「冗長だな」と感じたことはありませんか?特にオブジェクト指向COBOLでは、カプセル化のために変数を隠蔽し、メソッド経由でアクセスするのが定石です。しかし、この作業はコード量を増やし、保守性を下げる要因にもなります。そこで役立つのが、COBOL 2002から導入されたPROPERTY句です。これを使うことで、面倒なメソッド定義を省略し、コードを劇的に簡潔化できます。

基礎知識:PROPERTY句とは何か

通常、オブジェクトの属性(データ項目)を外部から操作する場合、メソッドを定義して値をやり取りします。PROPERTY句をデータ項目に付与すると、コンパイラが自動的にその項目に対するGetter(取得)メソッドとSetter(設定)メソッドを生成してくれます。つまり、プログラマはメソッドを一つずつ書かなくても、「プロパティ」という仕組みを通じて、安全かつ簡潔にデータへアクセスできるようになるのです。

実装:PROPERTY句の活用手順

実装は非常にシンプルです。クラス定義内のWORKING-STORAGE SECTION等で、対象のデータ項目に「PROPERTY」と記述するだけです。これにより、外部からはそのデータが直接公開されているかのように見える一方で、内部的にはメソッドを経由した安全なアクセスが保証されます。

サンプルプログラム

以下は、顧客名を扱うクラスでPROPERTY句を使用した例です。

IDENTIFICATION DIVISION.
CLASS-ID. Customer.

WORKING-STORAGE SECTION.

  • PROPERTY句を付与することで、CustNameへの自動的なアクセス手段が提供されます

01 CustName PIC X(20) PROPERTY.

END CLASS Customer.

  • — 利用側のコード例 —

IDENTIFICATION DIVISION.
PROGRAM-ID. MainApp.

PROCEDURE DIVISION.

  • オブジェクトの生成(環境依存)

INVOKE Customer “NEW” RETURNING myCust

  • セッターの呼び出し(PROPERTYにより自動生成)

INVOKE myCust “SET-CustName” USING “山田 太郎”

  • ゲッターの呼び出し(PROPERTYにより自動生成)

INVOKE myCust “GET-CustName” RETURNING ws-result

DISPLAY “顧客名: ” ws-result
GOBACK.

応用・注意点:現場での運用テクニック

PROPERTY句を導入する際の注意点として、読み取り専用にしたい場合は「PROPERTY GET ONLY」といったオプションが使える実装系もあります。また、自動生成されるメソッド名は、コンパイラの実装仕様により「SET-項目名」や「SET項目名」のように形式が異なる場合があります。

現場での最大の利点は、「後からアクセス制限をかけたい」と思った時に、プロパティ化していれば実装コードに触れることなく、内部のGetter/Setterメソッドを修正するだけで対応できるという点です。最初からPROPERTY句を活用して、保守性の高いクラス設計を心がけましょう。

コメント

タイトルとURLをコピーしました