Sap-abap-classes
SAP ABAP-クラス
クラスはオブジェクトの形式を指定するために使用され、データ表現とそのデータを1つのきれいなパッケージに操作するためのメソッドを組み合わせます。 クラス内のデータと関数は、*クラスのメンバー*と呼ばれます。
クラスの定義と実装
クラスを定義するときには、データ型の設計図を定義します。 これは実際にはデータを定義しませんが、クラス名の意味、クラスのオブジェクトの構成要素、およびそのようなオブジェクトに対して実行できる操作を定義します。 つまり、属性、フィールド、プロパティなど、オブジェクトの抽象的な特性を定義します。
次の構文は、クラスを定義する方法を示しています-
クラス定義は、キーワードCLASSで始まり、クラス名、DEFINITION、およびクラス本体が続きます。 クラスの定義には、属性、メソッド、イベントなど、クラスのさまざまなコンポーネントを含めることができます。 クラス宣言でメソッドを宣言するとき、メソッド実装をクラス実装に含める必要があります。 次の構文は、クラスを実装する方法を示しています-
注-クラスの実装には、そのすべてのメソッドの実装が含まれます。 ABAPオブジェクトでは、クラスの構造には、属性、メソッド、イベント、タイプ、定数などのコンポーネントが含まれます。
属性
属性は、C、I、F、Nなどの任意のデータ型を持つことができるクラスのデータフィールドです。 それらはクラス宣言で宣言されます。 これらの属性は、インスタンス属性と静的属性の2つのカテゴリに分類できます。 *インスタンス属性*は、オブジェクトのインスタンス固有の状態を定義します。 状態はオブジェクトごとに異なります。 インスタンス属性は、DATAステートメントを使用して宣言されます。
- 静的属性*は、クラスのすべてのインスタンスによって共有されるクラスの共通状態を定義します。 つまり、クラスの1つのオブジェクトの静的属性を変更すると、その変更はクラスの他のすべてのオブジェクトにも表示されます。 静的属性は、CLASS-DATAステートメントを使用して宣言されます。
方法
メソッドは、クラス内のオブジェクトの動作を表す関数またはプロシージャです。 クラスのメソッドは、クラスの任意の属性にアクセスできます。 メソッドの定義にはパラメーターを含めることもできるため、メソッドが呼び出されたときにこれらのパラメーターに値を指定できます。 メソッドの定義は、クラス宣言で宣言され、クラスの実装部分で実装されます。 METHODおよびENDMETHODステートメントは、メソッドの実装部分を定義するために使用されます。 次の構文は、メソッドを実装する方法を示しています-
この構文では、<m_name>はメソッドの名前を表します。 注-CALL METHODステートメントを使用してメソッドを呼び出すことができます。
属性とメソッドへのアクセス
クラスコンポーネントは、これらのコンポーネントへのアクセス方法を制御するパブリック、プライベート、または保護された可視性セクションで定義できます。 プライベート可視性セクションは、クラス外からのコンポーネントへのアクセスを拒否するために使用されます。 このようなコンポーネントには、メソッドなどのクラス内からのみアクセスできます。
パブリック可視性セクションで定義されたコンポーネントには、どのコンテキストからもアクセスできます。 デフォルトでは、クラスのすべてのメンバーはプライベートです。 実際には、プライベートセクションでデータを定義し、パブリックセクションで関連メソッドを定義して、次のプログラムに示すようにクラスの外部から呼び出せるようにします。
- クラスのPublicセクションで宣言された属性とメソッドには、そのクラスと他のクラス、プログラムのサブクラスからアクセスできます。
- クラスの保護セクションで属性とメソッドが宣言されている場合、それらのクラスとサブクラス(派生クラス)のみがそれらにアクセスできます。
- 属性とメソッドがクラスのPrivateセクションで宣言されている場合、それらのクラスのみがアクセスでき、他のクラスはアクセスできません。
例
上記のコードは、次の出力を生成します-
静的属性
静的属性は、CLASS-DATAステートメントで宣言されます。 すべてのオブジェクトまたはインスタンスは、クラスの静的属性を使用できます。 静的属性には、class_name⇒name_1= 'Some Text’のようなクラス名を使用して直接アクセスします。
例
以下は、行番号4〜8回のテキストを印刷するプログラムです。 クラスclass1を定義し、パブリックセクションでCLASS-DATA(静的属性)とメソッドを宣言します。 クラスとメソッドを実装した後、Start-Of-Selectionイベントで静的属性に直接アクセスします。 次に、クラスのインスタンスを作成し、メソッドを呼び出します。
上記のコードは、次の出力を生成します-
コンストラクタ
コンストラクターは、オブジェクトの作成中またはクラスのコンポーネントへのアクセス中に自動的に呼び出される特別なメソッドです。 コンストラクターは、オブジェクトが作成されるたびにトリガーされますが、メソッドを呼び出して一般的なメソッドをトリガーする必要があります。 次の例では、2つのパブリックメソッドmethod1とコンストラクターを宣言しています。 これらのメソッドは両方とも異なる操作を行います。 クラスのオブジェクトの作成中に、コンストラクターメソッドがその操作をトリガーします。
例
上記のコードは、次の出力を生成します-
メソッドのME演算子
クラスのパブリックセクションで任意の型の変数を宣言すると、他の実装で使用できます。 変数は、パブリックセクションの初期値で宣言できます。 別の値を持つメソッド内で変数を再度宣言することができます。 メソッド内に変数を書き込むと、システムは変更された値を出力します。 変数の以前の値を反映するには、「ME」演算子を使用する必要があります。
このプログラムでは、パブリック変数text1を宣言し、値で開始しました。 同じ変数を再度宣言しましたが、異なる値でインスタンス化しました。 メソッド内で、「ME」演算子を使用してその変数を記述し、以前に開始された値を取得します。 直接宣言することにより、変更された値を取得します。
例
上記のコードは、次の出力を生成します-