導入:なぜ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句を活用して、保守性の高いクラス設計を心がけましょう。

コメント