Professional Documents
Culture Documents
inShare12
Comparado con otros, ABAP no es un lenguaje puro orientado a objetos. El runtime de ABAP
soporta tanto el modelo de programacin procedural como el de ABAP Objects en cualquier
programa ejecutable, mdulos o funciones.
Esto permite la utilizacin de nuevas tcnicas basadas en ABAPsin necesidad de re-escribir todo
el cdigo.
Encapsulamiento: Es el trmino que define formalmente la fusin dentro del mismo objeto de
sus datos y mtodos (comportamiento). Los objetos son tratados como caja negra, de manera
que slo sus mtodos pueden actuar sobre sus datos, brindando independencia en la
implementacin de los mismos..
Abstraccin: Permite a un objeto comunicarse y desconocer el forma en que se lleva a cabo el
mensaje.
Polimorfismo: Capacidad que tienen objetos de distintas clases de responder a un mismo
mtodo y obtener diferentes reacciones.
Herencia: Se produce cuando una clase (la subclase) comparte la estructura (atributos) y el
comportamiento (mtodos) definidos en una o ms clases (superclases). (Nota: En ABAP slo
est permitida la herencia simple.)
Obviamente, estas propiedades se ven reflejadas en la implementacin de POO que hace ABAP
Objects.
Es interesante contrastar las capacidades de ABAP Objects con las de otros lenguajes OO
populares, en trminos de cmo se cie al modelo POO.
ABAP
JAVA
C++
Se permite herencia
mltiple
No
No
Si
Es un lenguaje puro
orientado a objetos
NO
SI
NO
Liberacin de objetos de
forma automtica
SI
SI
NO
Existe el concepto
interfaz
SI
SI
NO
Heredan de la clase
OBJECT
SI
SI
NO
Manejo de parmetros
opciones de forma
explicita
Si
NO
NO
Los programas se
ejecutan sobre
Application Server
ABAP
Sobre el sistema
operativo
Describiremos a continuacin las principales sentencias que se utilizan en ABAP para trabajar
con objetos.
Las clases son una definicin abstracta de objetos. Esto significa que la definicin o declaracin
de un objeto es la clase. Luego, los objetos propiamente dichos sern "ejemplares" de una clase
cualquiera. Esta accin de crear un objeto a partir de una clase se llama instanciar, por eso se
conocen a los objetos como instancias de una clase.
Las propiedades o atributos de una clase en una clase conforman las caractersticas de los
objetos. Estos atributos estn definidos por las componentes de la clase que describe el estado
(los datos).
ENDCLASS.
ENDCLASS.
Los componentes de una clase conforman su contenido, y se declaran en la parte declarativa del
cdigo. Definen las propiedades de los objetos de esa clase.
Cuando la clase se define, cada componentes se asocia a una de las tres posibles secciones de
visibilidad: pblico, protegido o privado. Las secciones de visibilidad definen la interfaz
externa de la clase.(ver apartado sobre visibilidad ms abajo)
Todos los componentes son visibles dentro de la clase, y comparten el mismo espacio de
nomenclatura, por lo que cada componente debe tener un nombre unvoco dentro de su clase.
Se implementan en ABAP dos tipos de componentes en una clase, aquellos que existirn en
cada uno de los objetos o instancias de clase, adquiriendo valor separadamente uno para
cada objeto, y aquellos que existen slo una vez para la clase entera, independientemente
de la cantidad de instancias, denominados componentes ESTATICOS. A los primeros, en
cambio, se los llama componentes especficos de instancia.
Las componentes de una clase son los atributos, los mtodos, los eventos, los tipos y las
constantes.
B-1 Atributos
En ABAP los atributos son los campos internos de DATOS definidos para la clase. Pueden
declararse a partir de cualquier tipo de dato vlido en ABAP. En cada instancia de clase los
atributos reflejarn el estado del objeto (es decir, los datos del objeto). Respetando la
clasificacin general enunciada para los componentes de clase, tendremos dos tipos de
atributos: los especficos de instancia, y los estticos.
B 2 Mtodos
Las funcionalidades asociadas a los objetos se definen a travs de los mtodos, que de esa
forma determinan el comportamiento de los objetos. Los mtodos son procedimientos que
definen el comportamiento de un objeto, su funcionalidad asociada. Se utilizan para acceder a los
atributos privados de una clase, como tambin modificarlos mediante una interfaz con parmetros
que les permite recibir valores y devolver valores despus de la llamada.
En ABAP, un mtodo se define en la parte declarativa de la clase y luego se implementa en la
parte de implementacin. Nuevamente, por ser componentes de clase, cabe la misma
diferenciacin en mtodos dependientes de instancia, y estticos.
METODOS dependientes de la instancia: Se declaran usando la sentencia
METHODS y pueden acceder a todos los atributos de una clase y desencadenar algn evento
de la misma.
Mtodos estticos (independientes de instancia): Se declaran usando la sentencia
CLASS-METHODS. Slo pueden acceder a los atributos estticos y desencadenar eventos
estticos.
Declaracin de mtodos
Mtodos dependientes de instancia
METHODS <meth>
IMPORTING.. [VALUE(]<ii>[)] TYPE type [OPTIONAL]..
EXPORTING.. [VALUE(]<ei>[)] TYPE type [OPTIONAL]..
CHANGING.. [VALUE(]<ci>[)] TYPE type [OPTIONAL]..
RETURNING VALUE(<r>)
EXCEPTIONS.. <ei>..
Implementacin de mtodos
Cuando se implementa un mtodo no es necesario especificar los tipos de datos de los
parmetros, debido a que se encuentran ya se encuentran definidos en la declaracin. En un
mtodo se pueden declarar tanto las variables locales, como tambin usar las sentencias RAISE
<exception> yMESSAGE RAISING para controlar los errores.
METHOD <meth>
IMPORTING..[VALUE(]<ii>[)]
EXPORTING..[VALUE(]<ei>[)]
CHANGING.. [VALUE(]<ci>[)]
RETURNING VALUE(<r>)
EXCEPTIONS.. <ei>..
ENDMETHOD.
Nota: Los mtodos estticos slo pueden trabajar con los atributos estticos de la clase.
Llamadas al mtodo
Las llamadas al mtodo dependern de dnde se lo invoque:
En la parte de implementacin de una clase se pueden llamar directamente mtodos de
la misma clase simplemente usando su nombre.
CALL METHOD <meth>.
Desde fuera de la clase, slo se llama a los mtodos cuya visibilidad nos permite
hacerlo.
CALL METHOD <cref>-><meth>.
A partir de 6.10 se puede llamarlo as: <cref>-><meth> directamente, sin la palabra clave
CALL METHOD
donde <cref> es una variable de referencia cuyo valor apunta a una instancia de la clase.
En un mtodo los pasajes de parmetros de entrada son opcionales; dentro del mtodo se
declaran con el tipo IMPORTING. En cambio los de salida, no son optativos y se utiliza como tipo
a EXPORTING o RETURNING. En el caso de RETURNING slo se admite un nico parmetro
de salida y se puede combinar nicamente con parmetros declarados como IMPORTING. El
caso de CHANGING tambin puede ser opcional.
B-3 Constructores
Los constructores son un tipo especial de mtodos y su definicin e implementacin es igual que
cualquier otro mtodo. Son llamados automticamente por el sistema (cuando se crea un objeto,
es decir, cuando se crea una instancia, mediante la sentencia CREATE OBJECT), para fijar el
estado inicial de un nuevo objeto o clase (constructor esttico). Los constructores, tanto si
estn parametrizados como si no lo estn, para ser implementados deben estar declarados
explcitamente, y en su declaracin se puede contemplar el manejo de errores.
Declaracin de constructor:
El constructor dependiente de instancia
METHODS CONSTRUCTOR
IMPORTING..[VALUE(]<ii>[)] TYPE type [OPTIONAL].
EXCEPTIONS..<ei>.
El constructor esttico, no contiene parmetros y es llamado una vez por cada clase
CLASS-METHODS CLASS_CONSTRUCTOR.
Implementacion de un constructor:
Dependiente de la instancia
METHOD CONSTRUCTOR.
ENDMETHOD.
Independiente esttico.
METHOD CLASS_CONSTRUCTOR.
B-4 Eventos
Un evento es una accin que se ejecuta dinmicamente. Son usados por los objetos o las clases
para desencadenar mtodos en otros objetos o clases, llamados por los usuarios. Son
semejantes de los mtodos, sin embargo solo poseen parmetros de salida pasados por el
disparador y el mtodo manejador los recibe como entrada.
Cuando un evento es disparado por un disparador de evento (trigger), el correspondiente mtodo
manejador de eventos (event handler methods) es ejecutado en todas las clases
registradas por ese manejador (son los objetos registrados; clases es en el caso que sea
estatico pero es poco comn. Puede haber 2 objetos de una misma clase en el cual el primero
est registrado/subscripto al evento de un tercer objeto pero el segundo no), el cual determina los
eventos que deben reaccionar. La relacin entre el disparador y el mtodo manejador de
eventos se realiza en tiempo de ejecucin.
Lanzamiento de un evento
RAISE EVENT <evt>.
Clasificacin de eventos
Eventos dependientes de instancia: Son declarados con la sentencia EVENTS <evt> y
solo pueden ser desencadenados en un mtodo dependiente de instancia.
Eventos estticos o independientes de instancia: Se declaran con la sentencia CLASSEVENTS y solo pueden desencadenarse por un mtodo esttico de la clase.
Las constantes permiten que dar a un objeto de dato interno un valor fijo durante su declaracin y
ste no puede ser modificado. La sentencia usada es CONSTANTS.
B-6 Visibilidad
Los componentes de una clase se pueden declarar en tres reas de distinta visibilidad: Cuando la
clase se define, cada componentes se asocia a una de las tres posibles secciones de
visibilidad: pblico, protegido o privado. Las secciones de visibilidad definen la interfaz
externa de la clase.
CLASS <class> DEFINITION.
PUBLIC SECTION.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
Tipos de visibilidad:
Public section: Permite que los componentes pueden ser accedidos por todos los
usuarios de la clase, mtodos de la clase y adems por cualquier clase que herede de ella.
Protected section: Los componentes solo logran ser accedidos por los mtodos de la
clase y de las clases que heredan de ella
Private section: Los componentes slo sern accedidos por mtodos de la misma
clase.
Todos los componentes son visibles dentro de la clase, y comparten el mismo espacio de
nomenclatura, por lo que cada componente debe tener un nombre unvoco dentro de su clase.
C- Objetos
Los objetos son entidades tangibles de una clase que residen dentro de un contexto de una
sesin interna (rea de memoria de un programa ABAP).
Caractersticas de un objeto:
El estado, los valores concretos (datos) asignados a los atributos.
El comportamiento, se define por los procedimientos que puede realizar un objeto.
La identidad es una propiedad de un objeto que lo diferencia del resto, como es el
nombre.
Creacin de un objeto
La sentencia CREATE OBJECT <cref> crea una instancia de una clase. La variable referenciada
<cref> contiene la referencia al objeto.
Los programas ABAP slo pueden acceder a los componentes de las instancias de un objeto
usando las variables referenciadas <cref>.
Para los componentes estticos (dependientes de clase) se puede usar tanto el nombre de la
clase como la variable referenciada.
Dentro de una clase se puede acceder tambin a los componentes individuales mediante la
referencia a s mismo ME:
Referencias
Las variables de referencia permiten acceder a los objetos. En vez de crear variables de
referencia con referencia a una clase, se las puede definir con referencia a una interfaz. Este tipo
de variables nicamente puede contener referencias a objetos de clases que implementan la
interfaz correspondiente.
Se la define mediante la adicin TYPE REF TO <intf>.
Si se desea crear una nueva instancia de la clase que implementa esta interfaz, se lo debe hacer
mediante la sentencia:
CREATE OBJECT <iref> TYPE <aclass>, donde <iref> es una variable de referencia a interfaz y
D- Herencia de clases
La herencia se realiza entre dos clases (una superclase y una subclase). La subclase heredar
los componentes pblicos y privados de la superclase, logrando el mismo comportamiento.
Teniendo la posibilidad de extender o limitar ese comportamiento para proveer una accin
requerida.
Cabe aclarar que aunque hereda los componentes privados, stos NO son visibles dentro de la
subclase. Es decir, no puede hacer referencia directamente a atributos privados y alterarlos. Se
van a poder manipular nicamente si en la superclase hay mtodos public o protected que lo
permiten.
El nodo raz de todos los rboles de herencia en ABAP Objects es la clase predefinida
vacaOBJECT.
Definicin para una herencia:
CLASS <subclass> DEFINITION INHERITING FROM <superclass>.
Nota: Los atributos estticos slo existen una vez y son visibles en todas las clases del rbol de
herencia.
Debido a que los constructores no se heredan, hay existen dos maneras de implementarlo que
depender de si existe dependencia no a una instancia.
Constructores estticos
Se ejecuta de la misma manera que los constructores dependientes de la instancia solo varia en
la declaracin de la implementacin.
Llamado al constructor de la superclase.
CLASS_CONSTRUCTOR.
Un mtodo final es la manera de proteger mtodos para no ser redefinidos por las
subclases.
Las clases finales no pueden tener subclases, debido a que son las que finalizan el
rbol de herencia. De forma implcita todos sus mtodos son final.
E- Interfaz
El objetivo de una interfaz es establecer relaciones entre clases sin usar herencia, ya que a
veces no hay una super-clase adecuada para establecer una relacin de herencia.
Una interfaz no puede instanciar objetos, sin embargo pueden definirse atributos static y final. Se
utiliza principalmente para la definicin de mtodos abstractos, por lo cual la implementacin se
realiza en otras clases. Todos los componentes son visibles para las clases en donde se
implementan los mtodos definidos.
Definicin de interfaz
INTERFACE <intf>.
ENDINTERFACE.
ENDMETHOD.
Referencias a interfaces
Las variables de referencia permiten acceder a los objetos. En vez de crear variables de
referencia con referencia a una clase, se las puede definir con referencia a una interfaz. Este tipo
de variables nicamente puede contener referencias a objetos de clases que implementan la
interfaz correspondiente.
Se la define mediante la adicin TYPE REF TO <intf>.
Si se desea crear una nueva instancia de la clase que implementa esta interfaz, se lo debe hacer
mediante la sentencia:
CREATE OBJECT <iref> TYPE <aclass>, donde <iref> es una variable de referencia a interfaz y
<aclass> la clase que implementa a <intf>
S la instancia ya existe se puede hacer la siguiente asignacin entre la variable de referencia a
clase y la variable de referencia a interfaz:
<iref> = <cref>.
Cuando se quiere acceder a un componente definido en la interfaz <intf> mediante la variable de
referencia a clase <cref> se lo debe hacer mediante la siguiente forma:
<cref>-><intf~compi>
Pero cuando se accede mediante <iref> se lo hace a travs de la forma:
<iref>-><compi>.
F- Exception
Es una situacin que ocurre durante la ejecucin de un programa que interrumpe o cambia su
normal comportamiento. La idea fundamental es que tales situaciones puedan ser manejadas de
alguna forma. Las excepciones son representadas por una instancia de una clase excepcin.
Los atributos de tal objeto van a contener informacin acerca de la situacin ocurrida.
Una excepcin puede ser levantada con la sentencia RAISE EXCEPTION. Cuando esto ocurre,
el sistema busca un manejador adecuado que se haga cargo y en el caso de no encontrarlo, se
produce un error en tiempo de ejecucin. Este manejo se puede llevar nicamente a cabo si la
sentencia que podra ocasionar que se levante la excepcin, se encuentra encerrada por el
bloque TRY-ENDTRY.Especficamente, el manejo de la excepcin se realiza con la
sentencia CATCH que se encuentra dentro del bloque.
TRY.
SENTENCIA_X.
CATCH cx_exc_1 INTO ref_exc_1.
CLEANUP.
ENDTRY.
SENTENCIA_X puede ser una subrutina, un modulo de funcin, el mtodo de un objeto o algo
que pueda lanzar una o ms excepciones. Cada cx_exc_i es una clase excepcin que puede
ser lanzada dentro de SENTENCIA_X. ref_exc_i es una instancia de la clase cx_exc_i o de
alguna. Lo que se encuentra dentro del bloque CLEANUP se produce cuando el sistema no
encuentra un manejador para la excepcin que fue levantada. Si SENTENCIA_X levanta la
excepcin cx_exc_3 y no existe un CATCH para la misma, se ejecutar las instrucciones que se
encuentren en el bloque CLEANUP.
Estos conceptos definen las generalidades de la implementacin del paradigma orientado a
objetos en el mundo SAP a travs de ABAP Object. En el prximo tip de la serie de tutoriales,
abordaremos un ejemplo concreto.
inShare9
Creacin y definicin de
la Interfaz ZACCION
La interfaz es creada para la definicin de los mtodos que se implementarn en las clases
correspondientes.
2) En la solapa Methods se definen los mtodos de instancia que debern ser implementados
en la superclase. El Constructor es un mtodo particular que se crea al presionar el
botn
mtodos.
Basndose en los puntos anteriores, se define el parmetro I_RESP y se implementa el
mtodoRESPIRACION .
Parmetros del mtodo RESPIRACIN
r_tipo_animal = tipo_animal.
ENDMETHOD.
= i_sub_peso
i_color
= i_sub_color
i_tipo_animal = i_sub_tipo_animal
i_subtipo
= i_sub_subtipo.
cualidad = i_cualidad.
ENDMETHOD.
4) Se definen los parmetros de entrada/salida del mtodo MOSTRAR_CARACTERISTICAS.
Nota: Desde la pantalla que se visualiza a continuacin no es posible modificar los parmetros
de entrada o salida ya que los mismos son definidos en la interfaz. Una clase que usa dicha
interfaz, nicamente implementa sus mtodos respetando los parmetros de cada uno. Los
parmetros pueden ser modificados desde la interfaz nicamente.
Cdigo para la Implementacin del mtodo ZACCION~COMER:
METHOD zaccion~comer.
CALL METHOD super->zaccion~comer
EXPORTING
i_tipo_animal = i_tipo_animal.
IF i_tipo_animal EQ 'Perro'.
WRITE / 'Los Perros comen hueso'.
ELSE.
WRITE / 'Los Peces comen larvas'.
ENDIF.
ENDMETHOD.
2) Desde la solapa Methods presionar el botn CONSTRUCTOR y definir los parmetros para
ese mtodo (como se v en la iamgen ampliada):
= i_sub_peso
i_color
= i_sub_color
i_tipo_animal = i_sub_tipo_animal
i_subtipo
= i_sub_subtipo.
ENDMETHOD.
= 10
i_sub_color
= 'Negro'
i_sub_tipo_animal = 'Perro'
i_sub_subtipo
i_cualidad
= 'Mamfero'
= ' '.
=5
i_sub_color
= 'Gris'
i_sub_tipo_animal = 'Salmn'
i_sub_subtipo
i_cualidad
= 'Pez'
= ' '.
i_sub_peso
=1
i_sub_color
= 'Rosa'
i_sub_tipo_animal = 'Lombriz'
i_sub_subtipo
= 'Anlidos'.
salmon->respiracion( nombre ).
SKIP 2.
nombre = salmon->obtener_tipo_animal( ).
CONCATENATE 'El animal es ' nombre INTO msj SEPARATED BY ' '.
WRITE / msj.
salmon->respiracion( nombre ).
info = salmon->mostrar_caracteristicas( nombre ).
WRITE / info.
SKIP 2.
CONCATENATE 'El animal es ' nombre INTO msj SEPARATED BY ' '.
WRITE / msj.