本ページではABAPにおけるオブジェクト指向のプログラミング手法である「ABAPオブジェクト」について解説します。
ABAPは従来は手続き型のプログラミング言語のため、実際はABAPオブジェクトを利用しなくても通常のアドオン機能は構築可能です。
ただし、今後はモダンなオブジェクト指向のプログラミング手法であるABAPオブジェクトを用いて実装していくシーンが主流となっていきます。
このページでは、オブジェクト指向とは何か?ABAPでどのように実現するのか?を1から解説していき、ABAPオブジェクトを用いて簡単な機能の開発ができるようになることを目指します。
SAPエンジニアやABAPerを目指す方であれば知らないと恥ずかしい基本知識の1つです。是非最後までご覧ください。
ABAPオブジェクトとは?
ABAPオブジェクトとはABAPでもクラスを使用してオブジェクト指向のプログラミングをできるようにした機能群のことを指します。
ABAPはオブジェクト指向のプログラミング手法が存在する前に誕生したプログラミング言語であるため、もともとはクラスを使用してオブジェクト指向のプログラミングを行うことはできませんでした。
ただし、オブジェクト指向のプログラミングは手続き型のプログラミングと比較してメリットが多く、近年の主流となっているプログラミング言語の多くは通常クラスを使用することが可能。
ABAPにおいても多くのメリットを享受しSAPとして更なる進化を遂げるために拡張された領域がABAPオブジェクトです。
このページではABAPオブジェクト理解のための基本となる概念から解説していきます。
はじめにクラスについて解説します。
ABAPオブジェクト:クラス
クラスとはオブジェクトを作成するための「設計書」にあたります。
手続き型プログラミングのABAPに慣れた人にとっては「設計書」と言われてもよくわからないかもしれません。ここではわかりやすく現実世界に例えながら解説します。
例えばスマホを例に考えてみます。スマホをオブジェクトだとすると、スマホを作るための設計図が必要となりますよね。これがクラスです。
メソッドとプロパティ(属性)
スマートフォンの設計書(=クラス)にはメソッドとプロパティが記載されています。
メソッドとプロパティをスマートフォンに例えると以下のように説明することができます。
インスタンス化
クラスとはただの設計書です。
したがってクラスを定義しただけではスマートフォンを利用することはできません。定義したクラス(=設計書)をもとに、実態としてのスマートフォンを生成する必要があります。この生成をインスタンス化と呼びます。
ABAP:クラスの定義方法
クラスが何者なのかなんとなく理解できたところで、ここからは実際のコードを用いてより具体的にクラスとは何なのか?をより本質的に解説していきます。
先ほど解説した通りクラスはメソッドとプロパティで構成されます。
ABAPにおけるクラス定義においても、メソッドとプロパティそれぞれを別に定義していきます。
プロパティ定義: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)に定義したプロパティは、当該クラスの内部でのみ参照できるようになります。
メソッド定義:CLASS―IMPLEMENTATION
CLASS (クラス名) IMPLEMENTATION. ・・・ METHOD ・・・ ENDMETHOD. ・・・ ENDCLASS.
先ほどとは異なりクラス名の後に「IMPLEMENTATION」と記述し、間にMETHOD~ENDMETHODでメソッドの実装を記述します。
以下はメソッド定義のサンプルコードです。
プロパティ "text1" をWRITEするメソッドを定義しています。
CLASS class1 IMPLEMENTATION. METHOD meth1. WRITE: / text1, SKIP. ENDMETHODO. ENDCLASS.
これでクラスの定義が完了です。
先ほどのプロパティの定義と合わせてコードを確認してみましょう。
*クラスの宣言セクション 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.
ABAPオブジェクト:インスタンス化
定義したクラスをもとにオブジェクトを生成する方法を説明します。
インスタンス化する(=オブジェクトを生成する)には、①DATA命令と②CREATE OBJECT命令をセットで利用します。
DATA: (オブジェクト名) TYPE REF TO (クラス名). CREAT OBJECT: (オブジェクト名).
クラスの定義~インスタンス化までの処理を記述したのが以下のサンプルコードです。
CLASS class1 DEFINITION. PUBLIC SECTION. DATA: text1 TYPE char25 Value 'Hello World'. METHODS meth1. ENDCLASS. CLASS class1 IMPLEMENTATION. METHOD meth1. WRITE: / text1, SKIP. ENDMETHODO. ENDCLASS. DATA: Objectx TYPE REF TO class1. CREATE OBJECT: Objectx.
サンプルコードの例では、class1で事前定義した「char25」の型を持つ、オブジェクトを登録しています。これで実際にオブジェクトが登録されました。すなわちインスタンス化です。
そして、次のメソッドの呼び出しでオブジェクトを動かします。
メソッドの呼び出し
CALL METHODO: (オブジェクト名) => (メソッド名).
オブジェクトをメソッドを呼び出す場合は、CALL METHOD命令のあとに「(オブジェクト名) => (メソッド名)」と記述します。
「=>」というのが大きな特徴ですね。
SAP標準プログラムを解読していくとしばしば見かける記述ですね。これは、すべてメソッドの呼び出しに該当します。
* クラス定義(プロパティ定義) CLASS class1 DEFINITION. PUBLIC SECTION. DATA: text1 TYPE char25 Value 'Hello World'. METHODS meth1. ENDCLASS. * クラス定義(メソッド定義) CLASS class1 IMPLEMENTATION. METHOD meth1. WRITE: / text1, SKIP. ENDMETHODO. ENDCLASS. * インスタンス化→ class1 の設計書から Objectx を生成する DATA: Objectx TYPE REF TO class1. CREATE OBJECT: Objectx. * メソッド"meth1" を実行する START-OF-SELECTION. CALL METHOD: Object1=>meth1.
上記のサンプルコードでは、"class1" から生成したオブジェクトのメソッド "meth1" を呼び出します。
したがって画面上には「Hello World」が表示される結果となります。
なぜ、Hello World が表示されるようになるのかわからない方はもう1度クラスの定義方法からゆっくり解説をご覧ください。
ABAPを1から勉強したい方は
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!