Está en la página 1de 8

Teora- ABAP OO

Manual de ABAP Objects, veremos conceptualmente cmo se implementa el paradigma de


objetos en el mundo SAP.
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
definicinabstracta de los mismos, denominada clase, que describe sus caractersticas y comportamientos. Los objetos
concretos luego sern ejemplares o instanciasde esa "plantilla" abstracta que es la clase. Por ejemplo, clases y objetos tpicos
del entorno de negocios son "Clientes", "Materiales", "rdenes 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.
P.O.O Encapsulacin. Herencia, Polimorfismo, Abstraccin

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 no permite herencia multiple, no es un lenguaje puro de objetos. Los programas se ejecutan sobre
Application Server ABAP.
Describiremos a continuacin las principales sentencias que se utilizan en ABAP para trabajar con objetos.
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 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).
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 de declaracin, 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.

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

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.
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.
Implementacin de un constructor:
Dependiente de la instancia
METHOD CONSTRUCTOR.

ENDMETHOD.
Independiente esttico.
METHOD CLASS_CONSTRUCTOR.
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.
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.
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 slo attr)
Para llamar al mtodo meth en la propia clase: CALL METHOD me->meth.

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>.
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.
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.
Implementacin de la interfaz (la implementacin debe estar dentro de una
clase que usa esta interfaz)
METHOD <intf~imeth>.

ENDMETHOD.