Asignar instancias a la clase genérica OBJECT

En ABAP existe la clase genérica OBJECT, que es un tipo predefinido. Aunque no tenemos una relación directa, cualquier clase que se crea es también del tipo OBJECT.
Normalmente decimos que una subclase “es un tipo” de la superclase, por ejemplo, un león es un animal donde la clase LEON hereda de la clase ANIMAL.
Lo mismo se puede decir sobre todas las clases, aún que no hereda directamente de la clase OBJECT es un tipo OBJECT.
Teniendo en cuenta esta consideración podemos crear referencias genéricas y asignar cualquier tipo de cualquier clase a las referencias de tipo OBJECT.
Veamos el siguiente ejemplo, donde en una referencia de la clase OBJECT asignamos una instancia de la clase CL_WEB_SERVICE.

Referencia a la clase generica OBJECT.
DATA gr_object TYPE REF TO object.
Instanciamos utilizando el añadido TYPE en la referencia del OBJECT un objeto de la clase CL_WEB_SERVICE.
  CREATE OBJECT gr_object TYPE cl_web_service.
Para llamar a los métodos del objeto por la referencia de la clase OBJECT tenemos que utilizar llamadas dinámicas porque dentro de la clase OBJECT no existe la implementación del método M1, pero sabemos que el objeto creado tiene el método M1. Entre paréntesis y comillas, se puede pasar el nombre del método.
  CALL METHOD gr_object->(‘M1’).
También se puede pasar una variable que contiene el nombre del método, por ejemplo:
  DATA gv_method_name TYPE string.
gv_method_name = ‘M1’.
  CALL METHOD gr_object->(gv_method_name).
Si el método tiene parámetros IMPORTING, EXPORTING, RETURNING, etc. se tienen que pasar en cuanto se realiza la llamada dinámica.
CALL METHOD gr_object->(gv_method_name)
  EXPORTING nombre_parametro = valor_parametro.
Otra forma para realizar llamadas dinámicas a los métodos de una clase es utilizando el tipo dinámico ABAP_PARMBIND_TAB, que es una tabla interna hashed con tres campos:

  • NAME – se tiene que informar con el nombre del parámetro
  • KIND – Es un CHAR con una longitud de uno y se tiene que informar con el tipo de parámetro. Los valores que admite son E para los parámetros de tipo EXPORTING, C para CHANGING y R para RETURNING y RECIEVING.
  • VALUE – se tiene que informar con el valor que se le va pasar al parámetro.

La tabla interna debe contener un registro por cada parámetro que tiene el método. Para realizar la llamada dinámica con la tabla interna se utiliza el añadido PARAMETER-TABLE del siguiente modo:
 CALL METHOD gr_object->(gv_method_name) PARAMETER-TABLE gt_param.
Donde GT_PARAM es la tabla interna del tipo ABAP_PARMBIND_TAB.
En este artículo vamos a crear un ejemplo práctico para entenderlo mejor.
En un programa ejecutable creamos la clase CL_ORGANIZACION con el método público SET_SEDE que establece el valor del atributo SEDE. En el evento START-OF-SELECTION declaramos una referencia de la clase OBJECT y creamos un objeto del tipo CL_ORGANIZACION con la diferencia declarada. Llamamos al método SET_SEDE utilizando la referencia de la clase OBJECT utilizando llamadas dinámicas. Utilizamos dos formas distintas para llamar al mismo método.
Tenemos que comprobar si el valor del atributo SEDE se ha cambiado correctamente creando el método VER_SEDE que se encarga de pintar en la salida el valor del atributo.

 
 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *