Open In App

SAP ABAP | Polymorphism

Polymorphism in SAP ABAP is a core principle in Object-Oriented Programming (OOP) that enables different classes to be handled as instances of a shared class via a common interface. This allows developers to apply techniques in various ways while storing a constant user interface. In SAP ABAP, the integration of polymorphism is pivotal for augmenting code flexibility and ensuring ease of maintenance.

SAP ABAP | Polymorphism

What is Polymorphism in SAP ABAP?

In SAP ABAP (Advanced Business Application Programming), polymorphism refers to the ability of a single function or method to operate on different types of data or objects. Polymorphism is a fundamental concept in object-oriented programming (OOP) and is one of the four pillars of OOP, along with encapsulation, inheritance, and abstraction.

Types of Polymorphism in SAP ABAP:

In SAP ABAP, polymorphism is a fundamental concept that allows different objects to be treated as instances of the same class, enabling flexibility and code reuse. There are two main types of polymorphism in SAP ABAP:



1. Compile-Time Polymorphism (Static Binding) in SAP ABAP:

Example:

CLASS compile_time_polymorphism DEFINITION.
PUBLIC SECTION.
METHODS print_message IMPORTING im_message TYPE string.
METHODS print_message IMPORTING im_message TYPE string im_count TYPE i.
ENDCLASS.

CLASS compile_time_polymorphism IMPLEMENTATION.
METHOD print_message.
WRITE: 'Message:', im_message.
ENDMETHOD.

METHOD print_message.
WRITE: 'Message:', im_message, 'Count:', im_count.
ENDMETHOD.
ENDCLASS.

DATA(obj) = NEW compile_time_polymorphism( ).
obj->print_message( im_message = 'Hello' ). " Calls the first method
obj->print_message( im_message = 'Hi' im_count = 3 ). " Calls the second method



Output:

Message: Hello
Message: Hi Count: 3

Explanation:

2. Run-Time Polymorphism (Dynamic Binding) in SAP ABAP:

Example:

CLASS abstract_shape DEFINITION ABSTRACT.
PUBLIC SECTION.
METHODS calculate_area ABSTRACT.
ENDCLASS.

CLASS circle DEFINITION INHERITING FROM abstract_shape.
PUBLIC SECTION.
METHODS calculate_area REDEFINITION.
ENDCLASS.

CLASS square DEFINITION INHERITING FROM abstract_shape.
PUBLIC SECTION.
METHODS calculate_area REDEFINITION.
ENDCLASS.

CLASS polymorphic_example DEFINITION.
PUBLIC SECTION.
METHODS display_area FOR EVENT handler.
ENDCLASS.

CLASS polymorphic_example IMPLEMENTATION.
METHOD display_area FOR EVENT handler.
DATA(shape) = CAST abstract_shape( handler->get_data( ) ).
shape->calculate_area( ).
ENDMETHOD.
ENDCLASS.

" Usage
DATA(event_handler) = NEW cl_gui_custom_container( ).
SET HANDLER polymorphic_example=>display_area FOR event_handler.

event_handler->set_data( NEW circle( ) ).
event_handler->fire_event_by_id( id = 1 ).

event_handler->set_data( NEW square( ) ).
event_handler->fire_event_by_id( id = 1 ).



Output:

Area Calculation for Circle
Area Calculation for Square



Explanation:

Abstract Class and Subclass in SAP ABAP

In SAP ABAP, an abstract class is a class that cannot be instantiated on its own and serves as a blueprint for its subclasses. It typically contains abstract methods, which are methods without an implementation in the abstract class. Subclasses should provide strong implementations for these abstract methods.

Sample Code Example:

Let’s consider an example of an abstract class representing different shapes, with an abstract method for calculating the area. Subclasses (e.g., Circle and Square) will provide their specific implementations.

CLASS abstract_shape DEFINITION ABSTRACT.
PUBLIC SECTION.
METHODS calculate_area ABSTRACT.
ENDCLASS.

CLASS abstract_shape IMPLEMENTATION.
METHOD calculate_area.
WRITE: 'Area Calculation Not Defined'.
ENDMETHOD.
ENDCLASS.

CLASS circle DEFINITION INHERITING FROM abstract_shape.
PUBLIC SECTION.
METHODS calculate_area REDEFINITION.
ENDCLASS.

CLASS circle IMPLEMENTATION.
METHOD calculate_area.
DATA radius TYPE i VALUE 5.
DATA area TYPE i.

area = COND #( WHEN sy-index = 1 THEN 3.14 * radius * radius
ELSE 0 ).

WRITE: / 'Area of Circle:', area.
ENDMETHOD.
ENDCLASS.

CLASS square DEFINITION INHERITING FROM abstract_shape.
PUBLIC SECTION.
METHODS calculate_area REDEFINITION.
ENDCLASS.

CLASS square IMPLEMENTATION.
METHOD calculate_area.
DATA side_length TYPE i VALUE 4.
DATA area TYPE i.

area = COND #( WHEN sy-index = 1 THEN side_length * side_length
ELSE 0 ).

WRITE: / 'Area of Square:', area.
ENDMETHOD.
ENDCLASS.



Output:

DATA(shape) = NEW abstract_shape( ).
shape->calculate_area( ). " Output: Area Calculation Not Defined

shape = NEW circle( ).
shape->calculate_area( ). " Output: Area of Circle: 78.5

shape = NEW square( ).
shape->calculate_area( ). " Output: Area of Square: 16



Explanation:

In this example, abstract classes allow for the creation of a common interface while letting subclasses define their specific behavior. The output shows how polymorphism works in the context of an abstract class in SAP ABAP.

Dynamic Type Binding in SAP ABAP

Dynamic type binding is a concept related to polymorphism in SAP ABAP, specifically in the context of method calls. It involves determining the actual type of an object at runtime and dynamically binding the appropriate method based on that type. This is crucial for achieving runtime polymorphism.

In SAP ABAP, when you have a reference variable of a superclass type pointing to an object of a subclass, the system determines the actual type of the object at runtime. Dynamic type binding allows the system to invoke the correct method based on the actual type of the object being referred to.

CLASS superclass DEFINITION.
  PUBLIC SECTION.
    METHODS display_data.
ENDCLASS.
 
CLASS subclass DEFINITION INHERITING FROM superclass.
  PUBLIC SECTION.
    METHODS display_data REDEFINITION.
ENDCLASS.
 
START-OF-SELECTION.
 
DATA obj TYPE REF TO superclass.
 
CREATE OBJECT obj TYPE subclass.
 
" Dynamic type binding
CALL METHOD obj->display_data( ).


Explanation:

When we call obj->display_data( ), dynamic type binding comes into play. The system recognizes that the actual type of the object referred to by obj is a subclass object. As a result, the overridden method in the subclass is invoked at runtime.

Conclusion:

Polymorphism in SAP ABAP facilitates code reuse, flexibility, and adaptability. By allowing different classes to be treated as instances of the same class, polymorphism contributes to the development of more modular and maintainable software systems. Understanding dynamic type binding is crucial for harnessing the full power of polymorphism in SAP ABAP.


Article Tags :