プログラム学習室 http://studyhallweb.com/

AS/400 RPG サブモジュールの例

サブモジュールの使い方

サブモジュールを使うことにより、擬似的な継承が可能となります。

基本クラス

     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