【ABAP】クラスとは?ABAPオブジェクトを5分で解説

ABAP

本ページではABAPにおけるオブジェクト指向のプログラミング手法である「ABAPオブジェクト」について解説します。

ABAPは従来は手続き型のプログラミング言語のため、実際はABAPオブジェクトを利用しなくても通常のアドオン機能は構築可能です。

ただし、今後はモダンなオブジェクト指向のプログラミング手法であるABAPオブジェクトを用いて実装していくシーンが主流となっていきます。

このページでは、オブジェクト指向とは何か?ABAPでどのように実現するのか?を1から解説していき、ABAPオブジェクトを用いて簡単な機能の開発ができるようになることを目指します。

このページで学べる内容
  • 【前提】オブジェクト指向のプログラミングとは?
  • ABAPオブジェクト
    • クラスとは?
    • メソッドとプロパティ(属性)
    • インスタンス
  • クラスの定義方法 "CLASS DEFINITION"
  • クラスの呼び出し "CLASS IMPLEMETNTAION"

SAPエンジニアやABAPerを目指す方であれば知らないと恥ずかしい基本知識の1つです。是非最後までご覧ください。

スポンサーリンク

ABAPオブジェクトとは?

ABAPオブジェクトとは

ABAPオブジェクトとはABAPでもクラスを使用してオブジェクト指向のプログラミングをできるようにした機能群のことを指します。

ABAPはオブジェクト指向のプログラミング手法が存在する前に誕生したプログラミング言語であるため、もともとはクラスを使用してオブジェクト指向のプログラミングを行うことはできませんでした。

ただし、オブジェクト指向のプログラミングは手続き型のプログラミングと比較してメリットが多く、近年の主流となっているプログラミング言語の多くは通常クラスを使用することが可能。

ABAPにおいても多くのメリットを享受しSAPとして更なる進化を遂げるために拡張された領域がABAPオブジェクトです。

ABAPオブジェクトを知らなくてもOK?

長年「ABAPerはクラスが使えない」と言われてきました。事実、クラスが使えなくても普通のアドオン機能の実装は可能ではあります。

ただし、毎年SAPのバージョンアップが行われるたびに、SAP標準プログラムの記述が徐々にクラスへ置き換えられていたり、BADIなどの新しい拡張方法の利用が進むなどこれからのABAPerにとっては無くてはならない必須知識となりました。

そのためにもクラスやインスタンスなどの基本的なABAPオブジェクトのスキルを身につけておくことは非常に重要です。

このページではABAPオブジェクト理解のための基本となる概念から解説していきます。

ABAPオブジェクトの基本知識
  • クラス
  • メソッドとプロパティ(属性)
  • インスタンス

はじめにクラスについて解説します。

ABAPオブジェクト:クラス

クラスとは

クラスとはオブジェクトを作成するための「設計書」にあたります。

手続き型プログラミングのABAPに慣れた人にとっては「設計書」と言われてもよくわからないかもしれません。ここではわかりやすく現実世界に例えながら解説します。

例えばスマホを例に考えてみます。スマホをオブジェクトだとすると、スマホを作るための設計図が必要となりますよね。これがクラスです。

メソッドとプロパティ(属性)

スマートフォンの設計書(=クラス)にはメソッドとプロパティが記載されています。

メソッドとプロパティ
  • メソッド →できること
  • プロパティ(属性) →性質

メソッドとプロパティをスマートフォンに例えると以下のように説明することができます。

メソッド プロパティ
メソッド)何ができるのか?
メソッドの例
  • 電話をかける
  • インターネットにつなぐ
  • 写真を撮る
  • 動画を再生する
プロパティ)どのような要素から構成されるか?
プロパティ(属性)の例
  • OS(android / iOS)
  • メーカー(SONY / google / apple)
  • モデル(xperia / pixel / iPhone)
  • 色・・・etc

インスタンス化

クラスとはただの設計書です。

したがってクラスを定義しただけではスマートフォンを利用することはできません。定義したクラス(=設計書)をもとに、実態としてのスマートフォンを生成する必要があります。この生成をインスタンス化と呼びます。

インスタンス化とは,ABAP
クラス=タコ焼き機

設計書という説明がいまいちピンと来ていない方はクラスは「タコ焼き機」だと考えてみても良いかもしれません。

タコ焼き機がクラス。タコ焼き機で作った実際のタコ焼きがオブジェクトです。

言い換えると、クラスは「ひな形」を定義しており、その「ひな形」をもとにどんどん複製されていくのが「オブジェクト」です。

それでもイマイチ理解できない・・・という方はページ後半に記載しているサンプルコードをご覧になってみてください。

ABAP:クラスの定義方法

クラスが何者なのかなんとなく理解できたところで、ここからは実際のコードを用いてより具体的にクラスとは何なのか?をより本質的に解説していきます。

先ほど解説した通りクラスはメソッドとプロパティで構成されます。

ABAPにおけるクラス定義においても、メソッドとプロパティそれぞれを別に定義していきます。

クラス定義
  • プロパティの定義
    CLASS DEFINITION
  • メソッドの定義
    CLASS IMPLEMENTATION

プロパティ定義: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)に定義したプロパティは、当該クラスの内部でのみ参照できるようになります。

ABAPメソッド定義:サンプルコード
CLASS class1 DEFINITION.
   PUBLIC SECTION.
      DATA: text1 TYPE char25 Value.
      METHODS meth1. 
ENDCLASS.

"class1" というクラスは "text1" という変数(=プロパティ)と "meth1" というメソッドを持っていることを定義しています。

メソッド定義: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で定義したクラスからオブジェクトを生成するインスタンス化の処理と、オブジェクトを実行する処理を解説します。

インスタンス化とは,ABAP

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から勉強したい方は

SAP / ABAPを1から学習したい初心者の方向けに、できるだけ網羅的にABAPが理解できるよう以下ページに知識体系を整理しています。

特に初心者のうちは、どこから学べばよいか?どう勉強すれば良いか?すらわからない状態になりがち。

ある程度の知識を持ったうえで、はじめて実践的な理解へとつながります。

タイトルとURLをコピーしました