✒️ABAP El tratamiento de los Objetos
ABAP El tratamiento de los Objetos
TRATAMIENTO DE OBJETOS
1.- Utilizaciòn de Objetos:
Los objetos son instancias de las clases. Cada objeto tiene una identidad propia y tiene sus propios atributos. Todos los objetos transitorios residen en el contexto de una sesiòn interna (àrea de memoria de un programa ABAP). Una clase puede tener un nùmero indefinido de instancias.
"Un objeto existe mientras se estè usando en el programa, lo que quiere decir que existe siempre que al menos una referencia apunte hacia èl, o al menos un mètodo del objeto estè registrado como mètodo manejador de eventos".
2.- Referencia a Objetos:
Son punteros a los objetos ABAP.
Las referencias a objetos se usan para acceder a un objeto desde un programa ABAP. En ABAP los objetos estàn siempre contenidos en variables referenciadas.
Las variables referenciadas o bien contienen el valor inicial o bien contienen la referencia a un objeto ya existente. La identidad de un objeto depende de su referencia. Una variable referenciada que apunta a un objeto es la que se conoce la identidad del objeto. Los usuarios no pueden acceder a la identidad del objeto directamente.
Las variables referenciadas en ABAP son tratadas como cualquier otro objeto de datos elemental.Esto quiere decir que una variable referenciada puede contener una tabla interna o una estructura.
ABAP contiene un tipo de datos predefinido para las referencias, comparable a los tipos de datos para las estructuras o para las tablas internas. El tipo de datos completo no està definido hasta la declaraciòn en el programa ABAP. El tipo de datos de la variable referenciada determina como el programa actùa con su valor, o sea, con la referencia al objeto.
Hay dos tipos principales de referencias, la referencia a clases y la referencia a interfaces.
- Referencia a clases.- se definen usando la siguiente adiciòn:
TYPE REF TO "clase".
DATA: v_alv TYPE REF TO cl_gui_alv_grid.
Esta adiciòn se usa en las sentencias TYÈS o DATA. Una variable referenciada de este tipo se llama variable referenciada a clase simplemente.
Una referencia a clase permite al usuario crear una instancia, es decir un objeto, de la clase y acceder a un componente.
Una referencia a clase permite al usuario crear una instancia, es decir un objeto, de la clase y acceder a un componente visible, ejemplo:
cref-:componente.
3.- Creaciòn de Objetos.
Antes de crear un objeto de una clase es necesario declarar una variable referenciada con la referencia a la clase. Una vez que se ha declarado la referencia a la clase, se puede crear el objeto usando la sentencia CREATE OBJECT. Esta sentencia crea una instancia de la clase y la variable referenciada contiene la referencia al nuevo objeto.
CLASS counter DEFINITION.
PUBLIC SECTION.
METHODS: set IMPORTING value(set_value) TYPE i,
incremente,
get EXPORTING value(get_value) TYPE i.
PRIVATE SECTION.
DATA count TYPE i.
ENDCLASS.
CLASS counter IMPLEMENTATION.
METHOD set.
count = set_value.
ENDMETHOD.
METHOD increment
ADD 1 TO count.
ENDMETHOD.
METHOD get.
get_value = count.
ENDMETHOD.
ENDCLASS.
DATA number TYPE i VALUE 5.
DATA cnt TYPE REF TO counter.
START-OF-SELECTION.
CREATE OBJECT cnt.
Si no existe una referencia que apunte al objeto, entonces el objeto no puede ser accedido sintàcticamente, el garbage collector es una rutina del sistema que se inicia automàticamente cada vez que el sistema no tiene tareas màs importantes que realizar y elimina los objetos no referenciados de la memoria principal liberando espacio de la misma que permanecìa ocupado.
El propòsito del recolector de basura es identificar y descartar los objetos que ya no son necesarios para un programa de manera que sus recursos puedan ser recuperados y reutilizados.
Ejemplo:
IF r_objeto IS INITIAL.
ENDIF.
Mediante esta lògica se puede determinar si la referencia contiene la referencia nula, es decir si no apunta a un objeto.
4.- Còmo acceder a los componentes de un objeto.
Los programas sòlo pueden acceder a los componentes de las instancias usando las referencias de las variables referenciadas. La sintàxis es la siguiente, siendo ref la variable referenciada:
- Para acceder al atributo attr: ref->attr.
- Para llamar al mètodo meth: CALL METHOD ref->meth.
Para los componentes estàticos o independientes de instancias, sòlo dependientes de clase, se puede usar tanto el nombre de la clase como la variable referenciada. Tambièn es posible acceder a los componentes estàticos de una clase antes de que un objeto de la clase haya sido creado.
- Para acceder al atributo estàtico attr: class->attr.
- Para llamar al mètodo estàtico meth: CALL METHOD class->meth.
Dentro de una clase se puede acceder tambièn a los componentes individuales mediante la referencia a sì mismo ME.
- Para acceder al atributo attr en la propia clase: me->attr.
- Para llamar al mètodo meth en la propia clase: CALL METHOD me->meth.
Los constructores son un tipo especial de mètodos que no pueden ser llamados a travès de la sentencia CALL METHOD, estos mètodos son llamados automàticamente por el sistema para fijar el estado inicial de un nuevo objeto o clase.
Hay dos tipos de constructores:
- Los dependientes de instancia
- Estàticos o independientes de instancia.
Los constructores son mètodos con un nombre predefinido, para usarlos deben ser declarados explìcitamente en la clase.
Un constructor serà necesario si despuès de crear una instancia de una clase necesitamos asignar recursos, inicializar atributos que no pueden ser cubiertos con la adiciòn "value" de la sentencia DATA, modificar atributos estàticos o enviar mensajes que indiquen que un nuevo objeto ha sido creado.
No existe un destructor en los objetos ABAP.
5.- Asignaciòn de referencias.
Se pueden asignar referencias a distintas variables referenciadas usando la sentencia MOVE. De esta manera se puede tener las referencias en varias variables referenciadas apuntando a l mismo objeto.
Cuando asigna una referencia a una variable referenciada distinta, sus tipos deben ser compatibles. Cuando se usa la sentencia MOVE o el operador de asignaciòn = para asignar variables referenciadas, el sistema debe ser capaz de reconocer en el chequeo de la sintàxis si la asignaciòn va a ser posible. Esto tambièn se aplica cuando se pasan variables referenciadas como paràmetros a procedimientos.
Si escribimos la sentencia cref1 = cref2, las dos referencias tienen que tener el mismo tipo, esto es, tienen que referirse a la misma clase, o bien la clase cref1 tiene que ser la clase predefinida como vacìa, o sea OBJECT.
La clase OBJECT no tiene componentes y tiene la misma funciòn para las variables referenciadas que el tipo de datos ANY para las variables normales. Las variables referenciadas con el tipo OBJECT pueden funcionar como contenedoras para pasar referencias. De cualquier manera, nunca pueden ser usadas para acceder a objetos.
6.- Mi primer programa de objetos.
El objetivo serà simular un contador.
CLASS contador DEFINITION.
PUBLIC SELECTION.
METHODS: set IMPORTING value(set_value) TYPE i,
incrementar_contador,
get EXPORTING value(get_value) TYPE i.
PRIVATE SELECTION.
DATA count TYPE i.
ENDCLASS.
* Implementaciòn de la clase
CLASS contador IMPLEMENTATION.
METHOD set.
count = set_value.
ENDMETHOD.
METHOD incrementar_valor.
ADD 1 TO count.
ENDMETHOD.
METHOD get.
get_value = count.
ENDMETHOD.
ENDCLASS.
Declaramos las variables NUMBER de tipo i, inicializada con el valor cinco y CNT que serà una referencia de la clase contador. Luego creamos una instancia de la clase y ejecutamos el mètodo set. Finalmente, ejecutamos dentro de una iteraciòn el mètodo incrementar_contador el cual sumarà 1 al contenido de la variable number, obtenemos su nuevo valor y lo imprimimos en pantalla.
DATA number TYPE i VALUE 5.
DATA cnt TYPE REF TO contador.
START-OF-SELECTION.
CREATE OBJECT cnt.
CALL METHOD cnt->set.
EXPORTING
set:value = number.
DO 3 TIMES
CALL METHOD cnt->incrementar_contador.
ENDDO.
CALL METHOD cnt->get
IMPORTING
get_value = number.
WRITE number.
Al ejecutar el programa, la salida serà la siguiente:
8
 
 
 
Sobre el autor
Publicación académica de Miguel Angel Acosta Acosta, en su ámbito de estudios para la Carrera Consultor ABAP.
Miguel Angel Acosta Acosta
Profesión: Ingeniero de Sistemas - Ecuador - Legajo: TF64C
✒️Autor de: 238 Publicaciones Académicas
🎓Egresado de los módulos:
- Carrera Consultor en SAP SD Nivel Avanzado
- Carrera Consultor en SAP SD Nivel Inicial
- Máster ABAP for HANA
- Carrera Consultor ABAP Nivel Avanzado
- Carrera Consultor ABAP Nivel Inicial
Disponibilidad Laboral: FullTime
Presentación:
Profesional de ingeniería de sistemas en computación e informática, con experiencia en la implantación y soporte de proyectos informáticos para empresas del sector industrial y financiero.
Certificación Académica de Miguel Acosta