カテゴリー「クラス一般」の2件の記事

クラスでのインクルード使用について

以前にも書いたと思いますが、最近このキーワードで検索をされた方がいらっしゃったので、改めて書かせていただきます。

クラスからインクルードを使用することはまったく不可能ではありませんが、特殊な手順が必要になります。
たとえば、既存の一般的な定数インクルードをクラス内から使用するようなことはできないと思ってください。

では、どうすればよいかというと、定数インクルードの内容を、新規インタフェースで定義することになります。
このとき、定数が大量に定義済みの場合は、1つ1つをインタフェース定義画面で登録するのは手間ですので、定数インクルードの内容を、テキストファイルにダウンロードして、インタフェースの定義形式に編集してそのままコピーして、クラスビルダの「Goto」メニューの「Interface Section」で開いた画面に張り付ける方法をお勧めします。

定数名自体はインクルード中のものと同じであっても大丈夫です。
インタフェース作成以後は、インクルードの更新を停止し、インタフェースを更新するようにしてください。2重メンテは危険ですので。

クラスビルダでインタフェースを使用することを宣言しておけば、クラスからは、Alias が使用できますので、インタフェースで定義した cns_MyCompany のような定数を、そのまま cns_MyCompany として使用可能です。

レポートプログラムなどからは、インタフェース名=>cns_MyCompany となり、少々長くなりますが、特に問題はないでしょう。

| | コメント (0) | トラックバック (0)

クラス活用の勧め【再掲】

ABAPオブジェクトを活用されていますか?
皆さん汎用モジュールは使っていると思いますが、
クラスはあまり使っていないのではないでしょうか?
実は、クラスと汎用モジュールは共通点がたくさんあります。

比較で示すと、

汎用グループ → クラス
汎用モジュール → メソッド

となります。より精確には、

汎用モジュール → スタティックメソッド

です。
スタティックメソッドとは、クラスのインスタンス化
(Create Object命令でオブジェクトを生成すること)を
行わずに使用できるメソッドです。
スタティックメソッドは、汎用モジュールと変わりなく
使用することができます。

更に、クラスには汎用モジュールにない以下のメリットがあります。

1.有効化時にパラメータの型チェックが行われる。
2.インスタンス化することにより、1つのクラスからメソッドと属性の
  組み合わせを複数作れる。
3.外部からいじられたくないデータを可視性の指定でコントロールできる。
4.継承によって機能を拡張したり、用途を明確化したりできる。

プログラムのメンテナンス時に一番厄介なのは、グローバル変数
(内部テーブルを含む)ですが、上記の2.や3.をうまく使うと
余計なグローバル変数を減らすことができます。

ここまでは、汎用モジュールをクラスに置き換えるお話でしたが、
共通定数をクラス化することも可能です。
実際には、クラスの仲間のインタフェースを使用します。
インタフェースは、メソッドを持たない特殊なクラスです。
このインタフェースのスタティック属性(または定数)として
共通定数を定義します。
使用する際には、プログラムの最初で、

INTERFACE <インタフェース名> DEFINITION LOAD

命令を記述し、後はインタフェースの属性を参照するだけです。
たとえば、RANGEテーブルのOPTIONの値に’EQ'を設定する場合、
INTERFACE で定数 OPTION_EQ (参照データ型:CHAR2、値:’EQ')
を定義しておき、プログラム中では、

ZIF_CONST=>OPTION_EQ

で参照します。(ZIF_CONSTはインタフェース名)

以上のようにオブジェクト指向を意識しなくてもクラスを
活用することができます。大事なことは、クラスを使うことに
慣れておくことです。
SAP の製品のアップグレードにともなってクラスの重要性は
増しています。
スタティックなものから徐々にクラスに慣れて、
インスタンスを作成する本格的なオブジェクト指向のクラス利用に
ステップアップしてください。

続きを読む "クラス活用の勧め【再掲】"

| | コメント (0) | トラックバック (0)