サブモジュールを使うことにより、擬似的な継承が可能となります。
| 基本クラス |
H*---------------------------------------------------------------*
H* NOTES : RPGによる擬似的クラス実装のためのコーディング例
H*---------------------------------------------------------------*
H NOMAIN * サブモジュール
D**-------------------------------------------------------------**
D** 定義 **
D**-------------------------------------------------------------**
D* 属性定義(プライベート)
D A S 1 0
D B S 1 0
D* 操作定義(パプリック)
D SET_A PR
D 1 0
D SET_B PR
D 1 0
D GET_A PR 1 0
D GET_B PR 1 0
D SUM PR 2 0
P*****************************************************************
P** 操作実装 **
P*****************************************************************
P*----------------------------------------------------------------
P* SET_A 属性A に値をセットする
P* 引数 セットする値
P* 戻り値 なし
P*----------------------------------------------------------------
P SET_A B EXPORT * EXPORTにより
D* パラメータ * パブリックとなる
D SET_A PI
D PI@A 1 0
C* 処理
C EVAL A = PI@A
P SET_A E
P*----------------------------------------------------------------
P* SET_B SET_A と同様のため」省略
P*----------------------------------------------------------------
P SET_B B EXPORT * EXPORTにより
D* パラメータ * パブリックとなる
D SET_B PI
D PI@A 1 0
C*処理
C EVAL B = PI@A
P SET_B E
P*----------------------------------------------------------------
P* GET_A A の値を返す
P* 引数 なし
P* 戻り値 A
P*----------------------------------------------------------------
P GET_A B EXPORT * EXPORTにより
D* パラメータ * パブリックとなる
D GET_A PI 1 0
C RETURN A
P GET_A E
P*----------------------------------------------------------------
P* GET_B B の値を返す
P* 引数 なし
P* 戻り値 B
P*----------------------------------------------------------------
P GET_B B EXPORT * EXPORTにより
D* パラメータ * パブリックとなる
D GET_B PI 1 0
C RETURN B
P GET_B E
P*----------------------------------------------------------------
P* SUM A + B の値を返す
P* 引数 なし
P* 戻り値 A + B
P*----------------------------------------------------------------
P SUM B EXPORT * EXPORTにより
D* パラメータ * パブリックとなる
D SUM PI 2 0
D* ローカル変数 1
D X S 2 0
C* 処理
C EVAL X = A + B
C RETURN X
P SUM E
|
| 派生クラス (SUMBの機能を追加) |
H*---------------------------------------------------------------*
H* NOTES : RPGによる擬似的クラス実装のためのコーディング例
H*---------------------------------------------------------------*
H NOMAIN * サブモジュール
D**-------------------------------------------------------------**
D** 定義 **
D**-------------------------------------------------------------**
D* 属性定義(プライベート)
D C S 1 0
D* 操作定義(パプリック)
D SET_C PR
D 1 0
D SUMB PR 2 0
D* CALSS A の継承
D SET_A PR
D 1 0
D SET_B PR
D 1 0
D GET_A PR 1 0
D GET_B PR 1 0
P*****************************************************************
P** 操作実装 **
P*****************************************************************
P*----------------------------------------------------------------
P* SET_C 属性 C に値をセットする
P* 引数 セットする値
P* 戻り値 なし
P*----------------------------------------------------------------
P SET_C B EXPORT * EXPORTにより
D* パラメータ * パブリックとなる
D SET_C PI
D PI@C 1 0
C* 処理
C EVAL C = PI@C
P SET_C E
P*----------------------------------------------------------------
P* SUM A + B + C の値を返す
P* 引数 なし
P* 戻り値 A + B + C
P*----------------------------------------------------------------
P SUMB B EXPORT * EXPORTにより
D* パラメータ * パブリックとなる
D SUMB PI 2 0
D* ローカル変数 1
D X S 2 0
C* 処理
C EVAL X = GET_A + GET_B + C
C RETURN X
P SUMB E
|
| クラスを使う |
H*---------------------------------------------------------------*
H* NOTES : RPGによる擬似的クラス実装のためのコーディング例
H*---------------------------------------------------------------*
H DATEDIT(*YMD/) * サブモジュール
D**-------------------------------------------------------------**
D** 定義 **
D**-------------------------------------------------------------**
D* CLASS B の継承
D SET_C PR
D 1 0
D SUMB PR 2 0
D* CALSS A の継承
D SET_A PR
D 1 0
D SET_B PR
D 1 0
D*GET_A PR 1 0
D*GET_B PR 1 0
D*****************************************************************
D** MAIN
D*****************************************************************
D* パラメータ * パブリックとなる
D L@A S 1 0
D L@B S 1 0
D L@C S 1 0
D L@X S 2 0
C* 処理
C EVAL L@A = 1
C EVAL L@B = 2
C EVAL L@C = 3
C CALLP SET_A(L@A)
C CALLP SET_B(L@B)
C CALLP SET_C(L@C)
C EVAL L@X = SUMB
C SETON LR
C RETURN
|