Sap-abap-interfaces
SAP ABAP-インターフェース
ABAPのクラスと同様に、インターフェイスはオブジェクトのデータ型として機能します。 インターフェイスのコンポーネントは、クラスのコンポーネントと同じです。 クラスの宣言とは異なり、インターフェイスの宣言には可視性セクションは含まれません。 これは、インターフェイスの宣言で定義されたコンポーネントが常にクラスのパブリック可視性セクションに統合されるためです。
インターフェイスは、2つの類似したクラスに同じ名前のメソッドがあるが、機能が互いに異なる場合に使用されます。 インターフェイスはクラスに似ているように見えるかもしれませんが、インターフェイスで定義された関数はクラスに実装され、そのクラスのスコープを拡張します。 インターフェイスと継承機能は、ポリモーフィズムの基盤を提供します。 これは、インターフェイスで定義されたメソッドがクラスごとに異なる動作をする可能性があるためです。
以下は、インターフェイスを作成するための一般的な形式です-
INTERFACE <intf_name>.
DATA.....
CLASS-DATA.....
METHODS.....
CLASS-METHODS.....
ENDINTERFACE.
この構文では、<intf_name>はインターフェイスの名前を表します。 DATAおよびCLASSDATAステートメントを使用して、それぞれインターフェースのインスタンスおよび静的属性を定義できます。 METHODSおよびCLASS-METHODSステートメントは、インターフェースのインスタンスおよび静的メソッドをそれぞれ定義するために使用できます。 インターフェースの定義には実装クラスが含まれていないため、インターフェースの宣言にDEFINITION句を追加する必要はありません。
注-インターフェイスのすべてのメソッドは抽象的です。 これらは、パラメーターインターフェイスを含めて完全に宣言されていますが、インターフェイスには実装されていません。 インターフェイスを使用するすべてのクラスは、インターフェイスのすべてのメソッドを実装する必要があります。 それ以外の場合、クラスは抽象クラスになります。
私たちはクラスの実装部分で次の構文を使用します-
INTERFACE <intf_name>.
この構文では、<intf_name>はインターフェイスの名前を表します。 この構文は、クラスのパブリックセクションで使用する必要があることに注意してください。
次の構文は、クラスの実装内のインターフェイスのメソッドを実装するために使用されます-
METHOD <intf_name~method_m>.
<statements>.
ENDMETHOD.
この構文では、<intf_name〜method_m>は<intf_name>インターフェースのメソッドの完全に宣言された名前を表します。
例
Report ZINTERFACE1.
INTERFACE my_interface1.
Methods msg.
ENDINTERFACE.
CLASS num_counter Definition.
PUBLIC Section.
INTERFACES my_interface1.
Methods add_number.
PRIVATE Section.
Data num Type I.
ENDCLASS.
CLASS num_counter Implementation.
Method my_interface1~msg.
Write:/'The number is', num.
EndMethod.
Method add_number.
ADD 7 TO num.
EndMethod.
ENDCLASS.
CLASS drive1 Definition.
PUBLIC Section.
INTERFACES my_interface1.
Methods speed1.
PRIVATE Section.
Data wheel1 Type I.
ENDCLASS.
CLASS drive1 Implementation.
Method my_interface1~msg.
Write:/'Total number of wheels is', wheel1.
EndMethod.
Method speed1.
Add 4 To wheel1.
EndMethod.
ENDCLASS.
Start-Of-Selection.
Data object1 Type Ref To num_counter.
Create Object object1.
CALL Method object1→add_number.
CALL Method object1→my_interface1~msg.
Data object2 Type Ref To drive1.
Create Object object2.
CALL Method object2→speed1.
CALL Method object2→my_interface1~msg.
上記のコードは、次の出力を生成します-
The number is 7
Total number of wheels is 4
上記の例では、my_interface1は 'msg’メソッドを含むインターフェイスの名前です。 次に、num_counterとdrive1の2つのクラスが定義および実装されます。 これらのクラスは両方とも「msg」メソッドと、add_numberやspeed1メソッドなど、それぞれのインスタンスの動作を定義する特定のメソッドを実装します。
注-add_numberおよびspeed1メソッドは、それぞれのクラスに固有です。