SAP ABAP - Polimorfismo

El término polimorfismo significa literalmente "muchas formas". Desde una perspectiva orientada a objetos, el polimorfismo funciona junto con la herencia para hacer posible que varios tipos dentro de un árbol de herencia se usen indistintamente. Es decir, el polimorfismo ocurre cuando hay una jerarquía de clases y están relacionadas por herencia. El polimorfismo ABAP significa que una llamada a un método hará que se ejecute un método diferente dependiendo del tipo de objeto que invoca el método.

El siguiente programa contiene una clase abstracta 'class_prgm', 2 subclases (class_procedural y class_OO) y una clase de controlador de prueba 'class_type_approach'. En esta implementación, el método de clase 'start' nos permite mostrar el tipo de programación y su enfoque. Si observa de cerca la firma del método 'start', observará que recibe un parámetro de importación de tipo class_prgm. Sin embargo, en el evento Start-Of-Selection, este método se ha llamado en tiempo de ejecución con objetos de tipo class_procedural y class_OO.

Ejemplo

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.

El código anterior produce la siguiente salida:

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

El entorno de tiempo de ejecución ABAP realiza una conversión de restricción implícita durante la asignación del parámetro de importación class1_prgm. Esta característica ayuda a que el método de 'inicio' se implemente de forma genérica. La información de tipo dinámico asociada con una variable de referencia de objeto permite que el entorno de tiempo de ejecución ABAP vincule dinámicamente una llamada a método con la implementación definida en el objeto apuntado por la variable de referencia de objeto. Por ejemplo, el parámetro de importación 'class1_prgm' para el método 'start' en la clase 'class_type_approach' se refiere a un tipo abstracto que nunca podría instanciarse por sí solo.

Siempre que se llame al método con una implementación de subclase concreta como class_procedural o class_OO, el tipo dinámico del parámetro de referencia class1_prgm está vinculado a uno de estos tipos concretos. Por lo tanto, las llamadas a los métodos 'prgm_type' y 'approach1' se refieren a las implementaciones proporcionadas en las subclases class_procedural o class_OO en lugar de las implementaciones abstractas no definidas proporcionadas en la clase 'class_prgm'.