本ページでは、ABAPにおける「オブジェクト指向」のプログラミング方法であるABAPオブジェクトについて解説します。
ABAPはもともと構造化プログラミング言語のため、実際はABAPオブジェクトを利用しなくても、通常のアドオン機能は構築可能です。
ただし、今後のABAPは現在のモダンなプログラミング言語の主流であるオブジェクト指向を取り入れて拡張されていくことになっています。このページでは、オブジェクト指向とは何か?ABAPでどのように実現するのか?を1から解説していき、ABAPオブジェクトを用いて簡単な機能の開発ができるようになることを目指します。
- ABAPオブジェクトとは何か?
- オブジェクト指向の簡単な説明
- クラスとは何か?
- 属性とメソッドについて
- インスタンス化とは何か?
ABAPerであれば、知っておいて損はない役立つ知識を多く記載していますので、是非最後までご覧ください。
ABAPオブジェクトとは?

ABAPはもともとオブジェクト指向の言語ではありませんでした。ABAPは手続き型言語に分類され「オブジェクト指向」という考え方が普及する以前に成立した言語です。
そのため、基本的にはABAPはオブジェクト指向を知らなくてもコーディングが可能です。そのうえで、オブジェクト指向を取り入れることで開発プロセスにおけるソフトウェアの構造化と整合性の向上が見込めることから、ABAPもオブジェクト指向的に拡張されました。
このABAPにおけるオブジェクト指向的に拡張された領域こそ、「ABAPオブジェクト」と呼ばれる機能群です。
したがって、ABAPオブジェクトを理解するためには、オブジェクト指向とは何かをある程度把握している必要があります。このページでは、オブジェクト指向の一般的な知識も補足しつつ解説します。
ABAPオブジェクト:クラスとは何か?

ABAPオブジェクトを理解するために最も重要な概念―。「クラス」について0から解説していきます。
クラスは「設計書」と説明されることが多い概念です。この設計書は、「どのような要素から構成されるか」と「何ができるのか」が記述されています。どういうことか、具体的にイメージをしやすいように「スマートフォン」を例にして説明します。
- OS(android / iOS)
- メーカー(SONY / google / apple)
- モデル(xperia / pixel / iPhone)
- 色・・・etc
- 電話をかける
- インターネットにつなぐ
- 写真を撮る
- 動画を再生する・・・etc
設計書という言葉をさらに分かりやすく言い換えると、クラスは「テンプレート」です。つまり、スマートフォンクラスは「スマートフォンのテンプレート」であり、実際にスマートフォンを作る際には、このテンプレートに沿って作成していくことになります。
上記のスマートフォンクラス(スマートフォンの設計書)をもとに、iPhone10やpixelといった実際のスマートフォンを作成することをインスタンス化と言います。(インスタンス化については後の章で詳しく解説します)
- OS ⇒ iOS
- メーカー ⇒ apple
- モデル ⇒ iPhone10
- 色 ⇒ 黒
オブジェクト指向のプログラミングでは、「クラス」を基に様々なスマートフォンを作成することが可能になります。クラスに基づいて作成されたスマートフォンは、その時点で「電話をかける」ことができ「動画を再生できる」ようになります。
もしクラスがなければ、似たような機能であっても別々のものとして定義する必要があるため、コーディングが大変で、保守性も落ちてしまうことになります。
言い換えればクラスを用いることで、コード全体の可読性を向上させることが可能になるのです。
ABAP:クラスの定義方法
クラスが何者なのかなんとなく理解できたところで、ここからは実際のコードを用いてより具体的にクラスとは何なのか?を解説していきます。
先ほど解説した通りクラスは、以下2つの内容で構成されます。クラスの定義方法も大きく2つのパートに分かれます。
- どのような要素から構成されるか? ⇒ クラスの宣言セクション
- 何ができるのか? ⇒ クラスの実装セクション
クラス定義は、大きく①クラスの宣言セクション、と②クラスの実装セクションから構成されます。
クラスの宣言セクションの役割は、プロパティとメソッドの構成を定義することです。
例えば、スマートフォンクラスを作るとしたら「品番」「メーカー」「色」などの必要不可欠なプロパティと、どのようなメソッド(「電話をかける」「メールをする」)を持つか?を指定していきます。
クラスの宣言セクション:CLASSーDEFINTION
CLASS(クラス名)DEFINITION.
(PUBLIC SECTION.)
・・・
(PROTECTED SECTION).
・・・
(PRIVATE SECTION).
・・・
ENDCLASS.
クラスを定義する構文です。定義でポイントとなるのは可視性です。
プロパティを定義する際には、かならず1つ以上のSECTION命令を利用する必要があります。(1つのクラスの中に3つ全てのSECTION命令を置く必要はありません。)
パブリックセクション(PUBLIC SECTION)
パブリックセクション(PUBLIC SECTION)に定義したプロパティは、当該クラスの外部、サブクラスの内部、当該クラスの内部で参照できるようになります。
プロテクトセクション(PRITECTED SECTION)
プロテクトセクション(PROTECTED SECTION)に定義したプロパティは、サブクラスの内部、当該クラスの内部で参照できるようになります。
プライベートセクション(PRIVATE SECTION)
プライベートセクション(PRIVATE SECTION)に定義したプロパティは、当該クラスの内部でのみ参照できるようになります。
サンプルコード:DEFINTION
CLASS class1 DEFINITION. PUBLIC SECTION. DATA: text1 TYPE char25 Value 'こんにちは'. METHODS meth1. ENDCLASS.
クラスの実装セクション:CLASS―IMPLEMENTATION
CLASS(クラス名)IMPLEMENTATION.
・・・
METHOD
・・・
ENDMETHOD.
・・・
ENDCLASS.
先ほどとは異なりクラス名の後に「IMPLEMENTATION」と記述します。こうすることで、メソッドの定義を行うことを示すことができます。
サンプルコード:IMPLEMENTATION
CLASS class1 IMPLEMENTATION. METHOD meth1. WRITE: / text1, SKIP. ENDMETHODO. ENDCLASS.
さて、これでクラスの定義が完了です。
先ほどのプロパティの定義と合わせてコードを確認してみましょう。
*1・・・クラスの宣言セクション CLASS class1 DEFINITION. PUBLIC SECTION. ***class1は「text1」というプロパティと「meth1」というメソッドから成り立つ*** DATA: text1 TYPE char25 Value 'Hello World'. "プロパティ METHODS meth1. "メソッド ************************************************************************** ENDCLASS. *2・・・クラスの実装セクション CLASS class1 IMPLEMENTATION. ***class1のメソッド「meth1」の機能を記述*** METHOD meth1. WRITE: / text1, SKIP. ENDMETHODO. ******************************************* ENDCLASS.
さて、ここまできてようやく処理を実行する準備が整います。
ここからは、定義したクラスを基にオブジェクトを作り、実際に動かしていきます。ここまでの処理で「やっとスマートフォンのテンプレート」が定義された状態になります。
したがって、まだスマートフォンという実態は存在していません。
つまり言い換えると、「スマートフォンのテンプレートはあるけど、iPhoneはまだ作れていない」という状態です。先ほどのクラス定義はあくまでも「OS」「メーカー」「型番」「色」などの設計方法を定義しただけれあり、その設計書を基にしたiPhoneXは未だ存在しないのです。
このテンプレートを基に、実際にiPhoneを作成することをインスタンス化と言います。インスタンス化をすることで、実際にiPhoneが作成され、電話をかけたりメールをしたりすることができようになります。
以下では、インスタンス化の手順を解説します。
オブジェクトの登録方法
コードルール(インスタンス化)
DATA:(オブジェクト名) TYPE REF TO (クラス名).
CREAT OBJECT:(オブジェクト名).
サンプルコード
CLASS class1 DEFINITION. PUBLIC SECTION. DATA: text1 TYPE char25 Value 'こんにちは'. METHODS meth1. ENDCLASS. CLASS class1 IMPLEMENTATION. METHOD meth1. WRITE: / text1, SKIP. ENDMETHODO. ENDCLASS. DATA: Objectx TYPE REF TO class1. CREATE OBJECT: Objectx.
DATA命令でオブジェクトの型を定義します。その後、CREATE OBJECT命令でオブジェクトを登録します。
サンプルコードの例では、class1で事前定義した「char25」の型を持つ、オブジェクトを登録しています。これで実際にオブジェクトが登録されました。すなわちインスタンス化です。
そして、次のメソッドの呼び出しでオブジェクトを動かします。
メソッドの呼び出し
コードルール
CALL METHODO: (オブジェクト名) =>(メソッド名).
サンプルコード(インスタンス化から処理実行まで)
START-OF-SELECTION. DATA: Object1 TYPE REF TO class1. CREATE OBJECT: Object1. CALL METHOD: Object1=>meth1.
CALL METHOD命令で事前定義した処理を呼び出します。
CALL METHOD +(動かしたいオブジェクト名)⇒(動かしたい処理)
で対象を動かすことができます。
ABAPを1から勉強したい方は
ABAPを1から学習したい方は、以下の記事で学習するのがお勧めです。
現在、完全無料で公開しておりますので、是非ご覧ください!