!--a11y-->
オブジェクト指向モデルの中心は、属性(データ)とメソッド(機能)を格納するオブジェクトです。オブジェクトを利用することで、プログラマは現実の問題をマッピングし、ソフトウェアソリューションを1対1で提供することができるはずです。ビジネス環境における代表的なオブジェクトは、たとえば、‘得意先’、‘指図’、または‘請求書’です。リリース
3.1 以降では、ビジネスオブジェクトリポジトリ( BOR )にそのようなオブジェクトの例が含まれています。 ABAP のオブジェクト指向拡張である ABAP オブジェクトのオブジェクトモデルは、 BOR のオブジェクトモデルと互換性があります。R/3
リリース 4.0 以前で ABAP におけるオブジェクトに最も近いのは、汎用モジュールと汎用グループです。指図処理のための汎用グループがあるとします。指図の属性は汎用グループのグローバルデータに相当するのに対し、個別の汎用モジュールはそのデータを取り扱うアクション(メソッド)を表します。つまり、実際の指図データは汎用グループにカプセル化され、直接呼び出されることは絶対になく、汎用モジュールを通じて呼び出されます。このように、汎用モジュールによってデータの整合性が確保されます。次の例は簡単なカウンタの場合の汎用グループのオブジェクト指向の側面を示すものです。

COUNTER
という名称の汎用グループがあるとします。FUNCTION-POOL COUNTER.
DATA COUNT TYPE I.
FUNCTION SET_COUNTER.
* Local Interface IMPORTING VALUE(SET_VALUE)
COUNT = SET_VALUE.
ENDFUNCTION.
FUNCTION INCREMENT_COUNTER.
ADD 1 TO COUNT.
ENDFUNCTION.
FUNCTION GET_COUNTER.
* Local Interface: EXPORTING VALUE(GET_VALUE)
GET_VALUE = COUNT.
ENDFUNCTION.
汎用グループにはグローバル整数項目
COUNT 、そしてこの項目を使用する SET_COUNTER 、 INCREMENT_COUNTER 、 GET_COUNTER という3つの汎用モジュールがあります。汎用モジュールのうち2つには、入力パラメータと出力パラメータがあります。これらが汎用グループのデータインタフェースとなります。どの
ABAP プログラムもこの汎用グループを使用することができます。たとえば次のようにします。DATA NUMBER TYPE I VALUE 5.
CALL FUNCTION 'SET_COUNTER' EXPORTING SET_VALUE = NUMBER.
DO 3 TIMES.
CALL FUNCTION 'INCREMENT_COUNTER'.
ENDDO.
CALL FUNCTION 'GET_COUNTER' IMPORTING GET_VALUE = NUMBER.
この部分のプログラムの処理が終わると、プログラム変数
NUMBER の値が8となります。プログラム自身は汎用グループ内の
COUNT 項目にアクセスすることができません。この項目での作業は汎用モジュールに完全にカプセル化されています。プログラムが汎用グループとやりとりを行うことができるのは、汎用モジュールを呼び出す場合にかぎります。ABAP
プログラムを実行すると、新しい内部セッションが開始されます。内部セッションには、 ABAP プログラムとその関連データを含むメモリ領域があります。汎用モジュールを呼び出すと、そのメインプログラム、すなわち汎用グループ全体とデータが内部セッションのメモリ領域にロードされます。
内部セッションのメモリ領域内の汎用グループは、オブジェクト指向で言うオブジェクトとほとんど同じです(
オブジェクト指向とは何か?の定義と比較してください)。汎用モジュールを呼び出すと、呼出元プログラムは汎用モジュールビルダの記述にもとづいて汎用グループの実行時インスタンスを使用します。オブジェクト指向と汎用グループの大きな相違は、プログラムが複数の汎用グループのインスタンスを同時に操作することができるのに対し、1つの汎用グループの複数のインスタンスを操作することができない点です。同時に複数の独立したカウンタを使用したり、複数の指図を処理したいプログラムがあるとします。この場合、たとえばインスタンスを区別するための番号を使用して、インスタンスの管理を導入するように汎用グループを調整しなければなりません。
実際上、これは大変なことです。したがって、通常は、データは呼出元プログラムに格納され、汎用モジュールは使用時に呼び出されます。この方法で問題となるのは、汎用モジュールを使用するすべてのプログラムが汎用グループ自身と同じデータ構造を使用しなければならないことです。汎用グループの内部データ構造を変更すると、多数のユーザに影響を与えることになり、また、多くの場合、変更の影響を予測するのは困難です。この弊害を回避する唯一の方法は、インスタンス、および実行時インスタンスの内部構造を外に出さないような手法を多用して、あとで問題が生じないように変更することです。
この必要条件はオブジェクト指向によって解決されます。
ABAP オブジェクトにより、データと機能を汎用グループではなく、クラスで定義することができます。クラスを使用することで、 ABAP プログラムは同じテンプレートをもとにした任意の数の実行時インスタンスを操作することができます。汎用モジュールを呼び出すときに汎用グループの実行時インスタンスを1つ自動的にメモリにロードする代わりに、
ABAP プログラムは新しい ABAP 命令 CREATE OBJECT を使用して明示的にクラスの実行時インスタンスを生成することができます。個別の実行時インスタンスは一意のオブジェクトを表します。これらのインスタンスにアドレスするにはオブジェクト参照を使用します。オブジェクト参照は新しい ABAP データ型です。これ以降のセクションでは、
ABAP オブジェクトにおけるクラス、オブジェクト、オブジェクト参照について詳しく説明します。