![](/cvo_files/imgs_sap_abap/logos/logo_cvo_academy_it.png)
✒️ABAP La definición de Clases, Atributos, Métodos y Eventos
ABAP La definición de Clases, Atributos, Métodos y Eventos
![ABAP La definición de Clases, Atributos, Métodos y Eventos ABAP La definición de Clases, Atributos, Métodos y Eventos](https://www.cvosoft.com/cvo_files/imgs_sap_abap/og-images/66.jpg)
Las clases en ABAP se pueden declarar global o localmente. Las clases Globales se definen en el generador de clases, a través de la transacción SE24 en el ABAP Workbench.
Estas clases son almacenadas en el Class Pools en la librería de clases en el Repositorio R/3. Todos los programas ABAP en un sistema R/3 pueden acceder a las clases Globales.
Las Clases Locales se definen en un programa ABAP y solo pueden ser invocadas desde el programa en el que se han definido.
Cuando se usa una clase en un programa ABAP el sistema busca primero una clase local con el nombre especificado. Si no encuentra ninguna entonces busca una clase global. A parte de la cuestión de la visibilidad, no hay ninguna diferencia entre usar una clase global o una clase local. Lo que si cambia sensiblemente es la manera en la que una clase local y una clase global son creadas.
Si se define una clase que se va a usar en un único programa, normalmente es suficiente con definir los componentes visibles de manera que la clase se ajuste a nuestro programa. Por otro lado, las clases globales deben estar preparadas para ser usadas en cualquier parte.
Definición de Clases Locales
Las clases locales son el conjunto de sentencias que están entre las sentencias CLASS....ENDCLASS.
Una definición completa de una clase constara de una parte declarativa, lo que se conoce como definición de la clase en la que se definen los componentes, y una parte de implementación, lo que se conoce como implementación de la clase, en la que se implementan estos componentes.
La parte declarativa contiene la declaración de todos los componentes de la clase (atributos, métodos y eventos). Cuando se definen clases locales, la parte declarativa pertenece a los datos globales del programa, por lo tanto se habrá de situar al principio del programa.
Si se declaran métodos en la parte declarativa de una clase, se deberá escribir también su parte de implementación. Esta es la que va incluida entre las siguientes sentencias:
CLASS <class> IMPLEMENTATION.
...
ENDCLASS.
La parte de implementación contiene la implementación de todos los métodos de la clase. Esta parte actua como un bloque, esto quiere decir que cualquier sección de código que no forme parte del bloque no será accesible.
ü Estructura y Componentes de una Clase
La estructura de una clase se define principalmente basándose en:
- Una clase contiene componentes.
- Cada componente se asigna a una sección de visibilidad (Publico, Protegido o Privado).
- Las clases implementan métodos.
Los Componentes de una clase representan sus contenidos. Todos los componentes son declarados en la parte declarativa de la clase. Los componentes definen los atributos de los objetos en una clase.
Cuando se define una clase, cada componente es asignado a una de las tres distintas secciones de visibilidad que definen la interface externa de la clase. Todos los componentes de una clase son visibles dentro de la clase. Ademas todos comparten el mismo espacio por lo que sus nombres deben ser únicos dentro de la clase.
Hay dos tipos de componentes en una clase, aquellos que existen separadamente para cada objeto de una clasem y aquellos que existen solo una vez para la clase entera, independientemente del numero de instancias. Estos componentes son conocidos como dependientes de instancia o independiente de instancia (o estáticos) respectivamente.
En los objetos ABAP, las clases pueden definir los siguientes componentes:
Atributos, Metodos y Eventos.
· Atributos: Son los campos de datos internos de una clase y pueden tener cualquier tipo de datos ABAP.
El estado de un objeto viene determinado por el contenido de sus atributos. Un tipo de atributos son variables referenciadas. Estas variables permiten crear y acceder a los objetos, de manera que si se definen en una clase permiten acceder a otros objetos dentro de la clase.
Existen dos tipos de atributos:
Dependientes de instancia: donde el contenido de los atributos es especifico de cada objeto. Se declaran usando la sentencia DATA.
Independientes de Instancia o Estativos: donde el contenido de los atributos define el estado de la clase y es valido para todas las instancias de la clase.
Los atributos estáticos existen solo una vez para la clase. Se declaran usando la sentencia CLASS-DATA. Son accesibles desde todo el entorno de ejecución de la clase. Todos los objetos de una clase pueden acceder a sus atributos estáticos. Si se cambia un atributo estatico con un objeto, el cambio es visible en todos los demás objetos de la clase.
· Metodos: Son procedimientos internos de una clase que definen el comportamiento de un objeto.
Los métodos pueden acceder a todos los atributos de una clase. Esto les permite cambiar el contenido de los atributos de un objeto.
Los métodos poseen también una interface con parámetros que les permite recibir valores cuando son invocados y devolver valores después de la llamada. Los atributos privados de una clase solo pueden ser cambiados por métodos de la misma clase.
La definición y la interface de un método son similares a las de los modulos de funciones. Un método se define en la parte declarativa de la clase y se implementa en la parte de implementación usando las sentencias:
METHOD <meth>.
...
ENDMETHOD.
Se pueden declarar tipos de datos locales y objetos en los métodos de la misma manera que en cualquier otro procedimiento ABAP. Los métodos se llaman mediante la sentencia CALL METHOD.
Existen tres tipos de métodos:
Dependientes de instancia: estos métodos se declaran usando la sentencia METHODS. Pueden acceder a todos los atributos de una clase y pueden desencadenar todos los eventos de una clase.
Independientes de instancia o estáticos: estos métodos se declaran usando la sentencia CLASS METHODS. Solo pueden acceder a los atributos estáticos y desencadenar eventos estáticos.
Especiales: además de los métodos normales que se pueden llamar con la sentencia CALL METHOD, hay dos métodos especiales llamados CONTRUCTOR y CLASS_CONSTRUCTOR que son automáticamente llamados cuando se crea un objeto (CONSTRUCTOR) o cuando se accede por primera vez a los componentes de la clase (CLASS_CONSTRUCTOR).
· EVENTOS: son acontecimientos o sucesos que utilizan los objetos o las clases para desencadenar la ejecución de un método en otro objeto o clase.
Estos métodos se llaman métodos que manejan eventos (event handler methods).
En una llamada normal a un método, el método puede ser llamado por cualquier numero de usuarios. Cuando un evento es desencadenado, cualquier numero de estos métodos puede ser llamado.
La unión entre el disparador del evento "Trigger" y el manejador del evento "handler" no es establecida de antemano, si no en el entorno de ejecución. En las llamadas normales a métodos, el programa que llama determina los métodos a los que quiere llamar. Estos métodos tienen que existir.
El manejador de eventos determina los eventos a los cuales tiene que reaccionar. No tiene porque existir un método manejador de eventos registrado para cada evento. Los eventos de una clase pueden ser desencadenados en los métodos de la misma clase usando la sentencia RAISE EVENT.
Un método de la misma o diferente clase, se declara como método manejador de eventos utilizando la adicion FOR EVENT OF.
Los eventos tienen una interface de parámetros similar a la de los métodos, pero solo tienen parámetros de salida. Los parámetros son pasados por el disparador (Sentencia RAISE EVENT) al método manejador de eventos el cual los recibe como parámetros de entrada.
El vinculo de unión entre el disparador y el manejador (trigger y handler) es establecido dinámicamente en el programa usando la sentencia SET HANDLER. El disparador y el manejador pueden ser objetos o clases., dependiendo de si tenemos eventos dependientes de instancia o eventos estáticos y métodos manejadores de eventos. Cuando un evento es disparado, el correspondiente método manejador de eventos es ejecutado en todas las clases registradas para ese manejador.
Existen dos tipos de eventos:
- Dependientes de instancia: se declaran con la sentencia EVENTS. Solo puede ser desencadenados en un método dependiente de instancia.
- Independiente de instancia o estáticos: se declaran con la sentencia CLASS-EVENTS. todos los métodos pueden desencadenar eventos estáticos. Los eventos estáticos son el único tipo de eventos que puede ser desencadenado por un método estatico.
Ø Tipo y Constantes
Se pueden definir tipos de datos ABAP dentro de una clase con la sentencia TYPES. Los tipos de datos no son específicos de cada instancia y existen una sola vez para todos los objetos de la clase.
Las constantes son un tipo especial de atributos estáticos. Su valor se fija cuando son declaradas y no puede ser cambiado. Se declaran usando la sentencia CONSTANTS. Las contantes existen solo una vez para todos los objetos de la clase.
Cuando definimos tipos de datos dentro de la definición de una clase podemos utilizar la adicion READ ONLYluego de escribir el tipo de la variable que acabamos de declarar, esto significara que el atributo publico que fue declarado con la sentencia DATA puede ser leído desde afuera de la clase pero solo podrá ser modificado por métodos de la misma clase, solo se podrá utilizar la adicion READ ONLY dentro de la parte publica de la declaración de una clase.
Ø Visibilidad de una Clase
La parte declarativa o definición de una clase se divide en tres áreas de distinta visibilidad:
CLASS <class> DEFINITION.
PUBLIC SECTION.
...
PROTECTED SECTION.
...
PRIVATE SECTION.
...
ENDCLASS.
Estas tres áreas definen la visibilidad externa de los componentes de la clase, esto es, la interface entre la clase y el usuario.
Cada componentes de una clase ha de ser asignado a una de estas tres secciones:
PUBLIC SECTION (Parte Publica): todos los componentes declarados en la sección publica son accesibles para todos los usuarios de la clase y para todos los métodos de la clase y de cualquier clase que herede de ella. Los componentes públicos conforman la interface entre la clase y el usuario.
PROTECTED SECTION (Parte Protegida): todos los componentes declarados en la sección protegida son accesibles para todos los métodos de la clase y de las clases que heredan de ella. Los componentes protegidos conforman la interface entre una clase y todas sus subclases.
SUBCLASES: son clases que heredan todo el comportamiento de sus super clases o clases padres.
PRIVATE SECTION (Parte Privada): los componentes declarados en la sección privada son solo visibles en los métodos de la misma clase. Los componentes privados no forman parte de la interface externa de la clase.
Los atributos de una clase a los que un usuario externo puede acceder directamente, son los atributos públicos. Los componentes públicos de una clase comúnmente se conocen como la interfaz de la clase. A la sección de visibilidad privada se conoce comúnmente como la ocultación de la información o encapsulación, en parte esto es para proteger al usuario de una clase ya que se supone que los componentes privados de una clase se modificaran en algún momento pero su interfaz es siempre la misma. Todos los usuarios externos solo pueden acceder a su componente a través de la interfaz de la clase por lo que se continuara trabajando con la clase como de costumbre después de realizado el cambio. El usuario no se dara cuenta del cambio, ya que solo la implementación interna fue modificado, por el contrario si los componentes públicos de una clase son modificados de una manera incompatible cada usuario externo tendría que tomar en cuenta estos cambios. Por lo tanto debemos utilizar los atributos públicos de una clase con mucha precaucion o bien evitar modificar los componentes públicos de una clase.
 
 
 
Sobre el autor
Publicación académica de Carlos Alberto Carreira, en su ámbito de estudios para la Carrera Consultor ABAP.
Carlos Alberto Carreira
Profesión: Consultor Técnico en Jde W.s. - Argentina - Legajo: KC15G
✒️Autor de: 92 Publicaciones Académicas
🎓Cursando Actualmente: Consultor ABAP Nivel Inicial
🎓Egresado de los módulos:
Certificación Académica de Carlos Carreira