Sap-abap-polymorphism

提供:Dev Guides
移動先:案内検索

SAP ABAP-ポリモーフィズム

多型という用語は、文字通り「多くの形態」を意味します。 オブジェクト指向の観点から見ると、ポリモーフィズムは継承と連携して機能し、継承ツリー内のさまざまなタイプを互換的に使用できるようにします。 つまり、クラスの階層が存在し、それらが継承によって関連付けられている場合、ポリモーフィズムが発生します。 ABAPポリモーフィズムとは、メソッドを呼び出すと、メソッドを呼び出すオブジェクトのタイプに応じて異なるメソッドが実行されることを意味します。

次のプログラムには、抽象クラス「class_prgm」、2つのサブクラス(class_proceduralおよびclass_OO)、およびテストドライバークラス「class_type_approach」が含まれています。 この実装では、クラスメソッド「start」を使用して、プログラミングのタイプとそのアプローチを表示できます。 メソッド「start」のシグネチャをよく見ると、class_prgm型のインポートパラメーターを受け取っていることがわかります。 ただし、Start-Of-Selectionイベントでは、このメソッドはタイプclass_proceduralおよびclass_OOのオブジェクトを使用して実行時に呼び出されています。

Report ZPolymorphism1.
CLASS class_prgm Definition Abstract.
PUBLIC Section.
Methods: prgm_type Abstract,
approach1 Abstract.
ENDCLASS.

CLASS class_procedural Definition
Inheriting From class_prgm.
PUBLIC Section.
Methods: prgm_type Redefinition,
approach1 Redefinition.
ENDCLASS.

CLASS class_procedural Implementation.
Method prgm_type.
Write: 'Procedural programming'.

EndMethod. Method approach1.
Write: 'top-down approach'.

EndMethod. ENDCLASS.
CLASS class_OO Definition
Inheriting From class_prgm.
PUBLIC Section.
Methods: prgm_type Redefinition,
approach1 Redefinition.
ENDCLASS.

CLASS class_OO Implementation.
Method prgm_type.
Write: 'Object oriented programming'.
EndMethod.

Method approach1.
Write: 'bottom-up approach'.
EndMethod.
ENDCLASS.

CLASS class_type_approach Definition.
PUBLIC Section.
CLASS-METHODS:
start Importing class1_prgm
Type Ref To class_prgm.
ENDCLASS.

CLASS class_type_approach IMPLEMENTATION.
Method start.
CALL Method class1_prgm→prgm_type.
Write: 'follows'.

CALL Method class1_prgm→approach1.
EndMethod.
ENDCLASS.

Start-Of-Selection.
Data: class_1 Type Ref To class_procedural,
class_2 Type Ref To class_OO.

Create Object class_1.
Create Object class_2.
CALL Method class_type_approach⇒start
Exporting

class1_prgm = class_1.
New-Line.
CALL Method class_type_approach⇒start
Exporting
class1_prgm = class_2.

上記のコードは、次の出力を生成します-

Procedural programming follows top-down approach
Object oriented programming follows bottom-up approach

ABAPランタイム環境は、インポートパラメーターclass1_prgmの割り当て中に暗黙的なナローイングキャストを実行します。 この機能は、「開始」メソッドを一般的に実装するのに役立ちます。 オブジェクト参照変数に関連付けられた動的な型情報により、ABAPランタイム環境は、オブジェクト参照変数が指すオブジェクトで定義された実装にメソッド呼び出しを動的にバインドできます。 たとえば、 'class_type_approach’クラスのメソッド 'start’のインポートパラメーター 'class1_prgm’は、それ自体ではインスタンス化できない抽象型を参照します。

class_proceduralやclass_OOなどの具象サブクラス実装でメソッドが呼び出されるたびに、class1_prgm参照パラメーターの動的型はこれらの具象型のいずれかにバインドされます。 したがって、メソッド「prgm_type」および「approach1」の呼び出しは、クラス「class_prgm」で提供される未定義の抽象実装ではなく、class_proceduralまたはclass_OOサブクラスで提供される実装を参照します。