| パラダイム | オブジェクト指向、構造化、命令型 |
|---|---|
| デザイン: | SAP SE |
| 初登場 | 1983年 |
| 安定リリース | 7.58 [1]
/ 2023年10月26日 |
| タイピングの規律 | 静的、強い、安全、主格 |
| OS | クロスプラットフォーム |
| Webサイト | コミュニティ |
| 主な実装 | |
| SAP R/2、SAP R/3、SAP S/4HANA | |
| 影響を受けた | |
| Objective-C、[要出典] COBOL、[要出典] SQL [要出典] | |
ABAP(Advanced Business Application Programming、元々はAllgemeiner Berichts-Aufbereitungs-Prozessor、ドイツ語で「一般レポート準備プロセッサ」[2])は、ドイツのソフトウェア会社SAP SEによって作成された高水準プログラミング言語です。現在はJavaと並んで、ビジネスアプリケーションを構築するためのSAP NetWeaverプラットフォームの一部であるSAP NetWeaver Application Serverのプログラミング言語として位置付けられています。
導入
ABAP は、1980 年代に初めて開発された、アプリケーション固有の第 4 世代言語 ( 4GL ) の 1 つです。元々は、大企業が資材管理や財務会計、管理会計用のメインフレーム ビジネス アプリケーションを構築できるようにしたプラットフォームである SAP R/2のレポート言語でした。
ABAP は、かつてはドイツ語で「汎用レポート準備プロセッサ」を意味するA llgemeiner B erichts- A ufbereitungs- P rozessorの略語でしたが、後に[いつ? ]英語のA dvanced B usiness A pplication P rogrammingに改名されました。ABAP は、論理データベース(LDB)の概念を取り入れた最初の言語の 1 つで、あらゆるプラットフォーム、言語、ユニットをサポートする基本データベース レベルから高度な抽象化を提供します。
ABAP 言語は、もともと開発者がSAP R/3プラットフォームを開発するために使用されていました。また、SAP 顧客が SAP アプリケーションを拡張するためにも使用されることが想定されていました。顧客は ABAP プログラミングを使用してカスタム レポートやインターフェイスを開発できます。この言語は、プログラミング経験のあるより技術的な顧客向けに設計されました。
ABAP は、SAP が 1992 年に初めてリリースしたクライアント サーバーR/3システムのプログラムを作成するための言語として今も使用されています。1990 年代を通じてコンピュータ ハードウェアが進化するにつれ、SAP のアプリケーションとシステムはますます ABAP で記述されるようになりました。2001 年までに、最も基本的な機能以外はすべて ABAP で記述されました。1999 年、SAP は R/3 リリース 4.6 とともに、ABAP オブジェクトと呼ばれる ABAP のオブジェクト指向拡張機能をリリースしました。
SAP の現在の開発プラットフォームNetWeaver は、 ABAP とJava の両方をサポートしています。
ABAP は、ビジネス アプリケーション、オペレーティング システム、データベース間の抽象化を実現します。これにより、アプリケーションが特定のサーバーまたはデータベース プラットフォームに直接依存することがなくなり、あるプラットフォームから別のプラットフォームに簡単に移植できるようになります。
SAP Netweaverは現在、UNIX(AIX、HP-UX、Solaris、Linux)、Microsoft Windows、IBM System i(旧iSeries、AS/400)上のi5/OS 、 IBM System z(旧zSeries、S/390)上のz/OSで動作します。サポートされているデータベースは、 HANA、SAP ASE(旧Sybase)、IBM Db2、Informix、MaxDB、Oracle、Microsoft SQL Serverです(InformixのサポートはSAP Basisリリース7.00で廃止されました)。[3]
ABAP ランタイム環境
すべての ABAP プログラムは、SAP データベース内に存在します。Java または C++ プログラムのように、独立した外部ファイルには保存されません。データベースでは、すべての ABAP コードは、ABAP Workbench ツールを使用して表示および編集できるソース コードと、Javaバイトコードに多少匹敵するバイナリ表現である生成コードの 2 つの形式で存在します。ABAP プログラムは、SAP カーネルの一部であるランタイム システムの制御下で実行されます。ランタイム システムは、ABAP ステートメントの処理、画面のフロー ロジックの制御、イベントへの応答 (ユーザーが画面ボタンをクリックするなど) を担当します。この点では、 Java VM に匹敵する仮想マシンと見なすことができます。ABAP ランタイム システムの主要コンポーネントは、データベース インターフェースです。これは、データベースに依存しない ABAP ステートメント (「オープン SQL」) を、基盤となる DBMS が理解できるステートメント (「ネイティブ SQL」) に変換します。データベース インターフェースは、ABAP プログラムに代わってリレーショナル データベースとのすべての通信を処理します。また、アプリケーション サーバーのローカル メモリ内のテーブルや頻繁にアクセスされるデータのバッファリングなどの追加機能も備えています。
SAP システムとランドスケープ
すべての SAP データが存在し、すべての SAP ソフトウェアはSAP システムのコンテキスト内で実行されます。システムは、中央のリレーショナル データベースと、このデータベース内のデータとプログラムにアクセスする 1 つ以上のアプリケーション サーバー (「インスタンス」) で構成されます。SAP システムには少なくとも 1 つのインスタンスが含まれますが、主にサイズとパフォーマンス上の理由から、インスタンスが複数含まれる場合もあります。複数のインスタンスがあるシステムでは、負荷分散メカニズムによって、使用可能なアプリケーション サーバーに負荷が均等に分散されます。
Web アプリケーション サーバーのインストール(ランドスケープ) は、通常、開発用、テストおよび品質保証用、および本番用の 3 つのシステムで構成されます。ランドスケープには、より多くのシステム (ユニット テストと本番前テスト用の別々のシステムなど) が含まれる場合もあれば、より少ないシステム (開発と本番のみで、QA は別々ではないなど) が含まれる場合もありますが、それでも 3 つが最も一般的な構成です。ABAP プログラムは、開発システムで作成され、最初にテストされます。その後、ランドスケープ内の他のシステムに配布されます。これらのアクションは、変更および移送システム (CTS) の制御下で実行されます。CTS は、同時実行制御 (2 人の開発者が同じコードを同時に変更できないようにするなど)、バージョン管理、および QA システムと本番システムへのプログラムの展開を担当します。
Webアプリケーション サーバーは、データベース レイヤー、アプリケーション レイヤー、プレゼンテーション レイヤーの 3 つのレイヤーで構成されています。これらのレイヤーは、同じ物理マシンまたは異なる物理マシンで実行できます。データベース レイヤーには、リレーショナル データベースとデータベース ソフトウェアが含まれます。「アプリケーション レイヤー」のナレッジには、システムのインスタンスが含まれます。ビジネス トランザクションや ABAP 開発を含むすべてのアプリケーション プロセスは、アプリケーション レイヤーで実行されます。プレゼンテーションレイヤーは、システムのユーザーとのやり取りを処理します。ABAP アプリケーション サーバーへのオンライン アクセスは、「SAP GUI」と呼ばれる独自のグラフィカル インターフェイスまたは Web ブラウザーを介して行うことができます。
ソフトウェア レイヤー
ABAP ソフトウェアはソフトウェア コンポーネントにデプロイされます。例は次のとおりです。
- SP_BASIS は、すべての ABAP システムに必要な技術ベース レイヤーです。
- SAP_ABAには、ビジネス パートナーやアドレス管理など、あらゆる種類のビジネス アプリケーションに必要な機能が含まれています。
- SAP_UI は、 SAP UI5 アプリケーションを作成する機能を提供します。
- BBPCRMはビジネスアプリケーション(この場合はCRMアプリケーション)の例です。
- SAP ABAP はERP プログラミング言語です。
取引
SAP 用語におけるトランザクションとは、プログラムの実行のことです。SAP システムで ABAP コードを実行する通常の方法は、トランザクション コードを入力することです (たとえば、VA01 は「販売注文の作成」のトランザクション コードです)。ABAP 開発者が使用する一般的なトランザクション コード (T コード) は、SE38、SE09、SE10、SE24、SE11、SE16N、SE80、SE37、ST22 などです。[4] [5]トランザクションは、システム定義またはユーザー固有のロールベースのメニューから呼び出すことができます。また、トランザクション コードをコマンド フィールドに直接入力して開始することもできます。コマンド フィールドは、すべての SAP 画面に存在します。トランザクションは、ABAP ステートメント CALL TRANSACTION および LEAVE TO TRANSACTION を使用してプログラム的に呼び出すこともできます。トランザクションの一般的な概念は、SAP用語では論理作業単位 (LUW) と呼ばれます。
ABAPプログラムの種類
他のプログラミング言語と同様に、ABAP プログラムは実行可能ユニットまたはライブラリのいずれかであり、他のプログラムに再利用可能なコードを提供し、独立して実行することはできません。
ABAP は、実行可能プログラムを 2 種類区別します。
- レポート
- モジュールプール
レポートは比較的単純なプログラミング モデルに従います。このモデルでは、ユーザーはオプションで一連のパラメータ (データのサブセットの選択など) を入力し、プログラムは入力パラメータを使用してインタラクティブ リストの形式でレポートを作成します。レポートはデータの変更も行えるため、「レポート」という用語は多少誤解を招く可能性があります。これらのプログラムがレポートと呼ばれる理由は、生成される出力が「リスト指向」であるためです。
モジュール プールは、画面のコレクションを使用して、より複雑なユーザー インタラクションのパターンを定義します。「画面」という用語は、ユーザーが見る実際の物理的なイメージを指します。各画面には「フロー ロジック」もあります。これは、画面によって暗黙的に呼び出される ABAP コードを指し、「PBO」(出力前のプロセス) セクションと「PAI」(入力後のプロセス) セクションに分かれています。SAP ドキュメントでは、「dynpro」(動的プログラム) という用語は、画面とそのフロー ロジックの組み合わせを指します。
実行不可能なプログラムの種類は次のとおりです。
- INCLUDE モジュール– これらは生成時に呼び出しユニットに組み込まれます。大規模なプログラムを細分化するためによく使用されます。
- サブルーチン プール- これらには ABAP サブルーチン (FORM/ENDFORM ステートメントで囲まれ、PERFORM で呼び出されるコード ブロック) が含まれます。
- 関数グループ– これらは自己完結型の関数モジュールのライブラリです (FUNCTION/ENDFUNCTION で囲まれ、CALL FUNCTION で呼び出されます)。
- オブジェクト クラス- これらは Java クラスおよびインターフェイスに似ています。前者はメソッドと属性のセットを定義し、後者は「空の」メソッド定義を含みます。インターフェイスを実装するクラスは、明示的なコードを提供する必要があります。
- インターフェース– オブジェクトクラスと同じ
- 型プール– データ型と定数のコレクションを定義します。
ABAP プログラムは、個々の文 (ステートメント) で構成されています。ステートメントの最初の単語は ABAP キーワードと呼ばれます。各ステートメントはピリオドで終わります。単語は常に少なくとも 1 つのスペースで区切る必要があります。ステートメントは必要に応じてインデントできます。キーワード、追加、オペランドでは、ABAP ランタイム システムでは大文字と小文字は区別されません。
ステートメントは 1 行を超えて拡張できます。1 行に複数のステートメントを含めることもできます (ただし、これは推奨されません)。最初の列がアスタリスク * で始まる行は、ABAP ランタイム システムによってコメント行として認識され、無視されます。二重引用符 (") は、行の残りの部分がコメントであることを示します。
開発環境
ABAP で開発するには 2 つの方法があります。その可用性は ABAP システムのリリースによって異なります。
ABAP ワークベンチ
ABAPワークベンチはABAP システムの一部であり、SAP GUIを介してアクセスします。プログラムを編集するためのさまざまなツールが含まれています。最も重要なものは次のとおりです (トランザクション コードは括弧内に示されています)。
- レポート、モジュール プール、インクルード、サブルーチン プールの作成と編集のためのABAP エディター(SE38)
- データベース テーブル定義を処理し、グローバル タイプを取得するためのABAP ディクショナリ(SE11)
- ユーザーインターフェイス(メニューバー、標準ツールバー、アプリケーションツールバー、ファンクションキーの割り当て)を設計するためのメニューペインター(SE41)
- 画面とフローロジックを設計するためのスクリーン ペインター(SE51)
- 機能モジュール用ファンクションビルダー(SE37)
- ABAP オブジェクト クラスとインターフェイス用のクラス ビルダー(SE24)
オブジェクトナビゲータ(トランザクション SE80) は、これらのさまざまなツールへの単一の統合インターフェイスを提供します。
ABAP開発ツール
ABAP開発ツール(ADT )は、正式には「EclipseのABAP」と呼ばれ、 Eclipse IDEでABAPオブジェクトを開発するためのプラグインのセットです。 [6]
このシナリオでは、ABAP 開発者は必要なツールを自分のコンピューターにインストールしてローカルで作業し、バックエンドとの継続的な同期が実行されます。
ABAP 辞書
ABAP ディクショナリには、SAP システムのデータに関するすべてのメタデータが含まれています。これは ABAP ワークベンチと密接にリンクされており、データへの参照 (テーブル、ビュー、データ型など) はすべてディクショナリから取得されます。開発者は、ABAP ディクショナリ トランザクション (直接または ABAP ワークベンチ内の SE80 オブジェクト ナビゲータ経由) を使用して、このメタデータを表示および管理します。
ディクショナリ オブジェクトが変更されると、変更されたオブジェクトを参照するプログラムは、次回プログラムを実行するときに自動的に新しいバージョンを参照します。ABAP は解釈されるため、変更されたディクショナリ オブジェクトを参照するプログラムを再コンパイルする必要はありません。
最も重要な辞書オブジェクトの種類の簡単な説明は次のとおりです。
- テーブルは、基礎となるリレーショナル データベースに存在するデータ コンテナーです。ほとんどの場合、ABAP ディクショナリ内のテーブルの定義と、データベース内の同じテーブルの定義 (同じ名前、同じ列) の間には 1 対 1 の関係があります。これらのテーブルは、「透過」と呼ばれます。非透過テーブルには 2 つのタイプがあります。「プール」テーブルは、ABAP ディクショナリ内に独立したエンティティとして存在しますが、データベース レベルでは大きな物理テーブル (「プール」) にグループ化されています。プール テーブルは、多くの場合、たとえば構成データを保持する小さなテーブルです。「クラスター化」テーブルは、プライマリ キーに基づいて「クラスター」に物理的にグループ化されます。たとえば、クラスター化テーブルHに売上請求書に関する「ヘッダー」データが含まれており、別のクラスター化テーブルDに請求書の明細項目が含まれているとします。この場合、H の各行は、データベース内の「クラスター テーブル」内で D の関連行と物理的にグループ化されます。パフォーマンスを向上させるために設計されたこのタイプのクラスタリングは、すべてではありませんが、一部のリレーショナル データベース システムにネイティブ機能として存在します。
- インデックスは、頻繁に使用される選択条件のテーブル データへのアクセスを高速化します。すべての SAP テーブルには「プライマリ インデックス」があり、これはテーブルとともに暗黙的に作成され、プライマリ キーの一意性を強化するために使用されます。追加のインデックス (一意または非一意) を定義することもできます。これらは「セカンダリ インデックス」と呼ばれます。
- ビューの目的は、基礎となるデータベースと同じです。つまり、1 つまたは複数のテーブル (結合条件を使用) から列 (および/または行) のサブセットを定義します。ビューは仮想テーブル (他のテーブルのデータを参照する) であるため、それほど多くのスペースを占有しません。
- 構造体は、複数のフィールドで構成される複雑なデータ型です ( C/C++ のstructに相当)。
- データ要素は、テーブルまたは構造フィールドのセマンティック コンテンツを提供します。たとえば、多数のテーブルと構造に、価格 (完成品、原材料、リソースなど) を示すフィールドが含まれている場合があります。これらのフィールドはすべて、同じデータ要素 "PRICE" を持つことができます。
- ドメインは、データ要素の構造特性を定義します。たとえば、データ要素 PRICE には、価格を小数点 2 桁の数値フィールドとして定義するドメインが割り当てられます。ドメインは、可能な値のリストを提供する際にセマンティック コンテンツも持つことができます。たとえば、ドメイン「BOOLEAN」は、長さ 1 で大文字と小文字を区別しない「文字」タイプのフィールドを定義できますが、可能な値は「T」(true) または「F」(false) に制限されます。
- 検索ヘルプ(現在は廃止された「マッチコード」の後継) は、ユーザーがデータ フィールドの可能な値を確認したい場合に高度な検索戦略を提供します。ABAP ランタイムは暗黙的な支援 (フィールドのすべての値 (既存のすべての顧客番号など) を一覧表示することによって) を提供しますが、検索ヘルプを使用して、たとえば地理的な場所、信用格付けなどによる顧客検索を提供することによって、この機能を改良することができます。
- ロック オブジェクトは、データを変更するときにアプリケーション レベルのロックを実装します。
ABAP構文
この ABAP 構文の簡単な説明は、よく使われる「Hello」から始まります。
こんにちは世界
レポートテスト。「Hello, World!」と書き込みます。
REPORTこの例には、と の2 つのステートメントが含まれていますWRITE。プログラムは画面にリストを表示します。この場合、リストは 1 行の「Hello, World!」で構成されます。 ステートメントは、このプログラムがレポートであることを示します。ステートメントを にREPORT置き換えると、このプログラムはモジュール プールになります。
REPORTPROGRAM
連鎖文
同じ最初の部分 (左端) を持つ連続したステートメントは、チェーン演算子を使用して「チェーン」ステートメントに結合できます:。ステートメントの共通部分はコロンより左側に記述し、異なる部分はコロンより右側に記述してコンマで区切ります。コロン演算子は、スペースなしで、前のトークンに直接接続されます (以下の例に示すように、トークン リストのコンマにも同じことが当てはまります)。
WRITEチェーンはステートメントでよく使用されます。 はWRITE引数を 1 つだけ受け入れるので、たとえば FLIGHTINFO という構造体から 3 つのフィールドを表示する場合は、次のようにコーディングする必要があります。
FLIGHTINFO - CITYFROMを書き込みます。FLIGHTINFO - CITYTOを書き込みます。FLIGHTINFO - AIRPTOを書き込みます。
ステートメントを連鎖すると、より読みやすく、より直感的な形式になります。
書き込み: FLIGHTINFO - CITYFROM 、FLIGHTINFO - CITYTO 、FLIGHTINFO - AIRPTO 。
チェーン ステートメントでは、最初の部分 (コロンの前) はステートメント名だけに限定されません。連続するステートメントの共通部分全体をコロンの前に置くことができます。例:
LASTNAMEで'A' を'B'に置き換えます。FIRSTNAMEで'A' を'B'に置き換えます。CITYNAMEで'A'を'B'に置き換えます。
連鎖形式で書き直すと次のようになります。
'A' を'B'に置き換えます: LASTNAME 、FIRSTNAME 、CITYNAME 。
コメント
ABAP には、テキストをコメントとして定義する方法が 2 つあります。
例:
**************************************
** プログラム: BOOKINGS **
** 著者: Joe Byte、2007 年 7 月 7 日 **
****************************************
予約を報告します。
* データベースからフライト予約を読み取ります
SELECT * FROM FLIGHTINFO WHERE CLASS = 'Y' "Y = エコノミーOR CLASS = 'C' . "C = ビジネス(...)
スペース
ABAP のコードは空白を区別します。
x = a + b ( c ) です。
変数 c で定義された長さで、変数 b から始まる変数 a の部分文字列を変数 x に割り当てます。
x = a + b ( c ) です。
変数 x に、変数 a と、パラメーター c を使用したメソッド b の呼び出しの結果の合計を割り当てます。
ABAPステートメント
C/C++やJavaなどの言語では、限られた言語固有のステートメントのセットを定義し、ほとんどの機能をライブラリ経由で提供しますが、ABAPには膨大な量の組み込みステートメントが含まれています。これらのステートメントは伝統的に文のような構造を使用し、シンボルを避けていたため、ABAPプログラムは比較的冗長でした。しかし、ABAP言語の最近のバージョンでは、より簡潔なスタイルが可能です。[7]
ステートメント ベースの構文 (構文は COBOL に由来) と式ベースの構文 (C/Java など) の例:
PRICEに税金を追加します。 * はPRICE = PRICE + TAXと同等です。
データ型と変数
ABAP は、組み込みデータ型のセットを提供します。さらに、ABAP ディクショナリで定義されたすべての構造、テーブル、ビュー、またはデータ要素を使用して、変数を型指定できます。また、オブジェクト クラスとインターフェイスも型として使用できます。
組み込みデータ型は次のとおりです。
日付変数または定数 (タイプ D) には、西暦 1 年 1 月 1 日以降の日数が含まれます。時刻変数または定数 (タイプ T) には、午前 0 時からの秒数が含まれます。両方のタイプの特別な特徴は、整数としても文字列としてもアクセスできることです (日付の内部形式は "YYYYMMDD"、時刻の内部形式は "hhmmss")。これは、日付と時刻の処理に使用できます。たとえば、以下のコード スニペットは、前月の最終日を計算します (注: SY-DATUM は、現在の日付を含むシステム定義の変数です)。
DATA LAST_EOM TYPE D . "月末最終日
* 今日の日付から開始します
。LAST_EOM = SY - DATUM 。* YYYYMMDD 文字列の文字 6 と 7 (0 相対) を "01" に設定し、* 現在の月の最初の日を取得します。LAST_EOM + 6 ( 2 ) = '01' 。* 1 日を減算します。LAST_EOM = LAST_EOM - 1 。
WRITE : '前月の最終日は' 、LAST_EOM 。
すべての ABAP 変数は、使用するために明示的に宣言する必要があります。変数は、個別のステートメントと明示的な型指定を使用して宣言することも、ABAP 7.40 以降では推論された型指定を使用してインラインで宣言することもできます。
明示的に型指定された宣言
通常、すべての宣言は、最初の実行可能ステートメントの前のコード モジュール (プログラム、サブルーチン、関数) の先頭に配置されます。この配置は慣例であり、強制される構文規則ではありません。宣言は、名前、型、長さ (該当する場合)、追加の修飾子 (例: パック 10 進数フィールドの暗黙の 10 進数の数)、およびオプションの初期値で構成されます。
* プリミティブ型:
DATA : COUNTER TYPE I 、VALIDITY TYPE I VALUE 60 、TAXRATE ( 3 ) TYPE P DECIMALS 1 、LASTNAME ( 20 ) TYPE C 、DESCRIPTION TYPE STRING 。
* 辞書の種類:
DATA : ORIGIN TYPE COUNTRY 。
* 内部テーブル:
データ: FLIGHTINFOのT_FLIGHTSタイプ テーブル、FLT_LOOKUPのT_LOOKUPタイプ ハッシュ テーブル。
* オブジェクト:
データ: BOOKING TYPE REF TO CL_FLT_BOOKING 。
連続する DATA ステートメントを連結するためにコロンが使用されていることに注意してください。
インライン宣言
ABAP 7.40以降、[8]変数は次の構文でインラインで宣言できます。
DATA (変数名) = 'VALUE' 。
このタイプの宣言では、メソッド シグネチャやデータベース テーブル構造 などによって、タイプを静的に推論できる必要があります。
この構文は OpenSQL ステートメントでも可能です。
SELECT * FROM ekko into @ DATA ( lt_ekko ) WHERE ebeln EQ @ lv_ebeln 。
ABAP オブジェクト
ABAP言語は、「ABAPオブジェクト」と呼ばれる機能を通じてオブジェクト指向プログラミングをサポートしています。 [9]これにより、アプリケーションが簡素化され、制御しやすくなります。
ABAP オブジェクトは既存の言語と完全に互換性があるため、ABAP オブジェクトを使用するプログラムで既存のステートメントとモジュール化ユニットを使用したり、既存の ABAP プログラムで ABAP オブジェクトを使用したりすることができます。ABAP オブジェクト プログラムでは構文チェックが強化されており、特定のステートメントの一部の構文形式 (通常は古い形式) は許可されません。
オブジェクトは、それぞれの動作に特性を組み合わせたカプセルを形成します。オブジェクトを使用すると、プログラマーは実際の問題と提案されたソフトウェア ソリューションを 1 対 1 でマッピングできます。ビジネス環境の一般的なオブジェクトは、たとえば、「顧客」、「注文」、「請求書」などです。リリース 3.1 以降、SAP Web Application Server ABAP のビジネス オブジェクト リポジトリ (BOR) には、このようなオブジェクトの例が含まれています。BOR オブジェクト モデルは、次のリリースで BOR オブジェクト タイプを ABAP クラス ライブラリに移行することにより、ABAP オブジェクトに統合されます。オブジェクト指向全体を包括的に紹介すると、この ABAP オブジェクトの紹介の範囲をはるかに超えてしまいます。このドキュメントでは、オブジェクト指向で一般的に使用され、ABAP オブジェクトでも使用される用語をいくつか紹介します。以降のセクションでは、これらの用語が ABAP オブジェクトでどのように使用されるかを詳しく説明します。このセクションの最後には、オブジェクト指向に関するタイトルをまとめた参考文献のリストがあります。
- オブジェクトはクラスのインスタンスです。オブジェクトにはデータが含まれており、サービスも提供します。データはオブジェクトの属性を形成します。サービスはメソッド (操作または関数とも呼ばれます) と呼ばれます。通常、メソッドはプライベート データ (オブジェクトの属性または状態) を操作します。このデータはオブジェクトのメソッドにのみ表示されます。したがって、オブジェクトの属性はユーザーが直接変更することはできず、オブジェクトのメソッドによってのみ変更できます。これにより、オブジェクトの内部の一貫性が保証されます。
- クラスはオブジェクトを記述します。技術的な観点から見ると、オブジェクトはクラスの実行時インスタンスです。理論上は、1 つのクラスに基づいて任意の数のオブジェクトを作成できます。クラスの各インスタンス (オブジェクト) には、一意の ID と、その属性の独自の値セットがあります。
- オブジェクト参照は、プログラム内のオブジェクトを識別して指定するために使用できる一意のアドレスです。オブジェクト参照を使用すると、オブジェクトの属性とメソッドにアクセスできます。
オブジェクト指向プログラミングでは、オブジェクトには通常、次のプロパティがあります。
- カプセル化 – オブジェクトは、他のユーザーに対するリソース (属性とメソッド) の可視性を制限します。すべてのオブジェクトにはインターフェイスがあり、これによって他のオブジェクトがオブジェクトと対話する方法が決まります。オブジェクトの実装はカプセル化されており、オブジェクト自体の外部からは見えません。
- 継承 – 既存のクラスを使用して新しいクラスを派生できます。派生クラスはスーパークラスのデータとメソッドを継承します。ただし、既存のメソッドを上書きしたり、新しいメソッドを追加したりすることもできます。
- ポリモーフィズム - 同一 (同じ名前) のメソッドは、クラスによって動作が異なります。ABAP オブジェクトでは、継承中にメソッドを再定義し、インターフェースと呼ばれる構造を使用することでポリモーフィズムが実装されます。
CDS ビュー
ABAP コア データ サービス (ABAP CDS) は、AS ABAP の一般的な CDS コンセプトの実装です。ABAP CDS を使用すると、アプリケーション サーバーの中央データベースでセマンティック データ モデルを定義できます。AS ABAP では、これらのモデルをデータベース システムとは独立して定義できます。これらのモデルのエンティティは、ABAP ディクショナリで定義されている既存のデータベース テーブルやビューと比較して、アクセス機能が強化されており、Open SQL ベースのアプリケーションを最適化できます。これは、AS ABAP が SAP HANA データベースを使用する場合に特に顕著です。インメモリ特性を最適な方法で実装できるためです。
データ モデルは、ABAP CDS 構文で ABAP CDS に提供されるデータ定義言語 (DDL) とデータ制御言語 (DCL) を使用して定義されます。これらの言語を使用して定義されたオブジェクトは、ABAP ディクショナリに統合され、ここでも管理されます。
CDSソースコードはEclipseベースのABAP開発ツール(ADT)でのみプログラムできます。データ定義言語(DDL)とデータ制御言語(DCL)では異なるエディタを使用します。[10]
特徴
[11]
ABAPの内部テーブル
内部テーブルは ABAP 言語の重要な機能です。内部テーブルは、 C++ の構造体のベクトルや Java のオブジェクトのベクトルと同様に定義されます。これらの言語の主な違いは、ABAP が内部テーブルの内容に簡単にアクセスして操作するためのステートメントのコレクションを提供していることです。ABAP は配列をサポートしていないことに注意してください。複数要素のデータ オブジェクトを定義する唯一の方法は、内部テーブルを使用することです。[引用が必要]
内部テーブルは、ABAP の作業メモリに固定構造の可変データ セットを格納する方法であり、動的配列の機能を提供します。データは行ごとに格納され、各行は同じ構造を持ちます。
内部テーブルは、プログラム内からデータベース テーブルの内容を保存およびフォーマットするために使用されます。さらに、構造と関連した内部テーブルは、ABAP プログラムで複雑なデータ構造を定義する重要な手段です。
次の例では、データベース テーブル VBRK の形式を持つ 2 つのフィールドを持つ内部テーブルを定義します。
* まず、構造化型
TYPESを定義します: BEGIN OF t_vbrk 、VBELN TYPE VBRK - VBELN 、ZUONR TYPE VBRK - ZUONR 、END OF t_vbrk 。
* ここで、定義したタイプ t_vbrk
DATAの内部テーブルを定義します: gt_vbrk TYPE STANDARD TABLE OF t_vbrk 、gt_vbrk_2 TYPE STANDARD TABLE OF t_vbrk 。「簡単により多くのテーブルを定義できます
* 必要に応じて、構造 (内部テーブルの行) を定義します。
* タイプを使用した定義または内部テーブルへの参照を使用した定義:
DATA : gs_vbrk TYPE t_vbrk , gs_vbrk_2 LIKE LINE OF gt_vbrk_2 .
* 必要に応じてテーブル タイプを定義することもできます
。TYPES tt_vbrk TYPE STANDARD TABLE OF t_vbrk 。
歴史
次のリストは、ABAP 言語の歴史におけるいくつかの重要なマイルストーンについての概要のみを示しています。詳細については、「ABAP – リリース固有の変更」を参照してください。
参照
参考文献
- ^ 「リリース 7.5x での変更点」。help.sap.com。2020年 10 月 24 日時点のオリジナルよりアーカイブ。2024年 9 月 3 日に取得。
- ^ 「ABAP History」。SAP-technical.com。2017年11月15日時点のオリジナルよりアーカイブ。2010年8月9日閲覧。
- ^ 「製品可用性マトリックス - PAM」。scn.sap.com。2016年9月28日。2016年9月28日時点のオリジナルよりアーカイブ。2024年9月3日閲覧。
- ^ 「トランザクションコードのリスト」。SAPヘルプポータル。2023年 9 月 9 日閲覧。
- ^ 「S4/HANA のトランザクション コードの完全なリスト - docsfortec.com」。 docsfortec.com 。 2024 年 5 月 14 日時点のオリジナルよりアーカイブ。 2024 年 5 月 14 日閲覧。
- ^ 「SAP NetWeaver 向け ABAP 開発ツールを使い始める | SAP ブログ」。2012 年 6 月 19 日。2015 年 6 月 28 日時点のオリジナルよりアーカイブ。2015年6 月 15 日に閲覧。
- ^ 「多くの式を含む ABAP プログラムの例」。2015 年 6 月 19 日のオリジナルからアーカイブ。2015 年 6 月 19 日に取得。
- ^ 「DATA - インライン宣言」。help.sap.com。
- ^ 「Classes」、SAP NetWeaver 7.0、2009年11月28日時点のオリジナルよりアーカイブ、2009年8月10日閲覧
- ^ 「ABAP キーワードドキュメント」。2019 年 7 月 11 日時点のオリジナルよりアーカイブ。2019 年 7 月 11 日閲覧。
- ^ 「Core Data Services (CDS) ABAP 機能マトリックス | SAP ブログ」。2015 年 2 月 2 日。2019 年 7 月 11 日時点のオリジナルよりアーカイブ。2019年7 月 11日に閲覧。
外部リンク
- ABAP — キーワードドキュメント
- SAP ヘルプポータル
- SAP コミュニティ ネットワーク (SCN) での ABAP 開発に関するディスカッション、ブログ、ドキュメント、ビデオ
