PR

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

初めてABAPを勉強するのは結構難しいですよね。

でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。

ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?

あなたの技術、もっと価値ある場所で活かしませんか?
SAPエンジニアのキャリア支援はこちらから↓

No.1 > 外資系・IT業界などハイクラスの転職なら【アクシスコンサルティング】blank
4人に1人のコンサルタントが選ぶパートナー!
ビッグ4やアクセンチュアへの転職を実現し年収1000万へ。

No.2 > IT・Web転職特化エージェント【レバテックキャリアblank
blank
サービス利用者数20万人突破。

平均年収アップ率77%であなたの転職成功を保証します。

No.3 > blankリクルートエージェント
blank
\転職支援実績NO.1/

応募が殺到しすぎるが故に・・・非公開にせざるを得ない魅力的な求人が多数!

読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
ABAPSAP
シェアする
ビズドットオンラインをフォローする
タイトルとURLをコピーしました