0% encontró este documento útil (0 votos)
133 vistas

Tutorial ABAP Objects

Este documento presenta una introducción a la programación orientada a objetos en ABAP. Explica que ABAP permite representar entidades del mundo real como objetos que encapsulan datos y comportamientos. Describe algunos conceptos clave como clases, objetos, herencia y polimorfismo. Finalmente, compara ABAP con otros lenguajes orientados a objetos como Java y C++.

Cargado por

Bernardo Freitas
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
133 vistas

Tutorial ABAP Objects

Este documento presenta una introducción a la programación orientada a objetos en ABAP. Explica que ABAP permite representar entidades del mundo real como objetos que encapsulan datos y comportamientos. Describe algunos conceptos clave como clases, objetos, herencia y polimorfismo. Finalmente, compara ABAP con otros lenguajes orientados a objetos como Java y C++.

Cargado por

Bernardo Freitas
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 18

Tutorial ABAP Objects: Parte 1

Conozca el universo de la programacin orientada a objetos en SAP implementada con ABAP Objects. En este tip, el primero de la
serie de Tutoriales de ABAP Objects, veremos conceptualmente cmo se implementa el paradigma de objetos en el mundo
SAP. En los prximos artculos se tratarn en detalle ejemplos de programacin paso a paso, y otras caractersticas del entorno.
La programacin orientada a objetos (POO) es una filosofa de diseo y desarrollo de software donde el modelo informtico es un reflejo
de las entidades del mundo real. A diferencia de los lenguajes tradicionales, donde existen procedimientos por un lado y datos por el
otro, la POO permite a los programadores representar cada entidad del problema como un objeto encapsulado que contiene tanto sus
datos y cmo los comportamientos gestionan sobre ellos.
Valindose de un lenguaje y entorno que respete los principios de la teora de objetos, los objetos se crean a partir de una definicin
abstracta de los mismos, denominada clase, que describe sus caractersticas y comportamientos. Los objetos concretos luego
sern ejemplares o instancias de esa "plantilla" abstracta que es la clase. Por ejemplo, clases y objetos tpicos del entorno de
negocios son "Clientes", "Materiales", "Ordenes de compra", etc.
La teora de objetos se estructura alrededor en un conjunto de propiedades y paradigmas conceptuales (que exceden el alcance de este
artculo), implementados luego en los distintos entornos de programacin. Existen, numerosas y probadas ventajas asociadas a la
programacin orientada objetos que incluyen el encapsulamiento de la complejidad, la reusabilidad del cdigo, la modularidad, entre
otros.
La programacin orientada a objetos represent una verdadera revolucin en el universo del desarrollo de software, impulsando a
programadores, analistas y arquitectos de sistemas a re-aprender su forma de concebir cdigo y aplicaciones. En una primera instancia,
lenguajes como C++, y luego JAVA, se convirtieron en los entornos de programacin OO ms emblemticos.
En el mundo SAP, el instrumento que disponemos en ABAP para trabajar de acuerdo a este paradigma son los "ABAP
Objects".
La introduccin de ABAP Objects en el Release 4.6 represent un avance fundamental para incorporar tcnicas de programacin
contemporneas en un lenguaje tradicionalmente procedural. Sin embargo, la plena materializacin del paradigma de objetos en el
mundo SAP, lleg recin a partir de la versin 6.10, con el advenimiento del Web Application Server como sucesor de SAP Basis.
El concepto de ABAP Objects representa dos cosas distintas en el mundo SAP. Por un lado, designa a la concepcin de toda la
plataforma de ejecucin como un nuevo paradigma de trabajo. Por otro lado, designa a la nueva extensin del lenguaje ABAP.
El propsito de este tip, el primero de la serie de Tutoriales de ABAP Objects, es entender conceptualmente cmo se refleja el
paradigma de objetos en el mundo SAP. No es el propsito de este tutorial definir en detalle la teora de objectos en su vasta dimensin,
sino discutir su implementacin en el universo de ABAP Objects.
En los prximos artculos se tratarn en detalle ejemplos de programacin paso a paso, y otras caractersticas del entorno.
Los paradigmas de Orientacin a Objetos en ABAP Objects
Como se dijo anteriormente, el lenguaje ABAP y el entorno de programacin SAP, logra a partir de una nueva versin con extensin
orientada a objetos, el diseo de nuevas aplicaciones, basadas en la teora de objetos.
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.
Propiedades de un paradigma orientado a objetos:
Son precisamente las propiedades del paradigma de objetos lo que le otorga su singularidad y todas las ventajas de modularidad cuando
se plasman en la programacin.

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.
Cuadro de diferencia entre los lenguajes de programacin orientado a objetos:
Caractersticas
ABAP
JAVA
Se permite herencia mltiple
No
No
Es un lenguaje puro orientado a objetos
NO
SI
Liberacin de objetos de forma
SI
SI
automtica
Existe el concepto interfaz
SI
SI
Heredan de la clase OBJECT
SI
SI
Manejo de parmetros opciones de forma
Si
NO
explicita
Los programas se ejecutan sobre
Application Server
Procesador virtual
ABAP
JMV (Java Virtual
Machine)

C++
Si
NO
NO
NO
NO
NO
Sobre el sistema operativo

Describiremos a continuacin las principales sentencias que se utilizan en ABAP para trabajar con objetos.
A Clases en ABAP Objects
En la programacin orientada a objetos, la nica unidad de estructuramiento son las clases. En lugar de trabajar sobre datos y
procedimientos, como en un lenguaje convencional, trabajamos con objetos que encapsulan y auto-contienen sus datos y la forma de
gestionar sobre los mismos.
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 s e
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).
Tipos de clases: Globales Vs. Locales
Las clases en ABAP Objects pueden ser declaradas globalmente o localmente. As como existe una manera de definir un Function
Group o un Function Module desde el ABAP Workbench para ser usados en la programacin ABAP tradicional, tambin es posible definir
las clases globales y las interfaces en el ABAP Workbench mediante el Class Builder (Transaction SE24). Estas clases son almacenadas
centralmente en pools de clases en la biblioteca de clases dentro del repositorio de SAP.
Todos los programas ABAP en un sistema SAP pueden acceder a las clases globales. Las clases locales son las que se definen dentro
de un programa ABAP. De esta manera, las interfaces y las clases locales pueden ser usadas solamente en el programa en donde estn
definidas. Cuando se usa una clase en un programa ABAP, el sistema primero busca una clase local con el nombre especificado. Si no
se encuentra ninguna, busca una clase global.
Definicin de una clase local
La definicin completa de una clase en ABAP Objects consiste en una seccin dedeclaracin, y otra de implementacin, ambas
iniciadas con la sentencia CLASS.
Sentencia para la declaracin de una clase local:
CLASS <class> DEFINITION.

ENDCLASS.
Sentencia para la implementacin de una clase local:
CLASS <class> IMPLEMENTATION.

ENDCLASS.
B - Componentes de una clase
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 componentesESTATICOS. 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.

Atributos dependientes de instancia. El contenido de estos atributos define el estado propio e individual de cada objeto en cada
instancia de clase. Se declaran usando la sentencia DATA.
Los atributos ESTATICOS. Definen el estado de la clase vlido para todas las instancias de la mismo. Existen, por lo tanto, slo una
vez para la clase, y son accesibles durante todo el runtime de la clase. Todos los objetos pueden acceder a sus atributos estticos de
su clase, y si se cambia un atributo esttico en un objeto, el cambio es visible en todos los dems objetos de la clase.
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>..
Para declarar mtodos estticos se usa se usa la siguiente sentencia:
CLASS-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
sentenciasRAISE <exception> y MESSAGE 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.

Los mtodos visibles estticos tambin pueden ser llamados


CALL METHOD <class>=><meth>.
A partir de 6.10 se puede llamarlo as: <class>=><meth>
donde <class> es el nombre 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>.
Declaracin de un mtodo manejador de eventos para la misma o diferente clase
FOR EVENT <evt> OF <class>.
Vinculo entre el disparador y el manejador (trigger y handler):
SET HANDLER.
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 CLASS-EVENTS y solo pueden desencadenarse por
un mtodo esttico de la clase.
B-5 Tipos y Constantes
Los tipos se datos se declaran dentro de la clase por nica vez y se realiza utilizando la sentencia TYPES.
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.
Acceder a los componentes de un objeto
Para acceder a un componente de un objeto depender del tipo de componente y desde dnde se quiere invocar. Se detallas las 3
maneras distintas de lograrlo.
Los programas ABAP slo pueden acceder a los componentes de las instancias de un objeto usando las variables referenciadas <cref>.

Para acceder al atributo attr: class->attr.


Para llamar al mtodo meth: CALL METHOD cref->meth.
Para los componentes estticos (dependientes de clase) se puede usar tanto el nombre de la clase como la variable referenciada.

Para acceder al atributo esttico attr: class=>attr.


Para llamar al mtodo esttico meth: CALL METHOD class=>meth.
Dentro de una clase se puede acceder tambin a los componentes individuales mediante la referencia a s mismo ME:

Para acceder al atributo attr en la propia clase: me->attr. (tambin se acepta sloattr)
Para llamar al mtodo meth en la propia clase: CALL METHOD me->meth.
Tiempo de vida de un objeto
Un objeto solo puede seguir existiendo siempre y cuando haya una referencia a un objeto cuando un objeto maneja el evento de otro
objeto (handler). De lo contrario el objeto es borrado de la memoria automticamente.
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 <aclass> la clase que implementa a
<intf>
Si 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>.
Definicin de una referencia a un objeto:
TYPE REF TO <class>.
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 oprotected 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 dependientes de instancia
Un constructor dependiente de instancia de una subclase solo se ejecutara si todos los constructores dependientes de la superclase son
llamados.
Llamado al constructor de la superclase.
CALL METHOD SUPER->CONSTRUCTOR EXPORTING
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.
Clases y mtodos abstractos y finales
Las sentencias METHODS y CLASS mediante las adiciones ABSTRACT y FINAL permiten definir tanto a los mtodos como a las
clases de forma abstracta o final.

Diferencias:
Un mtodo abstracto solo se puede definirse en una clase abstracta y puede ser implementado en sus respectivas subclases.
Las clases abstractas no pueden ser instanciadas. Son utilizadas para la declaracin de mtodos no abstracto, pero al menos debe
contener un mtodo abstracto.
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

ENDINTERFACE.
Implementacin de la interfaz (la implementacin debe estar dentro de una clase que usa esta interfaz)
METHOD

ENDMETHOD.

<intf>.

<intf~imeth>.

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 TRYENDTRY. 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.

CATCH cx_exc_2 INTO ref_exc_2.

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.

Tutorial ABAP Objects: Parte 2


En esta Parte 2 del tutorial de ABAP Objects aprenderemos a crear clases, y a definir sus mtodos y atributos utilizando la transaccin
SE80/SE24. Mediante un ejemplo sencillo aprenderemos paso a paso cmo definir todas las componentes necesarias, y "testearlas"
luego desde un programa.
En este artculo se mostrar mediante la creacin de un programa ejemplo paso a paso, la implementacin de clases, mtodos y otras
componentes del universo de ABAP Objects.Dado que este tip es el segundo de una serie, si an so se conocen las generalidades
del modelo de objetos y su reflejo en ABAP, es necesaria la lectura previa del tip Tutorial ABAP Objects: Parte 1. Es importante
conocer cmo se materializa en ABAP Objects conceptualmente el paradigma de objetos para comprender el desarrollo del
ejemplo.

Modelo del Ejemplo


Como se explic en la primera parte del tutorial, en la programacin orientada a objetos, la nica unidad de estructuramiento son las
clases. En lugar de trabajar sobre datos y procedimientos, como en un lenguaje convencional, trabajamos con objetos que encapsulan
y auto-contienen sus datos y la forma de gestionar sobre los mismos. 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" o "instancias"
de una clase cualquiera.
Vimos las propiedades del paradigma de objetos, especialmente la herencia que se produce cuando una clase comparte la estructura y
el comportamiento definidos en una o ms clases (superclases). (Nota: En ABAP slo est permitida la herencia simple.) Vimos

asimismo que el objetivo de una interfaz es establecer relaciones entre clases sin usar herencia, ya que a veces no hay una superclase adecuada para establecer una relacin de herencia.
Para ejemplificar algunas caractersticas del Paradigma Orientado a Objetos (POO), se van a crear e implementar las
clases Z_ANIMAL, Z_VERTEBRADO, Z_INVERTEBRADO y la interfazZACCION, para "testearlas" posteriormente en un programa de
prueba.
Adems, en los ejemplos presentados se reflejar la utilizacin de:
Herencia producida entre las clases Z_ANIMAL a Z_VERTEBRADO yZ_INVERTEBRADO.
Polimorfismo al implementar el mtodo COMER definido en la interfaz ZACCION.
Encapsulamiento debido a que slo se logra acceder a datos privados mediante un mtodo como OBTENER_TIPO_ANIMAL.
El diagrama de clases siguiente detalla los componentes (atributos y mtodos) de las clasese interfaz que sern utilizados para este
ejemplo:

Creacin y definicin de la Interfaz ZACCION


La interfaz es creada para la definicin de los mtodos que se implementarn en las clases correspondientes.
Pasos de creacin de la interfaz
Desde la Tx SE80:
Seleccionar la opcin CLASS/INTERFACE, colocar el nombre del objeto a crear y presionar Enter. Luego en el pop-up Objecttype seleccionar el radio-button Interface y hacer click en Enter. Finalmente en Create Interface se especifica una descripcin y
clickear en Save . Luego, si corresponde, se asignar a una OT.

Paso para la definicin de los mtodos de la interfaz


Una vez creada la interface, se puede observar sobre el panel de la derecha las diferentes solapas que se utilizan para definir los
atributos, mtodos, eventos, etc.
Se cambia el modo de visualizacin a CHANGE y en la solapa METHODS se definen losmtodos que utiliza la interfaz, para ello se
completan los campos Method, Level yDescripcin. Por ltimo se Guarda y Activa.

Creacin, definicin e implementacin de la superclase Z_ANIMAL


La creacin de la superclase Z_ANIMAL ser necesaria para reflejar los conceptos deHerencia y Polimorfismo. Se van a definir
atributos y crear e implementar mtodos que heredarn las subclases.
Pasos para la creacin de la superclase
Se repite el primer paso de la creacin de la interface y se crea un objeto con el nombreZ_ANIMAL. En la ventana Object type se elige
la opcin Class y luego Aceptar.
En la siguiente ventana se desmarca la opcin FINAL, se completa con una descripcin, luego Aceptar y finalmente asignar un paquete
y una OT.

Pasos para la definicin atributos y mtodos de la superclase


Luego de crear la superclase:
1) Sse cambia el modo de visualizacin a CHANGE. En este paso se definen los atributos de la superclase, para ello ir a la
solapa Attributes, completar los campos requeridos (se sealan en la imagen inferior ampliada) y Guardar.

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

Pasos para la implementacin de los mtodos de la superclase Z_ANIMAL


1) Para definir los parmetros de entrada y/o salida de un mtodo, se selecciona el mtodoCONSTRUCTOR y se presiona el
botn Parameters. El mtodo Constructor requerir los parmetros de entrada I_PESO, I_COLOR, I_TIPO_ANIMAL e I_SUBTIPO.
Parmetros del mtodo CONSTRUCTOR

Nota: No se tiene la opcin de seleccionar el tipo de parmetro (importing, exporting, returning, changing) porque en un constructor,
los parmetros son siempre de entrada.
Una vez definidas las variables, es necesario implementar el mtodo de la superclase creada. Para ello, Guardar y presionar
, donde se presenta nuevamente la pantalla de definicin de mtodos.
2) Para implementar un mtodo, seleccionarlo y hacer Doble Click sobre el mismo. El propsito del mtodo Constructor, en este caso
parametrizado, es setear los atributos privados de un objeto. Para ello se deben asignar a los atributos, los valores de los parmetros
previamente mencionados. Luego Guardar los cambios.

El cdigo asociado es el siguiente:


METHOD constructor.
peso = i_peso.
color = i_color.
tipo_animal = i_tipo_animal.
subtipo = i_subtipo.
ENDMETHOD.
Para implementar los mtodos restantes seguir los pasos 1) y 2) de implementacin de mtodos.
Basndose en los puntos anteriores, se define el parmetro I_RESP y se implementa el mtodo RESPIRACION .
Parmetros del mtodo RESPIRACIN

Cdigo para la Implementacin del mtodo RESPIRACIN:


METHOD respiracion.
IF i_resp EQ 'Perro'.
WRITE / 'Respiracion: Pulmonar'.
ELSE.
WRITE / 'Respiracion: Branquial'.
ENDIF.
ENDMETHOD.
Para el mtodo OBTENER_TIPO_ANIMAL definir el parmetro de retorno R_TIPO_ANIMALe implementar el mtodo como se muestra
a continuacin.
Parmetros del mtodo OBTENER_TIPO_ANIMAL

Cdigo para la Implementacin del mtodo OBTENER_TIPO_ANIMAL:


METHOD obtener_tipo_animal.
r_tipo_animal = tipo_animal.
ENDMETHOD.
Pasos para agregar la interfaz a la superclase e implementar sus mtodos.
1) Finalizadas las implementaciones de los mtodos de la superclase, se agrega la interfazZACCION creada anteriormente a la misma.
Para ello, ir a la solapa Interfaces y escribir el nombre. Luego Guardar y Activar.

2) Para crear parmetros a un mtodo de la interfaz:


Navegar desde la superclase Z_ANIMAL Interfaces ZACCION Methods y seleccionar el mtodo BEBER, luego presionar
el botn Parameters y definir el parmetro de entrada I_TIPO_ANIMAL como se muestra a continuacin:

3) Para implementar el mtodo de la interfaz en la superclase Z_ANIMAL:


Navegar la superclase Z_ANIMAL Methods ZACCION y hacer Doble Click sobre elmtodo BEBER. Escribir el siguiente cdigo,
luego Guardar y Activar la superclase.
Cdigo para la implementacin del mtodo ZACCION~BEBER:
METHOD zaccion~beber.
DATA msj TYPE string.
CONCATENATE 'El animal ' i_tipo_animal 'toma agua'
INTO msj
SEPARATED BY ' '.
WRITE / msj.
ENDMETHOD.
Creacin, definicin e implementacin de la Subclase Z_VERTEBRADO
Se crea una subclase que contendr atributos y mtodos propios, y donde se ver reflejado la herencia y polimorfismo.
Pasos para la creacin de la subclase Z_VERTEBRADO
1) Se crea el objeto Z_VERTEBRADO y Aceptar. Para realizar la herencia seleccionar el botn
en la solapa de Properties y
colocar el nombre de la superclase (Z_ANIMAL), una Descripcin y marcar la opcin Final. De esta manera se indica que la subclase
Z_VERTEBRADO heredar las componentes de la superclase Z_ANIMAL. La opcin Finalindica que Z_VERTEBRADO no tendr
subclases.

2) Se visualizan los mtodos heredados de la superclase Z_ANIMAL. Se Activa la subclase Z_VERTEBRADO para reflejar los
mtodos implementados (marcados en celeste en la imagen siguiente) y los que deben redefinirse (marcados en negro) heredados de
la superclase.

La subclase Z_VERTEBRADO contendr el atributo CUALIDAD y los mtodosMOSTRAR_CARACTERISTICAS y CONSTRUCTOR.


Seguir los pasos 1) y 2) de definicin e implementacin de la superclase.
1) Definir el atributo de la subclase Z_VERTEBRADO

2) En la solapa Methods definir el mtodo MOSTRAR_CARACTERISTICAS. Para la creacin del CONSTRUCTOR, presionar el
botn

Se elige la opcin No, para no copiar el constructor de la superclase y crear uno propio.

De esa manera quedan detallados los mtodos definidos de la subclase Z_VERTEBRADO:

3) Se muestra los parmetros del Constructor:

Se implementa el mtodo del CONSTRUCTOR al escribir el siguiente cdigo, que invoca al constructor de la superclase y setea los
atributos correspondientes. Todos los atributos salvo cualidad, son especificados por el constructor de la clase padre que es invocado
a travs de la palabra super.
Cdigo para la Implementacin de CONSTRUCTOR:
METHOD constructor.
CALL METHOD super->constructor
EXPORTING
i_peso
= 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.

Por ltimo, se escribe la implementacin del mtodo MOSTRAR_CARACTERISTICAS:


Cdigo para la Implementacin del mtodo MOSTRAR_CARACTERISTICAS:
METHOD mostrar_caracteristicas.
IF i_tipo_animal EQ 'Perro'.
cualidad = 'Tiene 4 patas y camina'.
ELSE.

cualidad = 'No tiene patas y nada'.


ENDIF.
r_cualidad = cualidad.
ENDMETHOD.
Redefinicin de un mtodo de la interfaz Z_ACCION.
Las clases pueden redefinir un mtodo heredado de una superclase o definido en una interfaz para cumplir un propsito especfico.
1) En este caso se redefine el mtodo COMER definido en la interfaz ZACCION. Dentro del rbol generado por los pasos anteriores,
seleccionar el mtodo COMER, luego presionar botn derecho y elegir la opcin Redefine.

2) Al igual que los mtodos implementados anteriormente, se necesitar definir un parmetro (en este caso, un parmetro de entrada)
en la Interfaz ZACCION y su correspondiente implementacin en la clase Z_VERTEBRADO. Luego se Guarda y se Activa.
Parmetros de del mtodo ZACCION~COMER (definidos en la interfaz ZACCION):

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.
Pasos para la creacin de la Subclase Z_INVERTEBRADO
Para la subclase Z_INVERTEBRADO solo ser necesario crear un CONSTRUCTOR yredefinir el mtodo OBTENER_TIPO_ANIMAL.
Esta clase no contendr atributos y mtodos propios.
1) La creacin de esta subclase, requiere repetir los pasos de la creacin de la subclase Z_VERTEBRADO. A continuacin se muestra
los componentes heredados:

2) Desde la solapa Methods presionar el botn CONSTRUCTOR y definir los parmetros para ese mtodo (como se v en la iamgen
ampliada):

Cdigo para la Implementacin del mtodo CONSTRUCTOR:


METHOD constructor.
CALL METHOD super->constructor
EXPORTING
i_peso
= i_sub_peso
i_color
= i_sub_color
i_tipo_animal = i_sub_tipo_animal
i_subtipo = i_sub_subtipo.
ENDMETHOD.
Pasos para Redefinir el mtodo COMER de la interfaz Z_ACCION.
El paso de redefinicin del mtodo COMER se repite del ya mencionado para la clase Z_VERTEBRADO.
1) Se muestra el parmetro utilizado (definido en la interfaz Z_ACCION) y la implementacin del mtodo COMER en Z_VERTEBRADO.

Cdigo para la Implementacin del mtodo ZACCION~COMER:


METHOD zaccion~comer.
CALL METHOD super->zaccion~comer
EXPORTING
i_tipo_animal = i_tipo_animal.
DATA msj TYPE string.
CONCATENATE 'Los invertebrados como la' i_tipo_animal
'comen materia orgnica presente en el suelo' INTO msj
SEPARATED BY ' '.
WRITE / msj.
ENDMETHOD.
Creacin del programa ZPRUEBA para testear todas las componentes definidas anteriormente
Se crea el programa ZPRUEBA y se utiliza el cdigo siguiente para probar los mtodos implementados.
REPORT zprueba.

* Crear refencias (perro, salmn, lombriz) a sus respectivas clases.


DATA: perro TYPE REF TO z_vertebrado,
salmon TYPE REF TO z_vertebrado,
lombriz TYPE REF TO z_invertebrado,
nombre TYPE char20,
info TYPE string,
msj TYPE string.
START-OF-SELECTION.
* Crear instancias de referencia que apuntan a un objeto de la clase Z_VERTEBRADO
CREATE OBJECT perro
TYPE
z_vertebrado
EXPORTING
i_sub_peso
= 10
i_sub_color
= 'Negro'
i_sub_tipo_animal = 'Perro'
i_sub_subtipo = 'Mamfero'
i_cualidad
= ' '.
CREATE OBJECT salmon
TYPE
z_vertebrado
EXPORTING
i_sub_peso
=5
i_sub_color
= 'Gris'
i_sub_tipo_animal = 'Salmn'
i_sub_subtipo = 'Pez'
i_cualidad
= ' '.
* Creo instancias de referencia que apuntan a un objeto de la clase Z_INVERTEBRADO
CREATE OBJECT lombriz
TYPE
z_invertebrado
EXPORTING
i_sub_peso
=1
i_sub_color
= 'Rosa'
i_sub_tipo_animal = 'Lombriz'
i_sub_subtipo = 'Anlidos'.
* Desde la referencia PERRO
* Utiliza los mtodos heredados de la superclase Z_ANIMAL
nombre = perro->obtener_tipo_animal( ).
CONCATENATE 'El animal es ' nombre INTO msj SEPARATED BY ' '.
WRITE / msj.
salmon->respiracion( nombre ).
*Utilizo el mtodo de la subclase Z_VERTEBRADO.
info = perromostrar_caracteristicas( nombre ).
WRITE / info.
*Utilizo mtodos de la interfaz.
perro->zaccion~beber( EXPORTING i_tipo_animal = nombre ).
perro->zaccion~comer( EXPORTING i_tipo_animal = nombre ).
SKIP 2.
*Desde la referencia SALMON
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.
salmon->zaccion~beber( EXPORTING i_tipo_animal = nombre ).
salmon->zaccion~comer( EXPORTING i_tipo_animal = nombre ).
SKIP 2.

*Desde la referencia LOMBRIZ


*Utilizo los mtodos heredados de la superclase Z_ANIMAL
nombre = lombriz->obtener_tipo_animal( ).
CONCATENATE 'El animal es ' nombre INTO msj SEPARATED BY ' '.
WRITE / msj.
lombriz->zaccion~beber( EXPORTING i_tipo_animal = nombre ).
lombriz->zaccion~comer( EXPORTING i_tipo_animal = nombre ).
Una vez ejecutado el programa, la salida es la siguiente:

También podría gustarte