✒️ABAP POO El tratamiento de Objetos
ABAP POO El tratamiento de Objetos
Unidad-1-Lección-9: Tratamiento de Objetos 1) Utilización de los componentes de un objeto
Los programas sólo pueden acceder a los componentes de las instancias usando las referencias de las variables referenciadas, siguiendo las sintaxis, siendo r_vehiculo la variable referenciada:
color realizamos lo siguiente:
r_vehiculo->color.
encendido realizaremos lo siguiente:
CALL METHOD r_vehiculo->encendido().
O la versión reducida, omitiendo el CALL METHOD:
r_vehiculo=>encendido().
Nota: Cuando llamamos a un método de instancia desde dentro de otro método de instancia, se puede omitir la referencia de objeto.
Veamos un ejemplo:
DATA: r_vehiculo TYPE REF TO vehiculo,
marca TYPE string,
modelo TYPE string,
numero TYPE i.
START-OF-SELECTION.
CREATE OBJECT r_vehiculo.
r_vehiculo->obtener_tipo( IMPORTING ex_marca = marca
ex_modelo = modelo ).
Para los componentes estáticos o independientes de instancia, 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.
Siendo vehiculo la clase, la sintaxis es la siguiente:
color realizamos lo siguiente:
vehiculo->color.
encendido realizamos lo siguiente:
CALL METHOD vehiculo=>encendido().
o la versión reducida omitiendo el CALL METHOD:
vehiculo=>encendido().
Nota: Cuando llamamos a un método estático desde dentro de la clase, se puede omitir el nombre de la clase.
Veamos un ejemplo:
DATA: numero TYPE i.
....
vehiculo=>obtener_n_o_vehiculos( RECEIVING re_contador = numero ).
Audio Tip 1: Un objeto que requiere el servicio de otro objeto le envía un mensaje solicitando el servicio a este otro. Este mensaje menciona la operación a ser ejecutada. La implementación de esta operación es conocida como método. Cuando escribimos la sintaxis de un método, debemos tener en cuenta que no se deben dejar espacios en blanco entre el nombre del método y los paréntesis dentro de los cuales se almacenaran los parámetros del mismo. Por el contrario, si debemos dejar al menos un espacio en blanco entre los paréntesis.
2) Métodos Funcionales
Los métodos funcionales son aquellos que tienen un parámetro RETURNING. Esto significa que devuelven un valor. El parámetro RETURNING siempre debe ser pasado usando la adición VALUE, es decir, se debe pasar por valor.
Los métodos funcionales pueden ser llamados directamente dentro de varias expresiones:
Expresiones Lógicas: IF, ELSEIF, WHILE, WAIT
Condiciones CASE: CASE, WHEN
Expresiones Aritméticas: COMPUTE
Fuentes de valores como copia local: MOVE
Condiciones de búsqueda para tablas internas, asumiendo que el operando no es un componente de la fila: LOOP AT … WHERE
Veamos un ejemplo de declaración de un método funcional:
CLASS vehiculo DEFINITION.
PUBLIC SECTION.
METHODS: obtener_consumo_promedio IMPORTING im_distancia TYPE i
im_combustible TYPE i
RETURNING VALUE(re_combustible) TYPE i.
ENDCLASS. "VEHICULO DEFINITION
DATA: r_vehiculo1 TYPE REF TO vehiculo,
r_vehiculo2 TYPE REF TO vehiculo,
consumo_promedio_comb TYPE i.
....
consumo_promedio_comb = r_vehiculo1->obtener_consumo_promedio( im_distancia = 500 im_combustible = 50 )
+ r_vehiculo2->obtener_consumo_promedio( im_distancia = 600 im_combustible = 60 ).
3) Autoreferencia
Dentro de una clase se puede acceder también a los componentes individuales mediante la referencia a sí mismo ME:
color en la propia clase, realizaremos lo siguiente:
me->color.
encendido en la propia clase, realizaremos lo siguiente:
CALL METHOD me->encendido().
Veamos el siguiente ejemplo:
CLASS vehiculo DEFINITION.
PUBLIC SECTION.
METHODS asignar_tipo IMPORTING im_marca TYPE string
.....
PRIVATE SECTION.
DATA: marca TYPE string.
ENDCLASS.
CLASS vehiculo IMPLEMENTATION.
METHOD asignar_tipo.
DATA: marca TYPE string.
me->marca = im_marca.
TRANSLATE me->marca TO UPPER CASE.
ENDMETHOD.
ENDCLASS.
Audio Tip 2: En los objetos ABAP las autoreferencias están siempre predefinidas, pero solamente son útiles en ciertos contextos. Podemos referenciar un objeto utilizando la variable de referencia predefinida ME dentro de los métodos de instancia. Aunque en dichos métodos no es necesario utilizar la autoreferencia ME, podemos utilizarla igualmente para mejorar la legibilidad del código. Sin embargo, nos es sumamente útil cuando necesitamos que haya una clara diferencia entre los objetos de datos locales y los atributos de instancia que llevan el mismo nombre.
 
 
 
Sobre el autor
Publicación académica de Oscar Perez, en su ámbito de estudios para el Máster ABAP POO.
Oscar Perez
Profesión: Ingeniero de Sistemas. Consultor y Desarrollador en Peoplesoft - Canada - Legajo: FD38F
✒️Autor de: 105 Publicaciones Académicas
🎓Cursando Actualmente: Master en Programación ABAP Orientado a Objetos
🎓Egresado de los módulos:
Certificación Académica de Oscar Perez