!--a11y-->
クラス、そのインスタンス(オブジェクト)、および参照変数を使用したオブジェクトへのアクセスが
ABAP オブジェクトの基本となります。これらの手段を用いれば、オブジェクトを使用して得意先、伝票、伝票明細、請求書などの一般的な業務アプリケーションをモデル化し、 ABAP オブジェクトを使ってソリューションを実行することができます。しかし、類似したクラスでもクラスごとに異なったコーディングが必要となり、しかもユーザに対しては統一されたインタフェースとしての機能を提供することが必要な場合が多くあります。たとえば、貯蓄預金と当座預金という、類似していて両方とも年末の手数料を計算するためのメソッドを持つ2つのクラスを使用することが考えられます。この場合、メソッドのインタフェースと名前は同じですが、実際の導入は異なります。クラスの利用者は、各口座の実際のタイプを気にせずにすべての口座に対する年末処理の行を実行することができなければなりません。
ABAP
オブジェクトは、インタフェースを使用することでこれを可能とします。インタフェースはユーザがクラスに追加する一般的な機能セットを提供します。プログラムにおけるインタフェースの定義と使用の観点から見ると、インタフェースはクラスと非常に似ています。インタフェースの定義はクラスの定義と似ています。インタフェースにはクラスと同じコンポーネントが含まれ、これらのコンポーネントにプログラム内でアクセスするときは参照変数を使用します。しかし、内部から見ると、インタフェースはクラスとはまったく異なる取り扱いを受けます。インタフェースはオブジェクトの生成に使用されることは絶対になく、そのため導入部が含まれません。その代わり、オブジェクトはクラスによって導入されます。インタフェースを使用するクラスの導入部もそのインタフェースのメソッドを実行しなければなりません。このように、メソッドのパラメータインタフェースはぴったり同じですが、まったく異なる方法で実行することができます。インタフェース参照は、インタフェースを導入したクラスのオブジェクトすべてをポイントすることができます。インタフェース参照を使用することで、プログラムはそのインタフェースで定義されたオブジェクトのコンポーネントにアクセスすることができます。したがって、プログラムは同じ名前を持つ異なるオブジェクトのコンポーネントを参照することができます。
インタフェースは、自身のコンポーネントを追加することにより、クラスのコンポーネントを拡張します。インタフェース参照はコンポーネントにアクセスする新しい方法となります。
インタフェースの定義
インタフェースを定義するときは、プログラム内でローカルに、またはクラスビルダを使ってグローバルにという、クラスの場合と同じ方法を使用することができます。インタフェース
<ifac> の定義は宣言部のみで構成されます。INTERFACE <ifac>.
...
ENDINTERFACE.
クラスの場合と異なり、インタフェース定義には実行部がありません。宣言部にはすべての インタフェースコンポーネント(属性、メソッド、イベント)の宣言が含まれます。ローカルインタフェースを定義する場合、宣言部はグローバルプログラムデータに属します。したがって、宣言部はプログラムの先頭に入れる必要があります。
インタフェースの宣言部をクラス定義のような可視セクションに分けることはできません。インタフェースのコンポーネントはすべて自動的に
PUBLIC となります。この特性により、クラスの拡張としてのインタフェースの性格が強調されます。インタフェースの導入
インタフェースの使用
クラスはインタフェースを導入することができます。そのうえで、このようなクラスに対してクラス自身が導入したインタフェースを通じてアドレスすることができます。たとえば、クラス‘
Customer ’がインタフェース‘ Iarchive ’を導入し、それによってアーカイブが可能になり、または‘ Iworkflow ’の導入よってワークフローに参加できるようになります。ABAP
オブジェクトにはオブジェクト参照のほかに、 インタフェース参照も含まれます。特定のインタフェースを導入するクラスには、インタフェース参照を通じてアドレスすることができます。そうすれば、インタフェース内部で定義済みのコンポーネントにアクセスすることができます。その場合、たとえば、ユーザはインタフェースの観点から、すなわち統一された方法で得意先、伝票、または伝票明細など、さまざまなオブジェクトにアクセスすることができます。インタフェースは特定の(通常は一般的な)機能のセットを定義します。インタフェースは、クラスとは異なり、多くのユーザだけではなく、多くのクラスによって実行されます。
このセクションはまだ準備段階中です。
INTERFACES 命令に関するキーワード文書も参照してください。