✒️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. Una clase puede tener un número indefinido de instancias.
NOTA: Un objeto existe mientras que 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.-Referencias a Objetos.
Son punteros a los objetos ABAP.
Las referencias a objetos se usan para acceder a un objeto desde un programa ABAP. Los objetos siempre están 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, indica que conoce la identidad del objeto. Los usuarios no pueden acceder a la identidad del objeto directamente. Una variable referenciada puede contener una tabla interna o una estructura.
Hay dos tipos principales de referencias, la referencia a clases y la referencia a interfaces.
Las referencias a clases se definen usando la siguiente adición:
TYPE REF TO <class>.
DATA: v_alv TYPE REF TO cl_gui_alv_grid.
Una referencia a clase permite al usuario crear una instancia(objeto) de la clase y acceder a un componente visible de la siguiente manera: cref->comp
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 declarada la referencia a la clase, se puede crear el objeto usando la sentencia CREATE OBJECT. Este sentencia crea una instancia de la clase y la variable referenciada contiene la referencia al objeto.
CLASS counter DEFINITION.
PUBLIC SECTION.
METHODS: set IMPORTING value(set_value) TYPE i,
increment,
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.
NOTA: Si no existe una referencia que apunte a un objeto, este no puede ser accedido sintácticamente. El “Garbage Collector” es una rutina del sistema que se inicia de forma automática 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 que permanecía ocupado.
El propósito de este “Garbage Collector” es identificar y descartar los objetos que ya no son necesarios para un programa.
Dada la referencia r_objeto, podemos comprobar si esta apunta a un objeto con la sentencia IS INITIAL.
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.
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 instancia, solo dependientes de clase, se puede usar tanto el nombre de la clase como la variable referenciada. Ejemplo, siendo class la clase:
Para acceder al atributo estático atrr: 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 individualmente mediante la referencia a si mismo ME:
Para acceder al atributo atrr en la propia clase: me->attr
Para llamar al método meth en la propia clase: CALL METHOD me->meth
NOTA: Los constructores son un tipo especial de métodos que no pueden ser llamados a través de la sentencia CALL METHOD.
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 o los 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 VALUE de la sentencia DATA, modificar atributos estáticos, o enviar mensajes que indiquen que se ha creado un nuevo objeto.
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 apuntando al mismo objeto.
Si escribimos cref1 = cref2, las dos referencias tienen que ser del mismo tipo, esto es, tienen que referirse a la misma clase, o bien la clase de cref1 tiene que ser la clase predefinida como vacía, o sea OBJECT.
La clase OBJECT no tiene componentes, tiene la misma función para las variables referenciadas que el tipo de datos ANY para las variables normales. Nunca pueden ser usadas para acceder a objetos.
6.-Mi primer programa de objetos.
Ejemplo. El objetivo será simular un contador.
Definimos la clase CONTADOR con los métodos públicos y el atributo privado COUNT.
CLASS contador DEFINITION.
PUBLIC SECTION.
METHODS: set IMPORTING value(set_value) TYPE i,
incrementar_contador,
get EXPORTING value(get_value) TYPE i.
PRIVATE SECTION.
DATA count TYPE i.
ENDCLASS.
Creamos la implementación de la clase
CLASS contador IMPLEMENTATION.
METHOD set.
 
 
 
Agradecimiento:
Ha agradecido este aporte: Francisco Ortega Aguilar
Favorito:
Está publicación ha sido agregada a sus favoritos por: Francisco Ortega Aguilar
Sobre el autor
Publicación académica de Juan Hernández, en su ámbito de estudios para la Carrera Consultor ABAP.
Juan Hernández
Profesión: Programador Informático - España - Legajo: XQ15K
✒️Autor de: 125 Publicaciones Académicas
🎓Egresado de los módulos:
Disponibilidad Laboral: PartTime
Certificación Académica de Juan Hernández