Abap Orientado a Objetos

download Abap Orientado a Objetos

of 36

Transcript of Abap Orientado a Objetos

LENGUAJE ABAP ORIENTADO A OBJETOSQU ES LA ORIENTACIN A OBJETOS?com portam iento real de los objetos en el m undo real. Se pretende desarrollar com ponentes de software que se com porten com los objetos reales a o los que representan. La orientacin a objetos es una tcnica usada en m uchos lenguajes de program acin los cuales com parten una term inologa usada universalm ente. En esta seccin se realizar una prim visin de conjunto de estos trm para en secciones era inos posteriores adentrarse en la im entacin de estos conceptos en el lenguaje ABAP plem .

HOME CURSOS SAP CURSOS ITASP.NET ASP Clsico Java SQL Server HTML UML

ObjetosUn objeto es nicam una porcin de cdigo fuente que contiene datos y proporciona servicios. Los datos constituyen los atributos del objeto. Los ente servicios que proporciona el objeto se conocen com m o todos y se asem en su funcionam ejan iento a las funciones. Norm ente los m alm todos operan con los datos privados del objeto, esto es, con datos que son slo visibles para los m todos del objeto. De esta m anera, los atributos de un objeto no pueden ser cam biados directam por el usuario del objeto, slo pueden ser cam ente biados por los m todos de ese objeto. As se garantiza la consistencia interna del objeto.

ESPECIALIST AS WEBS ASOCIADAS APOYO ESCOLAR CLASES AVANZADAS ESPECIALES COMPUT ACIN CURSOS ON-LINE

ClasesUna clase es una entidad terica que describe el com portam iento de un objeto. Desde un punto de vista m ente tcnico, un objeto es una eram instancia en tiem de ejecucin de una clase. En principio se pueden crear cualquier nm de objetos basados en una nica clase. Cada instancia po ero de una clase (objeto) tiene su propia identidad y su propio conjunto de valores para sus atributos. Dentro de un program un objeto es identificado a por su referencia, la cual le proporciona un nom que define inequivocam al objeto y perm acceder a sus m bre ente ite todos y atributos.

Propiedades de los objetosEn la program acin orientada a objetos, los objetos tienen norm ente las siguientes propiedades: alm Encapsulacin Los objetos restringen la visibilidad de sus recursos (atributos y m todos) al resto de usuarios. Cada objeto posee una interface que determ la m ina anera de interactuar con l. La im entacin del objeto (su interior) es encapsulada, lo que quiere decir que desde fuera el objeto es plem invisible, sim ente se usa. plem Polim orfism El polim o orfism quiere decir que m o todos que se llam exactam igual pueden com an ente portarse de m anera distinta en clases diferentes. La orientacin a objetos tiene unas estructuras llam interfaces que perm acceder a m adas iten todos con el m o nom en diferentes ism bre clases. Dentro de cada clase particular se puede redifinir el m todo obteniendo distintos m todos con el m o nom Asi es que un m ism bre. todo no se define exactam con su nom si no con su nom y el nom de la clase a la que pertenece. ente bre, bre bre Herencia Se pueden utilizar clases existentes para originar nuevas clases. Las nuevas clases originadas heredan los datos y los m todos de la superclase. De cualquier m anera, se pueden sobreescibir los m todos existentes, incluso aadir m todos nuevos.

Usos de la orientacin a objetosLas principales ventajas de la program acin orientada a objetos son: Sistem de software m com as uy plejos se vuelven m ucho m sim de com s ples prender debido a que la orientacin a objetos proporciona una representacin m ucho m cercana a la realidad que otras s tcnicas de program acin. En un sistem correctam diseado con orientacin a objetos es posible realizar cam al nivel de la clases, sin tener que realizar cam en a ente bios bios ningn otro punto del sistem Esto reduce a. significativam el costo total del m ente antenim iento necesario. A travs del polim orfism y la herencia es posible la reutilizacin de com o ponentes individuales. La cantidad de trabajo en revisin y m antenim iento del sistem se reduce debido a que m a uchos problem pueden ser detectados y corregidos en la fase de diseo. as Para conseguir estos objetivos necesitam os: Lenguajes de program acin orientados a objetos Las tcnicas de program acin orientadas a objetos no utilizan necesariam un lenguaje ente orientado a objetos, aunque la eficiencia del desarrollo depende directam de la utilizacin o no de un lenguaje orientado a objetos. ente Herram ientas orientadas a objetos Estas herram ientas perm crear program orientados a iten as objetos en lenguajes orientados a objetos. Perm adem disear y alm iten s acenar los objetos desarrollados y las relaciones entre ellos. Diseo orientado a objetos El diseo orientado a objetos de un sistem de software es, de todos los requerim a ientos para conseguir las ventajas arriba enum eradas, el m im s portante, el que m tiem s po consum y el m dificil de llevar a cabo. e s

QU SON LOS OBJETOS ABAP (ABAP OBJECTS)?Este es un nuevo concepto introducido en el release 4.0 que tiene dos significados, por un lado se refiere al entorno de ejecucin ABAP y por otro a la extensin orientada a objetos del lenguaje ABAP

El entorno de ejecucinEl nom de ABAP objects para todo el entorno de ejecucin ABAP quiere indicar el objetivo an no totalm desarrollado de adaptar SAP bre ente com pletam a la orientacin a objetos. El ABAP W ente orkbench perm crear objetos del R/3 Repository tales com program objetos de autorizacin, ite o as, objetos de bloqueo, etcetera. El Business Object Repository (BOR) perm crear SAP Business objects. Hasta ahora las tcnicas de orientacin a ite objetos se haban usado exclusivam en el diseo, pero desde el release 4.0 el lenguaje ABAP es ya un lenguaje orientado a objetos. ente

Extensin orientada a objetos de ABAPABAP Objects es asim o un conjunto de sentencias orientadas a objetos que han sido introducidas ism dentro del lenguaje ABAP Esta extensin se cim en el lenguaje ya existente, siendo com . enta patible con l. Se pueden usar objetos en program as existentes, de la m a m ism anera que se pueden usar sentencias ABAP convencionales en program ABAP orientados a objetos. as El resto del lenguaje ABAP est creado desde un principio orientado a una program acin estructurada, en la cual los datos se alm acenan de m anera estructurada en tablas en la base de datos y los program m as ediante funciones acceden a estos datos y trabajan con ellos.

PASO DE LAS FUNCIONES A LOS OBJETOSLos objetos son el centro de cualquier m odelo orientado a objetos. Los objetos contienen atributos (datos) y m todos (funciones). Uno de susconverted by Web2PDFConvert.com

Los objetos son el centro de cualquier m odelo orientado a objetos. Los objetos contienen atributos (datos) y m todos (funciones). Uno de sus principales objetivos es el sum inistar al desarrollador de software una form de trabajo en la cual poder exam un problem real y poder a inar a proporcionar una solucin individualizada al problem En el entorno de los negocios podran ser objetos las entidades Cliente, Factura, etcetera. a. Desde el Release 3.1 en adelante, el Business Object Repository (BOR) contiene ejem de tales plos objetos (transaccin SW02). Lo m parecido a los objetos que tena ABAP eran los m s dulos de funciones y los grupos de funciones. Supongam que tenem un grupo de funciones para procesar pedidos. Los atributos de un pedido son los datos globales del grupo de funciones, os os m ientras que los m dulos de funciones son las acciones que m anipulan los datos, o sea los m todos. Esto quiere decir que los datos reales del pedido estn encapsulados en el grupo de funciones y no se puede acceder directam a ellos, slo m ente ediante los m dulos de funciones. De esta m anera se garantiza la consistencia de los datos. Cuando se ejecuta un program ABAP el sistem inicia una nueva sesin interna que tiene una zona de m oria en la cual reside el program ABAP y sus a , a em a datos asociados. Cuando el program llam a un a a m dulo de funciones, una instancia del grupo de funciones m sus datos es cargado en el rea de s m oria de la sesin interna. Un program puede cargar distintas instancias llam em a ando a m dulos de funciones de diferentes grupos de funciones. La instancia de un grupo de funciones en el rea de m oria de la sesin interna representa prcticam el concepto de objeto. Cuando se llam al em ente a m dulo de funciones, el program que llam usa la instancia del grupo de funciones basada en su descripcin en la biblioteca de funciones. El program a a a no puede acceder a los datos en el grupo de funciones directam pero si a travs del m ente dulo de funciones. El m dulo de funciones y sus parm etros son la interface ente el grupo de funciones y el usuario. La principal diferencia ente la verdadera orientacin a objetos y los grupos de funciones es que m ientras que un program puede trabajar a sim ultaneam con varios grupos de funciones, no puede hacerlo con varias instancias de un m o grupo. Si un program quiere procesar varios ente ism a pedidos a la vez tendra queadaptar el grupo de funciones para incluir una adm inistracin de instancias, usando por ejem nm que diferencien plo, eros las instancias. En la prctica, esto es m com uy plicado de realizar. Por esto, los datos son alm acenados en el program y los m a dulos de funciones son llam para trabajar con ellos ados (program acin estructurada). Un problem es por ejem que todos los usuarios de un m a plo dulo de funciones deben usar las m as estructuras de datos as com el propio grupo de funciones. El cam la estructura de interna de datos de un grupo ism o biar de funciones afecta a m uchos usuarios, sin poder predecir las posibles im plicaciones del cam El nico m de evitar esto es m bio. odo ediante las interfaces, con una tcnica que garantice que las estructuras internas de las instancias perm anecern ocultas, perm itiendo cam biarlas m tarde sin as causar ningn problem a Esto se consigue con la orientacin a objetos. ABAP Objects perm definir datos y funciones en clases en lugar de en grupos de funciones. Usando ite clases, un program ABAP puede trabajar con cualquier nm de instancias (objetos) basados en la m a plantilla. En lugar de cargar en la m oria a ero ism em una nica instancia de un grupo de un grupo de funciones im plcitam cuando se llam al m ente a dulo de funciones, el program ABAP ahora puede generar las instancias de la clase explcitam usando la nueva a ente sentencia ABAP CREA OBJECT Cada instancia representa a un nico objeto, y se puede acceder a TE . cada una m ediante su referencia. La referencia del objeto es lo que perm a un program ABAP acceder a la interface de la instancia ite a

EJEMPLOEn el siguiente ejem vem la orientacin a objetos de un sencillo grupo de funciones com es el caso de un contador: plo os o Supongam que tenem el grupo de funciones COUNTER. os os

El grupo de funciones tiene un cam entero llam cont y tres m po ado dulos de funciones, fijar_contador increm , entar_contador y obtener_contador que trabajan con este cam Dos de los m po. dulos de funciones tienen parm input y output. Son los m etro dulos que conform la interface del grupo de an funciones. Cualquier program ABAP puede trabajar con este grupo de funciones, por ejem a plo:

Despus de que esta seccin del program haya sido ejecutada, la variable num tendr el valor 8. El program no puede acceder por s m o al a ero a ism cam cont del grupo de funciones. Las operaciones sobre este cam estn encapsuladas en el m po po dulo de funciones. El program slo puede a com unicarse con el grupo de funciones m ediante la llam a los m ada dulos de funciones.

ClasesLas clases son las plantillas de los objetos. A la inversa, podem decir que el tipo de un objeto es el os m o que el de su clase. Una clase es la descripcin abstracta de un objeto. T bin podem decir que una clase es un conjunto de instrucciones ism am osconverted by Web2PDFConvert.com

que tienen com objetivo construir un objeto. Los atributos de los objetos estn definidos por los com o ponentes de la clase (atributos, m todos y eventos), que son los que describen y controlan el com portam iento de los objetos.

Clases locales y globalesLas clases en ABAP Objects se pueden declarar bien globalm o bien localm ente ente. Las clases globales se definen en el generador de clases (transaccin SE24) en el ABAP W orkbench. Estas clases so alm acenadas en class pools en la librera de clases en el R/3 Repository. T los program odos as ABAP en un sistem R/3 pueden acceder a las clases globales. Las clases locales se definen en un program ABAP a a . Las clases locales y sus interfaces slo pueden ser invocadas desde el program en el que se han definido. a Cuando se usa una clase en un program ABAP el sistem busca prim una clase local con el nom especificado. Si no encuentra ninguna entonces a a ero bre busca una clase global. A parte de la cuestin de la visibilidad, no hay ninguna diferencia entre usar una clase global o una clase local. Lo que si cam bia sensiblem es la m ente anera 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 program norm ente es suficiente con definir a, alm aparentem los com ente ponentes visibles de m anera que la clase se ajuste a nuestro program Por otro lado, las clases globales deben estar preparadas a. para ser usadas en cualquier parte. Esto quiere decir que se tienen que aplicar ciertas restricciones cuando se define la interface de una clase global, ya que la clase debe estar preparada para garantizar que cualquier program que use un objeto de esa clase reconozca el tipo de datos de cada a parm de la interface. etro Verem por un lado com crear clases e interfaces locales en un program ABAP para despus ver os o a , com utilizar el generador de clases para crear clases e interfaces globales. o

DEFINICIN DE CLASES LOCALESLas clases locales son el conjunto de sentencias que estn entre las sentencias CLASS y ENDCLASS. Una definicin com pleta de una clase constar de una parte declarativa en la que se definen los com ponentes, y si es necesario una parte de im entacin en la que se im entan estos com plem plem ponentes. La parte declarativa de una clase est com prendida entre las sentencias:CLASS DEFINITION. ENDCLASS.

La parte declarativa contiene la declaracin de todos los com ponentes de la clase (atributos, m todos y eventos). Cuando se definen clases locales, la parte declarativa pertenece a los datos globales del program por tanto se habr de situar al principio del program a, a. Si se declaran m todos en la parte declarativa de una clase, se deber escribir tam su parte de im entacin. sta es la que va includa entre las bin plem siguientes sentencias:CLASS IMPLEMENTATION. ENDCLASS.

La parte de im entacin contiene la im entacin de todos los m plem plem todos de la clase. Esta parte acta com un bloque, esto quiere decir que o cualquier seccin de cdigo que no form parte del bloque no ser accesible. e

ESTRUCTURA DE UNA CLASELa estructura de una clase se define principalm basndose en: ente Una clase contiene com ponentes. Cada com ponente se asigna a una seccin de visibilidad (pblico, protegido o privado). Las clases im entan m plem todos.

Componentes de las clasesLos com ponentes de una clase confeccionan sus contenidos. T los com odos ponentes son declarados en la parte declarativa de la clase. Los com ponentes definen los atributos de los objetos en una clase. Cuando se define una clase, cada com ponente es asignado a una de las tres distintas secciones de visibilidad que definen la interface externa de la clase. T los com odos ponentes de una clase son visibles dentro de laclase. Adem todos s com parten el m o espacio por lo que sus nom deben ser nicos dentro de la clase. ism bres Hay dos tipos de com ponentes en una clase, aquellos que existen separadam para cada objeto de una clase, y aquellos que existen slo una vez ente para la clase entera, independientem del nm de instancias. Estos com ente ero ponentes son conocidos com dependientes de instancia o o independientes de instancia (o estticos) respectivam ente. En ABAP Obejcts, las clases pueden definir los siguientes com ponentes (debido a que todos los com ponentes que se pueden declarar en las clases tam pueden ser declarados en las interfaces, las siguientes descripciones se aplican de la m a bin ism m anera a las interfaces):

AtributosLos atributos son los cam de datos internos de una clase y pueden tener cualquier tipo de datos ABAP El estado de un objeto viene determ pos . inado por el contenido de sus atributos. Un tipo de atributos son las variables referenciadas. Estas variables perm crear y acceder a los objetos, de iten m anera que si se definen en una clase perm acceder a otros objetos desde dentro de la clase. iten Atributos dependientes de instancia. El contenido de estos atributos es especfico de cada objeto. Se declaran usando la sentencia DA A. T Atributos estticos El contenido de los atributos estticos define el estado de la clase y es vlido para todas las instancias la clase. Los atributos estticos existen slo una vez para la clase. Se declaran usando la sentencia CLASS-DA A. Son accesibles desde todo el entorno de ejecucin de la T clase. T los objetos de una clase pueden acceder a sus atributos estticos. Si se cam un odos bia atributo esttico en un objeto, el cam es visible en todos los dem objetos de la clase. bio s

MtodosLos m todos son procedim ientos internos de una clase que definen el com portam iento de un objeto. Los m todos pueden acceder a todos los atributos de una clase. Esto les perm cam el contenido de los atributos de un objeto. Los m ite biar todos poseen tam una interface con parm bin etros que les perm recibir valores cuando son invocados y devolver valores despus de la llam Los atributos privados de una clase slo pueden ser ite ada. cam biados por m todos de la m a clase. ism La definicin y la interface de un m todo son sim ilares a las de los m dulos de funciones. Un m todo se define en la parte declarativa de la clase y se im enta en la parte de im entacin usando las sentencias: plem plemMETHOD . converted by Web2PDFConvert.com

ENDMETHOD.

Se pueden declarar tipos de datos locales y objetos en los m todos de la m a m ism anera que en cualquier otro procedim iento ABAP (subrutinas y m dulos de funciones). Los m todos se pueden llam m ar ediante la sentencia CALL METHOD. Mtodos 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. Mtodos estticos o independientes de instancia Estos m todos se declaran usando la sentencia CLASS-METHODS. Slo pueden acceder a los atributos estticos y desencadenar eventos estticos. Mtodos especiales Adem de los m s todos norm que se pueden llam con la sentencia CALL METHOD, hay dos m ales ar todos especiales llam ados CONSTRUCTOR y CLASS_CONSTRUCTOR que son autom ticam llam cuando se crea un objeto (CONSTRUCTOR) o cuando se accede por ente ados prim vez a los com era ponentes de la clase (CLASS_CONSTRUCTOR).

EventosLos objetos o las clases pueden usar eventos para desencadenar un tipo de m todos en otros objetos o clases. Estos m todos se llam m an todos que m anejan eventos (event handler m ethods) En una llam norm a un m ada al todo, el m todo puede ser llam por cualquier nm de usuarios. Cuando ado ero un evento es desencadenado, cualquier nm de estos m ero todos puede ser llam La unin ente el disparador del evento (trigger) y el m ado. anejador del evento (handler) no es establecida de antem si no en el entorno de ejecucin. En las llam norm a m ano, adas ales todos, el program que llam a a determ los m ina todos a los que quiere llam Estos m ar. todos tienen que existir. El m anejador de eventos determ los eventos a los cuales tiene que ina reaccionar. No tiene porque existir un m todo m anejador de eventos registrado para cada evento. Los eventos de una clase pueden ser desencadenados en los m todos de la m a clase usando lasentencia RAISE EVENT. Un m ism todo de la m a o de diferente clase, se declara com ism o m todo m anejador de eventos utilizando la adicin FOR EVENT OF . Los eventos tienen una interface de parm etros sim a la de los ilar m todos, pero slo tienen parm etros de salida. Los parm etros son pasados por el disparador (sentencia RAISE EVENT) al m todo m anejador de eventos el cual los recibe com parm o etros de entrada. El vnculo de unin entre el disparador y el m anejador (trigger y handler) es establecido dinm ente en el program usando la sentencia SET icam a HANDLER. El disparador y el m anejador pueden ser objetos o clases, dependiendo de si tenem eventos dependientes de instancia o eventos os estticos y m todos m anejadores de eventos. Cuando un evento es disparado, el correspondiente m todo m anejador de eventos es ejecutado en todas las clases registradas para ese m anejador. Existen dos tipos de eventos: Eventos dependientes de instancia Se declaran con la sentencia EVENTS. Slo pueden ser desencadenados en un m todo dependiente de instancia. Eventos estticos o independientes de instancia Se declaran con la sentencia CLASS-EVENTS. T los m odos todos (dependientes de instancia y estticos) pueden desencadenar eventos estticos. Los eventos estticos son el nico tipo de eventos que puede ser desencadenado por un m todo esttico.

TiposSe pueden definir tipos de datos ABAP dentro de una clase con la sentencia TYPES. Los tipos de datos no son especficos de cada instancia y existen una sla vez para todos los objetos de la clase.

ConstantesLas constantes son un tipo especial de atributos estticos. Su valor se fija cuando son declaradas y no puede ser cam biado. Se declaran usando la sentencia CONSTANTS. Las constantes existen slo una vez para todos los objetos de la clase.

Estas tres reas definen la visibilidad externa de los com ponentes de la clase, esto es, la interface entre la clase y el usuario. Cada com ponente de una clase ha de ser asignado a una de estas tres secciones: Public section T los com odos ponentes declarados en la seccin pblica 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 com ponentes pblicos conform la interface entre la clase y el usuario. an Protected section T los com odos ponentes declarados en la seccin protegida son accesibles para todos los m todos de la clase y de las clases que heredan de ella. Los com ponentes protegidos conform la interface entre una clase y todas sus subclases. Debido a que la herencia an no est activa an en el release 4.5B la seccin protegida tiene actualm el m o efecto que la seccin privada. ente ism Private section Los com ponentes declarados en la seccin privada son slo visibles en los m todos de la m a clase. Los com ism ponentes privados no form parte de la interface externa de la clase. an

EncapsulacinLas tres reas de visibilidad son la base de una de las m im s portantes caractersticas de la orientacin a objetos, la encapsulacin. Cuando se define una clase hay que tener m ucho cuidado en el diseo de los com ponentes pblicos, intentando declarar tan pocos com sea posible. Los com o ponentes pblicos de las clases globales no pueden ser cam biados una vez que se ha liberado la clase. Por ejem los atributos pblicos son visibles externam plo, ente, y form parte de la interface entre un objeto y sus usuarios. Si se quiere encapsular el an estado de un objeto com pletam no se tiene que declarar ningn atributo pblico. Adem de definir la visibilidad de un atributo, se puede ente s proteger tam de los cam usando la adicin READ-ONLY. bin bios

Visin de Conjunto

converted by Web2PDFConvert.com

Esta sera la estructura de la parte de declaracin y la parte de im entacin de una clase local c1. plem Com ponentes pblicos Interface entre la clase y sus usuarios Com ponentes protegidos Interface con las subclases de la clase c1 Com ponentes privados No visibles externam ente, com pletam encapsulados en la clase ente Im entacin de los m plem todos Tienen acceso com pleto a todos los com ponentes de la clase

EJEMPLO DE UNA CLASE LOCALDe la m a m ism anera que vim el ejem del contador para el grupo de funciones se puede realizar lo os plo m o con una clase: ism

La clase c_contador contiene tres m todos pblicos, fijar_contador increm , entar_contador yobtener_contador. Cada uno de ellos trabaja con el atributo privado cont. Dos de estos m todos tienen parm etros de entrada y de salida. Estos son los que form la interface de la clase. El atributo an cont no es visible directam ente. Ms adelante se ver com crear instancias de una clase para poder as utilizar la clase en el program o a.

UTILIZACIN DE OBJETOSObjetosLos objetos son instancias de las clases. Cada objeto tiene una identidad propia y tiene sus propios atributos. T los objetos transitorios residen en odos el contexto de una sesin interna (rea de m oria de un program ABAP). Los objetos perm em a anentes en la base de datos an no estn disponibles (docum entacin del release 4.6B). Una clase puede tener un nm indefinido de objetos (instancias). ero

Referencias a objetoLas referencias a objeto se usan para acceder a un objeto desde un program ABAP Las referencias a objeto son punteros a los objetos. En ABAP los a . objetos estn siem contenidos en variables referenciadas. pre Las variables referenciadas o bien contienen el valor initial o bien contienen la referencia a un objeto ya existente. La identidad de un objeto depende de su referencia. Una variable referenciada que apunta a un objeto es la que conoce la identidad del objeto. Los usuarios no pueden acceder a la identidad del objeto directam ente. Las variables referenciadas en ABAP son tratadas com cualquier otro objeto de datos elem o ental. Esto quiere decir que una variable referenciada puede contener una tabla interna o una estructura. ABAP contiene un tipo de datos predefinido para las referencias, com parable a los tipos de datos para las estructuras o para las tablas internas. El tipo de datos com pleto no est definido hasta la declaracin en el program ABAP El tipo de datos de la variable referenciada determ com el program a . ina o a acta con su valor o sea, con la referencia al objeto. Hay dos tipos principales de referencias, la referencia a clases y la referencia a interfaces (se , ver m adelante). as

converted by Web2PDFConvert.com

Las referencias a clases se definen usando la siguiente adicin: TYPE REF TO . Esta adicin se usa en las sentencias TYPES o DATA. Una variable referenciada de este tipo se llam variable referenciada a clase o referencia a clase a sim ente. plem Una referencia a clase perm al usuario crear una instancia, o sea un objeto, de la clase y acceder a un com ite ponente visible de la siguiente m anera:cref->comp

Cmo crear objetos?Antes de crear un objeto de una clase es necesario declarar una variable referenciada con la referencia a la clase. Una vez que se ha declarado la referencia a la clase , se puede crear el objeto usando la sentencia CREATE OBJECT . Esta sentencia crea una instancia de la clase , y la variable referenciada contiene la referencia al objeto. Acceder a los com ponentes de un objeto Los program slo pueden acceder a los com as ponentes de las instancias usando las referencias de las variables referenciadas. La sintaxis es la siguiente, siendo ref la variable referenciada: Para acceder al atributo attr: ref->attr. Para llam al m ar todo m CALL METHOD ref->meth. Para los com eth: ponentes estticos (independientes de instancia, slo dependientes de clase) se puede usar tanto el nom de la clase com la variable referenciada. T bin es posible acceder a los bre o am com ponentes estticos de una clase antes de que un objeto de la clase haya sido creado. La sintaxis, siendo class la clase es la siguiente: Para acceder al atributo esttico attr: class->attr. Para llam al m ar todo esttico m CALL METHOD class->meth. eth: Dentro de una clase se puede acceder tam a los com bin ponentes individuales m ediante la referencia a s m o ME: ism Para acceder al atributo attr en la propia clase: me->attr. Para llam al m ar todo m en la propia clase: CALL METHOD me->meth. eth

CREAR MAS DE UNA INSTANCIA DE UNA CLASEEn un program se pueden crear cualquier nm de objetos de una m a clase. Estos objetos son com a ero ism pletam independientes unos de otros. ente Cada uno tiene su propia identidad dentro del program y sus propios atributos. Cada sentencia CREATE OBJECT genera un nuevo objeto, cuya a identidad est com pletam definida por su referencia al objeto. ente

Asignar referenciasSe pueden asignar referencias a distintas variables referenciadas usando la sentencia MOVE. De esta m anera se puede tener las referencias en varias variables referenciadas apuntando al m o objeto. ism Cuando se asigna una referencia a una variable referenciada distinta, sus tipos deben ser com patibles. Cuando se usa la sentencia MOVE o el operador de asignacin = para asignar variables referenciadas, el sistem debe ser capaz de reconocer en el a chequeo de la sintaxis si la asignacin va a ser posible. Esto m o se aplica cuando se pasan variables referenciadas com parm ism o etros a procedim ientos. Si escribim la sentencia cref1 = cref2, las dos referencias tienen que tener el m o tipo, esto es, tienen que referirse a la m a clase, o bien la clase os ism ism de cref1 tiene que ser la clase predefinida com vaca, OBJECT. o La clase OBJECT no tiene com ponentes y tiene la m a funcin para las variables referenciadas que el tipo de datos ANY para las variables norm ism ales. Las variables referenciadas con el tipo OBJECT pueden funcionar com contenedoras para pasar referencias. De cualquier m o anera, nunca pueden ser usadas para acceder a objetos.

Tiempo de vida de un objetoUn objeto existe m ientras se est usando en el program lo que quiere decir que existe siem que al m una referencia apunte hacia l, o al a, pre enos m un m enos todo del objeto est registrado com m o todo m anejador de eventos. Desde el m ento en que deja de haber referencias a un objeto y ninguno de sus m om todo es un m todo m anejador de eventos, el objeto es borrado de la m oria autom em ticam ente. El ID del objeto queda libre para ser usado por un nuevo objeto.

OBJETOS COMO INSTANCIAS DE UNA CLASE

Comp. pblicos Comp. protegidos

Clase C1 Comp. privados Implementacin de Mtodos

SESIN INTERNA DE UN PROGRAMA ABAP

Instancia 1, Clase C1 Comp. privados Comp. pblicos Implementacin de Mtodos Comp. protegidos Instancia 2, Clase C1 Comp. privados Comp. pblicos Implementacin de Mtodos Comp. protegidos Instancia 3, Clase C1 Comp. privados Comp. pblicos Implementacin de Mtodos Comp. protegidos

converted by Web2PDFConvert.com

Las ilustraciones de arriba m uestran una clase y sus instancias dentro de una sesin interna de un program ABAP a .

EJEMPLO: CMO CREAR Y USAR UNA CLASE.En este ejem verem cm crear y usar una instancia de la clase c_counter que cream en la seccin anterior. plo os o osDATAcref1 TYPE REF TO c_contador . Cream una variable cref1 que es referenciada a la clase c_contador. Esta variable puede contener referencias a todas las instancias de la clase os c_contador. La clase c_contador debe ser conocida para el program en el m ento en que la sentencia data tiene lugar. Por tanto la clase c_contador a om

debe estar o bien declarada localm antes de la sentencia data o bien globalm con el constructor de clases. ente ente Despus de esta sentencia el contenido de cref1 es initial, o sea la referencia no apunta a ninguna instancia. DATAcref1 TYPE REF TO c_contador . CREATE OBJECT cref1. La sentencia CREATE OBJECT crea un objeto (instancia) de la clase c_contador. La referencia en la variable referenciada cref1 apunta a este objeto. La instancia de la clase c_contador se llam c_contador debido a que as es com se visualizan los contenidos de la variable de objeto en el debugger a o despus de que la sentencia CREATE OBJECT haya sido ejecutada. Este nom es slo usado internam por el program y no aparece nunca en el bre ente a propio program ABAP a .DATAcref1 TYPE REF TO c_contador. DATAnumero TYPE i VALUE 5. CREATE OBJECT cref1. CALL METHOD cref1->fijar_contador EXPORTING fijar_valor = numero. DO 3 TIMES. CALL METHOD cref1->incrementar_contador. ENDDO. CALL METHOD cref1->obtener_contador IMPORTING obtener_valor = numero.

EL program ABAP puede acceder a los com a ponentes pblicos de los objetos usando la variable referenciada cref1, lo cual en este caso se corresponde a llam a los m ar todos pblicos de la clase c_contador. Despus que el program haya sido ejecutado la variable num y el atributo privado del objeto a ero cont tienen am el valor 8. bos Podem tam m os bin anejar varias instancias de la m a clase. ismDATAcref1 TYPE REF TO c_contador. DATAcref2 TYPE REF TO c_contador. DATAcref3 LIKE cref1.

As cream tres variables referenciadas a la clase c_contador. T ellas contienen el valor initial. os odasDATAcref1 TYPE REF TO c_contador. DATAcref2 TYPE REF TO c_contador. DATAcref3 LIKE cref1. CREATE OBJECT cref1, cref2, cref3.

El sistem crea tres objetos de la clase a partir de las tres variables referenciadas a la clase. Las referencias en las tres variables apuntan a cada uno de a los objetos. Internam las instancias se llam c_contador , c_contador , y c_contador . El nm se asigna en el orden en que son ente an ero creadas.

El program ABAP usa las variables referenciadas para acceder a los objetos, en este caso a los m a todos publicos de la clase c_contador. Cada objeto tiene su propia identidad y su propio estado, ya que el atributo privado dependiende de instancia cont tiene distintos valores en cada objeto. El program adm a inistra varios contadores.DATAcref1 TYPE REF TO c_contador. DATAcref2 TYPE REF TO c_contador. DATAcref3 LIKE cref1. CREATE OBJECT cref1, cref2.

Ahora declaram tres variables referenciadas para la clase c_contador y se crean dos objetos para la clase. Las referencias en las variables os referenciadas cref1 y cref2 apuntan a cada uno de los objetos. La referencia cref3 se m antiene initial.DATAcref1 TYPE REF TO c_contador. DATAcref2 TYPE REF TO c_contador. DATAcref3 LIKE cref1. CREATE OBJECT cref1, cref2. MOVE cref2 TO cref3. Despus de la sentencia MOVE, cref3 contiene la m a referencia que cref2 y am referencias apuntan al objeto c_contador. Un usuario puede ism bas

usar cualquiera de ellas para acceder al objeto.DATAcref1 TYPE REF TO c_contador.converted by Web2PDFConvert.com

DATAcref2 TYPE REF TO c_contador. DATAcref3 LIKE cref1. CREATE OBJECT cref1, cref2. MOVE cref2 TO cref3. CLEAR cref2. La sentencia CLEAR reinicializa la referencia de cref2 al valor initial. En este m ento la variable referenciada cref2 contiene el m o valor que om ism

inm ediatam despus de su declaracin y ya no ente apunta a ningn objeto.DATAcref1 TYPE REF TO c_contador. DATAcref2 TYPE REF TO c_contador. DATAcref3 LIKE cref1. CREATE OBJECT cref1, cref2. MOVE cref2 TO cref3. CLEAR cref2. cref3 = cref1. La referencia en cref3 ahora apunta al objeto c_contador. Y no hay referencias apuntando al objeto c_contador el cual es autom a ticam ente borrado, con lo cual el nom interno c_contador est libre de nuevo. bre

DECLARACIN Y LLAMADA DE MTODOSEn esta seccin se ensear com declarar im entar y llam m o , plem ar todos en el lenguaje ABAP .

Declaracin de mtodosLos m todos se pueden declarar bien en la parte declarativa de una clase o bien en una interface. Para declarar m todos dependientes de instancia se usa la siguiente sentencia:METHODS IMPORTING.. [VALUE(][)] TYPE type [OPTIONAL].. EXPORTING.. [VALUE(][)] TYPE type [OPTIONAL].. CHANGING.. [VALUE(][)] TYPE type [OPTIONAL].. RETURNING VALUE() EXCEPTIONS.. ..

Para declarar m todos estticos se usa se usa la siguiente sentencia:CLASS-METHODS ..

Am sentencias tienen la m a sintaxis. bas ism Cuando se declara un m todo se puede definir su interface de parm etros usando las adiciones IMPORTING, EXPORTING, CHANGING, y RETURNING. Estas adiciones definen los parm etros de entrada, de salida, de entrada/salida y el cdigo que devuelve el m todo. T bin definen si los parm am etros se pasan por referencia o por valor (VALUE), su tipo (TYPE), o si es opcional o por defecto (OPTIONAL, DEFAULT). Al contrario que en los m dulos de funciones, el m por defecto de pasar parm odo etros a un m todo es por referencia. Para pasar un parm por valor es necesario especificar explcitam la adicin VALUE. El valor de retorno (RETURNING)debe pasarse siem etro ente pre explcitam com por valor (RETURNING VALUE). Es apropiado para m ente o todos que devuelven un solo valor. Si se usa esta adicin no se pueden usar los parm etros EXPORTING o CHANGING. Al igual que en los m dulos de funciones, se pueden usar las excepciones (EXCEPTIONS) para perm al usuario reaccionar ante las situaciones de itir error cuando el m todo se est ejecutando.

Implementacin de mtodosLos m todos se im entan en la parte de im entacin de la clase con las sentencias: plem plemMETHOD . ... ENDMETHOD.

Al im entar un m plem todo no hay que especificar los parm etros de la interface del m todo, ya que estn definidos en la declaracin del m todo. La interface de parm etros de un m todo se com porta dentro de la im entacin del m plem todo com variables locales. Se pueden definir variables locales o adicionales dentro del m todo usando la sentencia DATA. Al igual que en los m dulos de funciones, se puede usar las sentencias RAISE y MESSAGE RAISING para controlar los errores. Cuando se im enta un m plem todo esttico hay que tener en cuenta que slo puede trabajar con los atributos estticos de la clase. Los m todos dependientes de instancia pueden trabajar tanto con atributos estticos com con atributos dependientes de instancia. o

Llamada a mtodosPara llam a un m ar todo se usa la siguiente sentencia:CALL METHOD EXPORTING... =.... IMPORTING... =.... CHANGING ... =.... RECEIVING r = h EXCEPTIONS... = rc i...

La m anera en que se llam al m a todo depende del m todo del que se trate y de desde donde se llam En la parte de im entacin de una clase se e. plem pueden llam directam m ar ente todos de la m a clase sim ente usando su nom ism plem be. CALL METHOD ... Desde fuera de la clase, podrem llam slo a los m os ar todos cuya visibilidad nos perm hacerlo. Los m ite todos visibles dependientes de instancia pueden ser llam desde fuera de la clase usando la sentencia: ados CALL METHOD ->... donde es una variable referenciada cuyo valor apunta a una instancia de la clase. Los m todos visibles estticos pueden ser llam desde fuera de la clase con la sentencia: ados CALL METHOD =>... donde class es el nom de la clase. bre Cuando se llam a un m a todo se deben pasar todos los parm etros de entrada no opcionales en las adiciones EXPORTING o CHANGING en la sentencia CALL METHOD. En cam con los parm bio etros de salida es optativo pasarselos al m todo usando las adiciones IMPORTING o RECEIVING. De la m a ism m anera no es obligatorio controlar las excepciones desencadenadas con la adicin EXCEPTIONS, an as se recom ienda controlar los errores. La m anera de pasar y recibir valores con los m todos es la m a que con las funciones. ism .. = despus de la correspondiente adicin. Los parm etros de la interface (form van siem a la izquierda del signo igual. El signo igual sirve para asignar las variables del program a los ales) pre a parm etros de la interface del m todo. Si la interface de un m todo tiene slo un parm IMPORTING, se puede usar la siguiente llam abreviada: etro adaCALL METHOD ( f).

El parm real es pasado al parm de entrada del m etro etro todo. Si la interface de un m todo tiene slo parm etros IMPORTING, se puede usar la siguiente llam abreviada: ada CALL METHOD (.... =....). Cada parm etro real es pasado al correspondiente parm de entrada del m etro todo.converted by Web2PDFConvert.com

Mtodos manejadores de eventosLos m todos m anejadores de eventos son una clase especial de m todos que no pueden ser llam ados usando la sentencia CALL METHOD. En su lugar estos m todos son desencadenados m ediante eventos. Un m todo se define com m o anejador de eventos m ediante la adicin: ... FOR EVENT OF ... en la sentencia METHODS o CLASS-METHODS. Las interfaces de los m todos m anejadores de eventos tienen que cum una serie de reglas: plir La interface slo puede tener param etros de entrada (IMPORTING). Cada parm de entrada al m etro todo (IMPORTING) debe tener su correspondiente parm de etro salida (EXPORTING) en el evento. Los atributos de los parm etros estn definidos en la declaracin del evento (sentencia EVENTS) y son tom por el m ados todo m anejador de eventos.

ConstructoresLos constructores son un tipo especial de m todos que no pueden ser llam con la sentencia CALL METHOD. Estos m ados todos son llam ados autom ticam por el sistem para fijar el estado inicial de un nuevo objeto o clase. Hay dos tipos de constructores, los dependientes de instancia y ente a los estticos o independientes de instancia. Los constructores son m todos con un nom predifinido. Para usarlos deben ser declarados bre explcitam en la clase. ente El constructor dependiente de instancia de una clase es un m todo que se llam CONSTRUCTOR. Se declara en la seccin pblica de la siguiente a m anera:METHODS CONSTRUCTOR IMPORTING.. [VALUE(][)] TYPE type [OPTIONAL].. EXCEPTIONS.. .

Se im enta en la parte de im entacin de la m a m plem plem ism anera que cualquier otro m todo. El sistem llam al constructor dependiente de instancia a a una vez para cada instancia de la clase, justo despus de que el objeto haya sido creado m ediante la sentencia CREATE OBJECT. Se le pueden pasar parm etros de entrada y controlar sus errores usando las adiciones EXPORTING y EXCEPTIONS en la sentencia CREATE OBJECT. El constructor esttico de una clase es el m todo esttico predefinido CLASS_CONSTRUCTOR. Se declara en la seccin pblica de la siguiente m anera: CLASS-METHODS CLASS_CONSTRUCTOR. Se im enta com cualquier otro m plem o todo. El constructor esttico no tiene parm etros. El sistem llam al constructor esttico una vez para cada a a clase, justo antes de la clase se utiliza por prim vez. Debido a esto el constructor esttico no puede acceder a los com era ponentes de la propia clase.

EJEMPLO DEL USO DE MTODOSEl siguiente ejem m plo uestra com declarar im entar y usar m o , plem todos en ABAP Objects.

IntroduccinEste ejem usa tres clases llam c_team, c_biker y c_bicycle. Un usario (un program puede crear objetos de la clase c_team. En la pantalla de plo adas a) seleccin la clase c_teampide el nm de m bros de cada equipo. ero iem Cada objeto en la clase c_team puede crear tantas instancias de la clase c_biker com m bros haya en el equipo. Cada instancia de la clase c_biker o iem crea ua instancia de la clase c_bicycle. Cada instancia de la clase c_team puede com unicarse con el program a travs de una lista interactiva. a El program puede elegir m bros de los equipos para trabajar con ellos. Las instancias de la clase c_biker perm al program elegir la accin a a iem iten a realizar en una pantalla posterior.

RestriccionesHay sentencias ABAP usadas en el proceso de listas que an no estn com pletam disponibles en ente ABAP Objects. Para producir un output de test se pueden usar las siguientes sentencias: WRITE [AT] /() ULINE SKIP NEW-LINE

DeclaracinEste ejem usa clases locales debido a que las pantallas de seleccin pertenecen a un program ABAP y no pueden ser definidas o llam en clases plo a adas globales. Se definen dos pantallas de seleccin y tres clases.

converted by Web2PDFConvert.com

Ninguna de las clases tiene atributos pblicos. El estado de las clases slo puede ser cam biado por sus m todos. La clase c_team tiene un constructor esttico. Las clases c_team y c_biker tienen constructores dependientes de instancia.

ImplementacinLa parte de im entacin de las clases contiene la im entacin de los m plem plem todos declarados en la parte de declaracin. Las interfaces de los m todos ya han sido definidas en la declaracin. En la im entacin los parm plem etros de las interfaces se com portan com variables locales. o Los siguientes m todos estn im entados en el bloque: plem

converted by Web2PDFConvert.com

El constructor esttico es ejecutado antes de que la clase c_team se use por prim vez en el program era a. El constructor esttico llam a la dynpro 100 y fija el atributo esttico team em al valor m a _m bers etido por el usuario en el program Este atributo tiene a. el m o valor para todas las instancias de la clase c_team. ism El constructor dependiente de instancia es ejecutado justo despus de que cada instancia de la clase c_teames creada. Para contar el nm de ero instancias creadas de c_team se usa el atributo esttico counter. El atributo dependiente de instancia ID guarda el nm de la instancia de la clase. ero El m todo pblico dependiente de instancia create_team puede ser llam por cualquier usuario de la clase con una variable referenciada a una ado instancia de la clase. Este m todo se usa para crear instancias de la clase c_biker usando la variable referenciada privada biker en la clase c_team. Seconverted by Web2PDFConvert.com

tienen que pasar los dos parm etros de entrada team y m bers al constructor dependiente de instancia de la clase c_biker en la sentencia _id em CREATE OBJECT. Las referencias a las instancias recin creadas son insertadas en la tabla interna privada biker_tab. Despus de que el m todo haya sido ejecutado cada lnea de la tabla interna contiene una referencia a una instancia de la clase c_biker. Estas referencias son slo visibles dentro de la clase c_team. Los usuarios externos no pueden acceder a los objetos de la clase c_biker. El m todo create_teamtam llam al m bin a todo status_line de cada nuevo objeto creado y usa el rea de trabajo status_line para rellenar la tabla interna privada status_list con el parm de salida line. etro El m todo pblico dependiente de instancia selection puede ser llam por cualquier usuario de la clase que tenga una variable referenciada con una ado referencia a ua instancia de la clase. El m todo selecciona todas las lineas en la lista actual en las cuales el checkbox en la prim colum est era na seleccionado. Para esas lineas se copian las correspondientes variables referenciadas desde la tabla biker_tab en una tabla interna privada adicional llam biker_selection. Selection llam entonces al m ada a todo privado write_list el cual despliega la lista. El m todo pblico dependiente de instancia execution puede ser llam por cualquiera de los usuarios de la clase que tenga una variable referenciada ado con una referencia a una instancia de la clase. El m todo llam a los dos m a todos select_action y status_line para cada instancia de la clase c_biker para la cual hay una referencia en la tabla biker_selection. La linea de la tabla status_list con la m a clave que el com ism ponente id en el rea de trabajo status_line es sobreescrita y desplegada por el m todo privado write_list. El m todo privado dependiente de instancia write_list slo puede ser llam desde los m ado todos de la clase c_team Este m . todo se usa para desplegar la tabla interna privada status_list en la lista bsica (sy-lsind = 0, tratam iento listas, indice lista bifurcacin) del program a. Los m todos de la clase c_biker van en otro bloque:

converted by Web2PDFConvert.com

El constructor dependiente de instancia es ejecutado justo despus de que se cree cada instancia de la clase c_biker. Se usa para contar el nm ero de instancias de la clase c_biker en el contador counter y para asignar el correspondiente nm al atributo dependiente de instancia id de cada ero instancia de la clase. El constructor tiene dos parm etros de entrada, team y m bers los cuales tienen que pasarse en la sentencia create object _id em cuando se crea una instancia de la clase c_biker. La referencia en la variable referenciada privada bike de cada instancia c_biker apunta a la correspondiente instancia de la clase c_bicycle. El m todo pblico dependiente de instancia select_action puede ser llam por cualquier usuario de la clase que tenga una variable referenciada con ado una referencia que apunte a una instancia de la clase. El m todo llam a la pantalla de seleccin 200 y analiza la entrada del usuario. Despus de esto llam al m a a todo privado de la m a clase biker_action. ism

converted by Web2PDFConvert.com

La llam al m ada todo usa la form abreviada para pasar el parm real activity al parm form action. a etro etro al El m todo privado dependiente de instancia biker_action slo puede ser llam desde los m ado todos de la clase c_biker. El m todo llam a otros m a todos en la instancia de la clase c_bicycle a la cual la referencia en la variable referenciada bike est apuntando, dependiendo del valor en el parm de etro entrada action. El m todo pblico dependiente de instancia status_line puede ser llam por cualquier usuario de la clase que tenga una variable ado referenciada con una referencia a una instancia de la clase. El m todo rellena la estructura de salida line con los actuales valores de los atributos de la correspondiente instancia. Los m todos de la clase c_bicycle van en otro bloque:

El m todo pblico dependiente de instancia drive puede ser llam por cualquier usuario que tenga una variable referenciada con una referencia a ado una instancia de la clase. El m todo cam el valor del atributo privado speed y lo devuelve en el parm de salida velocity. bia etro El m todo pblico dependiente de instancia stop puede ser llam por cualquier usuario que tenga una variable referenciada con una referencia a ado una instancia de la clase. El m todo cam el valor del atributo privado speed y lo devuelve en el parm de salida velocity. bia etro El m todo pblico dependiente de instancia change_gear puede ser llam por cualquier usuario que tenga una variable referenciada con una ado referencia a una instancia de la clase. El m todo cam el valor del atributo privado gear. Debido a que el parm form con el m o nom bia etro al ism bre oculta el atributo en el m todo, el atributo tiene que ser direccionado con la referencia a s m o m ism e->gear.

Utilizacin en programasAhora verem cm se pueden usar en un program las clases que ham declarado e im entado. os o a os plem Las declaraciones de las pantallas de seleccin, de las clases locales y la im entacin de los m plem todos deben ser tam parte del program bin a.

converted by Web2PDFConvert.com

El program tiene tres variables referenciadas a la clase c_team Se crean tres objetos de la clase a los cuales apuntan las tres variables referenciadas. a . En cada objeto se llam al m a todo create_team El m . todo class_constructor de la clase c_teames ejecutado antes de que el prim de los objetos ero sea creado. El estatus team para la lista bsica perm al usuario elegir una de las cuatro list ite funciones. Cuando el usuario escoge una de las funciones, el evento A USER-COMMAND es disparado y los m T todos pblicos son llam en una de las ados tres instancias de c_team dependiendo de la eleccin del usuario. El usuario puede cam el estado de un objeto seleccionando la correspondiente , biar linea en la lista.

HerenciaLa herencia perm crear una nueva clase a partir de una nueva existente heredando la nueva clase sus propiedades. Esto se realiza aadiendo la ite adicin INHERITING FROM a la sentencia de definicin de la clase: CLASS DEFINITION INHERITING FROM . La nueva clase hereda todos los com ponentes de la clase ya existente . La nueva clase se conoce com la subclase de la clase de la que procede. La clase original se conoce com la superclase de la nueva clase. Si no se o o aade ninguna declaracin a la subclase, esta contiene los m os com ism ponentes que la superclase. De cualquier m anera, slo los com ponentes pblicos y privados de la superclase son visibles en la subclase. Aunque los com ponentes privados de la superclase existen en la subclase, no son visibles. Se pueden declarar com ponentes privados en una subclase que tengan los m os nom que com ism bres ponentes privados de la superclase. Cada clase trabaja con sus propios com ponentes privados. Los m todos que una subclase hereda de una superclase usan los atributos privados de la superclase y no ningn com ponente privado de la subclase con el m o nom ism bre.converted by Web2PDFConvert.com

Si la superclase no tiene una seccin privada, la subclase es una rplica exacta de la superclase. De todos m podem aadir nuevos com odos os ponentes a la subclase. Esto perm convertir a la subclase en una versin especializada de la superclase. Si una subclase es ella m a una superclase de otras ite ism clases, se est introduciendo un nuevo nivel de especializacin. Una clase puede tener m de una subclase de las cuales es superclase, pero slo puede tener una superclase de la cual es subclase. Esto se conoce s com herencia sim en contraposicin con la herencia m o ple, ltiple donde una clase hereda de varias superclases. Cuando una subclase hereda de una superclase que a su vez hereda de otra superclase de la cual es subclase, se form una estructura de rbol en la cual el grado de especializacin a aum con cada nivel jerrquico que se aada. A la inversa, las clases se hacen m generales hasta que se alcanza el nodo raiz del rbol de herencia. enta s El nodo raiz de todos los rboles de herencia en ABAP Objects es la clase predefinida vaca OBJECT Esta es la m general de todas las clases posibles ya . s que no contiene ni atributos ni m todos. Cuando se define una nueva clase no se tiene que especificar explcitam esta clase com superclase, ente o esta relacin est definida im plcitam ente. Dentro de un rbol de herencia, dos nodos adyacentes son la superclase y la subclase directam uno de otro. Las declaraciones de com ente ponentes en una subclase estn distribuidas a travs de todos los niveles superiores en el rbol de herencia. T las subclases contienen los com odas ponentes de todas las clases existentes entre ellas m as y el nodo raiz del rbol de herencia. La visibilidad de un ism com ponente no puede ser cam biada nunca. En cam se puede usar la adicin REDEFINITION en la sentencia METHODS para redefinir un m bio todo pblico o protegido dependiente de instancia en una subclase y hacer que realice una funcin m especializada. s Cuando se redefine un m todo no se puede cam su interface, el m biar todo m antiene el m o nom y la m a interface de parm ism bre ism etros, pero tiene una nueva im entacin. La declaracin y la im entacin de un m plem plem todo en una superclase no se ve afectada cuando se redefine un m todo en una subclase. La im entacin de la redefinicin en la subclase oculta la m entacin original en la superclase. plem plem Cualquier referencia que apunte a un objeto de la subclase usa el m todo redefinido, incluso si la referencia fue definida con referencia a la superclase. Esto se aplica particularm a la referencia a s m o m Si por ejem un m ente ism e->. plo todo M1 de una superclase contiene una llam CALL ada METHOD [ME->]M2 y M2 est redefinido en una subclase, la llam a M1 desde una instancia de la superclase har que el m ada todo original M2 sea llam m ado, ientras que la llam a M1 desde una instancia de la subclase har que el m ada todo redefinido M2 sea llam (llam a distintos m ado an todos auquen tengan el m o nom ism bre). Dentro de un m todo redefinido se puede usar la referencia SUPER-> para acceder al m todo oculto. Esto perm ite usar la funcionalidad existente en el m todo de la superclase sin tener que codificarla de nuevo en la subclase.

Clases y mtodos abstractos y finalesLas adiciones ABSTRACT y FINAL en las sentencias METHODS y CLASS perm definir m iten todos o clases abstractos y finales. Un m todo abstracto se define en una clase abstracta y no puede ser im entado en esa clase, tiene que plem ser im entado en una subclase de la clase. Las clases abstractas no pueden ser instanciadas. plem Un m todo final no puede ser redefinido en una subclase. Las clases finales no pueden tener subclases, son las que finalizan el rbol de herencia

Referencias a subclases y polimorfismoLas variables referenciadas con referencia a una superclase o a una interface tam pueden contener referencias a algunas de sus subclases. Debido bin a que las subclases contienen todos los com ponentes de todas sus superclases y dado que las interfaces de los m todos no pueden ser cam biadas, una variable referenciada definida con referencia a una superclase o a una interface im entada por una superclase, puede contener referencias a plem instancias de cualquiera de las subclases. En particular se pueden definir variables con referencia a la clase genrica OBJECT para as poder alm , acenar cualquier referencia a objetos en ellas. Cuando se crea un objeto con la sentencia CREA OBJECT y una variable referenciada con referencia a una subclase, se puede usar la adicin TYPE TE para crear una instancia de la subclase a la cual apuntar la referencia en la variable referenciada Un usuario esttico puede usar una variable referenciada para acceder a los com ponentes visibles de la superclase a la cual la variable referenciada apunta. Si se redefine un m todo dependiente de instancia en una o m subclases, se puede usar una nica variable referenciada para llam a las diferentes s ar im entaciones de los m plem todos, dependiendo de la posicin en el rbol de herencia del objeto referenciado. Este concepto de que diferentes clases pueden tener la m a interface y por lo tanto se puede acceder a ellas usando variables referenciadas con un nico tipo se llam polim ism a orfism o.

Nombres de los componentesLas subclases contienen todos los com ponentes de todas sus superclases dentro del rbol de herencia. De esos com ponentes, slo los com ponentes pblicos y protegidos son visibles. T los com odos ponentes pblicos y protegidos dentro de un rbol de herencia tienen que tener nom nicos. Por bres otro lado, los nom de los com bres ponentes privados deben ser nicos slo dentro de su clase. Cuando se redefinen los m todos, la nueva im entacin oculta al m plem todo de la superclase con el m o nom pero la nueva definicin sustituye ism bre, a la anterior de m anera que el nom del m bre todo sigue siendo nico. Se puede usar la pseudoreferencia SUPER-> para acceder a la definicin de un m todo en una superclase que ha sido oscurecida por la redefinicin en la subclase.

Herencia y atributos estticosAl igual que todos los com ponentes, los atributos estticos slo existen una vez en cada rbol de herencia. Una subclase puede acceder a los atributos estticos pblicos y protegidos de todas sus superclases. A la inversa, una superclase com parte sus atributos pblicos y protegidos con todas sus subclases. En trm de herencia, los atributos estticos no estn asignados a una nica clase, si no que inos form parte de todo el rbol de herencia. Se pueden cam desde fuera de la clase usando el com an biar ponente elegido con algn nom de alguna de bre las clases del rbol de herencia, o desde dentro de cualquier clase en la que los atributos sean com partidos, o sea, dentro de cualquier clase del rbol de herencia. Son visibles en todas las clases del rbol de herencia. Cuando se direcciona un atributo esttico que pertenece a una parte del rbol de herencia, siem se direcciona a la clase en la que el atributo es pre declarado, independientem de la clase especificada en la seleccin de la clase. Esto es im ente portante cuando se llam al constructor esttico de a clases dentro de la herencia. Los constructores estticos son ejecutados la prim vez que se accede a una clase. Si se accede a un atributo esttico era declarado en una superclase usando el nom de la subclase, nicam el bre ente constructor esttico de la superclase es ejecutado.

Herencia y constructoresHay una serie de reglas especiales que se aplican a los constructores dentro de la herencia. Constructores dependientes de instancia Cada clase tiene un constructor dependiente de instancia llam CONSTRUCTOR. Esta es una excepcin a la ado regla de que los nom de los com bres ponentes dentro de un rbol de herencia deben ser nicos. Los constructores dependientes de instancia de varias clases en un rbol de herencia son com pletam independientes uno de otro. No se puede redefinir el constructor dependiente de instancia de una ente superclase en una subclase, ni llam especficam al m ar ente todo con CALL METHOD CONSTRUCTOR, de m anera que no pueden tener lugar conflictos con los nom bres. El constructor dependiente de instancia de una clase es llam por el sistem cuando se instancia la clase usando la sentencia CREA OBJECT Debido ado a TE .converted by Web2PDFConvert.com

a que una subclase contiene todos los atributos visibles de sus superclases, los cuales pueden ser fijados por constructores dependientes de instancia, el constructor dependiente de instancia de una subclase tiene que asegurarse de que todos los constructores dependientes de instancia de todas las superclases tam son llam bin ados. Para que esto ocurra, el constructor dependiente de instancia de cada clase tiene que contener la sentencia CALL METHOD SUPER->CONSTRUCTOR. La nica excepcin a esta regla son las subclases directas del nodo raz OBJECT En las superclases sin un constructor . dependiente de instancia definido explcitam ente, es llam el constructor dependiente de instancia im ado plcito. Cuando se llam a un constructor dependiente de instancia se deben proporcionar valores para todos los parm a etros de la interface que no sean opcionales. Hay varias m aneras de hacer esto: Usando la sentencia CREA OBJECT Si la clase que se est instanciando tiene un constructor dependiente de instancia con una interface entonces TE se tienen que pasar los valores usando EXPORTING. Si la clase que se est instanciando no tiene explcitam un constructor dependiente de ente instancia, se tiene que m en el rbol de herencia en el siguiente nivel por encim con un constructor dependiente de instancia explcitam irar a ente declarado. Si ste tiene una interface entonces se tienen que pasar los valores con EXPORTING. De otra m anera no habra que pasarle valores. Usando la sentencia CALL METHOD SUPER->CONSTRUCTOR Si la superclase directa tiene un constructor dependiente de instancia con una interface entonces se tienen que pasar los valores usando EXPORTING. Si la superclase directa tiene un constructor dependiente de instancia sin interface entonces no se tienen que pasar parm etros. Si la superclase directa no tiene explcitam ente un constructor dependiente de instancia se tiene que m en el rbol de herencia en el siguiente nivel por encim con un constructor dependiente irar a de instancia explcitam declarado. Si ste tiene una interface entonces se tienen que pasar los valores con EXPORTING. De otra m ente anera no habra que pasarle valores. En am casos se tiene que m en el siguiente constructor dependiente de instancia explcitam disponible y si tiene una interface pasarle los bos irar ente valores. Lo m o se aplica al control de excepciones para los constructores dependientes de instancia. Cuando se trabaja con herencia se necesita un ism conocim iento preciso de todo el rbol de herencia. Cuando se instancia una clase en la parte de abajo del rbol de herencia se tienen que pasar los parm etros del constructor de clase m cercano al nodo raiz. s El constructor dependiente de instancia de una subclase est dividido en dos partes por la sentencia CALL METHOD SUPER->CONSTRUCTOR. En las sentencias anteriores a la llam el constructor se com ada porta com un m o todo esttico, esto es, no puede acceder a los atributos dependientes de instancia de su clase. No se puede acceder a los atributos dependientes de instancia hasta despus de la llam Por esto, las sentencias anteriores a la llam se usan para ada. ada determ los parm inar etros reales para la interface del constructor dependiente de instancia de la superclase. Slo se pueden usar atributos estticos o datos locales para hacer esto. Cuando se instancia una subclase, los constructores dependientes de instancia son llam jerrquicam ados ente, el prim nivel anidado en el cual se er direccionan atributos dependientes de instancia es el nivel m alto de la superclase. Cuando se llega a los constructores de las clases de los niveles s m bajos, se pueden direccionar sucesivam sus atributos dependientes de instancia. s ente En un m todo constructor los m , todos de las subclases de la clase no son visibles. Si un constructor dependiente de instancia llam a un m a todo dependiente de instancia de la m a clase usando la referencia im ism plcita a s m o ME->, el m ism todo es llam com im entado en la clase del ado o plem constructor dependiente de instancia y no en ninguna form redefinida que pueda haber en la subclase que se quiere instanciar. Esto es una a excepcin a la regla de que cuando se llam m an todos dependientes de instancia el sistem siem llam al m a pre a todo im entado en la clase a cuya plem instancia la referencia est apuntando. Constructores estticos Cada clase tiene un constructor esttico llam CLASS_CONSTRUCTOR. ado Lo referente a la nom enclatura de los com ponentes en el rbol de herencia se aplica igualm a los constructores estticos com a los ente o constructores dependientes de instancia. La prim vez que se accede a una subclase en un program su constructor esttico es ejecutado. De era a, cualquier m anera, antes de que pueda ser ejecutado, el constructor esttico de todas sus superclases debe haber sido ejecutado antes. Un constructor esttico slo puede ser llam una vez por program Por lo tanto cuando se accede por prim vez a una subclase el sistem busca la ado a. era a superclase del siguiente nivel por encim cuyo constructor esttico an no haya sido ejecutado. Se ejecuta el constructor esttico de esa clase, a seguido de todos los de las clases entre esa clase y la clase a la que accedem os.

HERENCIA: VISIN DE CONJUNTO

La subclase c2 deriva de la superclase c1. En lo m alto del rbol de herencia est la clase OBJECT s .

converted by Web2PDFConvert.com

La herencia sim consiste en que cada clase slo deriva directam de una superclase, pero puede tener varias subclases directas. La clase vaca ple ente OBJECT es el nodo raz de cada rbol de herencia en ABAP Objects.

Este grfico m uestra cm variables referenciadas con referencia a una superclase pueden apuntar a objetos de sus subclases. T os una instancia o enem de la clase 3. Las variables referenciadas a clases cref1, cref2 y cref3 tienen el tipo de las clases 1, 2 y 3 respectivam ente. Las tres variables referenciadas pueden apuntar a la clase 3, pero la variable cref1 slo puede acceder a los com ponentes pblicos de la clase 1, cref2 puede acceder a los com ponentes pblicos de las clases 1 y 2, y cref3 puede acceder a los com ponentes pblicos de todas las clases. Si se redefine un m todo de una superclase en una subclase, se pueden usar variables referenciadas definidas con referencia a la superclase para direccionar objetos con diferente im entacin de m plem todos. Cuando se direcciona la superclase, el m todo tiene su im entacin original, pero plem cuando se direcciona la subclase, el m todo tiene la nueva im entacin. El usar una m a variable referenciada para llam a m plem ism ar todos con el m o ism nom pero que se com bre portan distinto se conoce com polim o orfism o.

EJEMPLO DE HERENCIAEl siguiente ejem m plo uestra el concepto de herencia en ABAP Objects. Una nueva clase counter_ten hereda de la clase ya existente counter.

converted by Web2PDFConvert.com

La clase counter_ten se deriva de la clase counter. Se redefine el m todo increm Para hacer esto se tiene que cam la visibilidad del atributo ent. biar count de privado a protegido. El m todo redefinido llam al m a todo oscurecido de la superclase usando la pseudoreferencia SUPER->. El m todo redefinido es una especializacin del m todo heredado. El ejem instancia la subclase. La variable referenciada que apunta a la subclase tiene el tipo plo de la superclase. Cuando el m todo increm es llam usando la referencia de la superclase, el sistem ejecuta el m ent ado a todo redefinido de la subclase.

InterfacesLas clases, sus instancias (los objetos) y el acceso a los objetos usando variables referenciadas son la base de la program acin orientada a objetos en ABAP . Adem hay veces en las que es necesario para clases sim s, ilares proporcionar funcionalidades sim ilares pero que estn codificadas diferentes en cada clase, las cuales dan un punto de contacto com con el usuario. Por ejem podram tener dos clases sim n plo, os ilares, cuenta corriente y cuenta de ahorro, las cuales tienen un m todo para calcular las com isiones del ao. Las interfaces y nom de los m bres todos son los m os pero la ism im entacin es diferente. El usuario de las clases y las instancias tiene que ser capaz de ejecutar el m plem todo para todas las cuentas sin preocuparse del tipo de cada cuenta individual. ABAP Objects hace posible esto m ediante el uso de las interfaces. Las interfaces son estructuras independientes que se pueden im entar en una plem clase para extender el m de esa clase. El m especfico de una clase viene definido por sus com bito bito ponentes y sus secciones de visibilidad. Por ejem los com plo, ponentes pblicos de una clase definen su m pblico, ya que todos sus atributos y los parm bito etros de los m todos pueden ser utilizados por todos los usuarios. Los com ponentes protegidos de una clase definen su m en lo que se refiere a sus subclases. bito Las interfaces extienden el m de una clase aadiendo sus propios com bito ponentes a la seccin pblica. Esto perm a los usuarios acceder a diferentes clases por m de un punto de contacto com Las interfaces junto con la herencia proporcionan ite edio n. uno de los pilares bsicos del polim orfism ya que perm que un slo m o, iten todo con una interface se com porte distinto en diferentes clases.

Definicin de interfacesAl igual que las clases, las interfaces se pueden definir o bien globalm en el R/3 Repository o localm en un program ABAP La definicin de una ente ente a . interface local es el cdigo existente entre las sentencias:converted by Web2PDFConvert.com

INTERF . ACE ENDINTERF ACE. La definicin contiene la declaracin de todos los com ponentes (atributos, m todos, eventos) de la interface. Se pueden definir los m os ism com ponentes en una interface que en una clase. Los com ponentes de las interfaces no tienen que ser asiganados a ninguna seccin de visibilidad ya que autom ticam pertenecen a la seccin pblica de la clase en la que la interface es im entada. ente plem Las interfaces no tienen una parte de im entacin ya que sus m plem todos son im entados en la clase que im enta la interface. plem plem

Implementacin de interfacesA diferencia de las clases, las interfaces no tienen instancias, en vez de eso, las interfaces son im entadas por las clases. Para im entar una plem plem interface en una clase se usa la sentencia INTERF . en la parte declarativa de la clase. Esta sentencia slo puede aparecer en la ACES seccin pblica de la clase. Cuando se im enta una interface en una clase, los com plem ponentes de la interface se aaden al resto de com ponentes de la seccin pblica. Un com ponente . que im entar los m plem todos de todas las interfaces im entadas en ella. La parte de im entacin de la clase debe contener la im entacin plem plem plem de cada m todo de la interface : METHOD . ENDMETHOD. Las interfaces pueden ser im entadas por diferentes clases. Cada una de las clases es am plem pliada con el m o conjunto de com ism ponentes, aunque los m todos de la interface pueden ser im entados de m plem anera distinta en cada clase. Las interfaces perm usar diferentes clases de una m iten anera uniform aprovechando las referencias a las interfaces (polim e orfism Por ejem las o). plo, interfaces im entadas en diferentes clases am el m pblico de cada clase en el m o conjunto de com plem plan bito ism ponentes. Si la clase no tiene ningn com ponente pblico especfico de ella m a entonces la interface describe com ism pletam el m pblico de la clase. ente bito

Referencias a interfacesLas variables referenciadas perm acceder a los objetos. En lugar de crear variables referenciadas con referencia a una clase, se pueden crear con itan referencia a una interface. Este tipo de variables referenciadas puede contener referencias a los objetos de las clases que im enten esa interface. plem Para definir una referencia a una interface se usa la adicin TYPE REF TO en las sentencias DA A o TYPES. tiene que ser una interface que T haya sido declarada en el program antes de que esta declaracin tenga lugar. Una variable referenciada con el tipo referenciado a una interface se a llam variable referenciada a una interface, o referencia a interface sim ente. a plem Una referencia a interface perm al usuario usar -> ponentes visibles de la interface objeto al cual la referencia est apuntando. Esto perm al usuario acceder a todos los com ite ponentes del objeto que fueron aadidos a su definicin al im entar la interface. plem Direccionar objetos usando referencias a interfaces Para crear un objeto de la clase prim se tiene que haber declarado una variable ero referenciada con referencia a la clase. Si la clase im enta una interface , se puede usar la siguiente asignacin entre la variable plem referenciada a la clase y una referencia a interface para hacer que la referencia a interface apunte al m o objeto que la ism referencia a clase en : = . Si la interface contiene un atributo dependiente de instancia y un m todo dependiente de instancia com ponentes de la interface com sigue: o Usando la variable referenciada a una clase : Para acceder a un atributo : -> Para acceder al m todo : CALL METHOD -> Usando la variable referenciada a una interface : Para acceder a un atributo : -> Para acceder al m todo : CALL METHOD -> Siem que los com pre ponentes estticos de las interfaces estn im plicados slo se puede usar el nom de la interface para acceder a las constantes: bre Para acceder a una constante : < intf>=> Para todos los dem com s ponentes estticos de una interface, slo se pueden usar referencias a objetos o la clase que im enta la interface: plem Para acceder a un atributo esttico : => Para llam a un m ar todo esttico : CALL METHOD => Asignacin usando referencias a interfaces Al igual que las referencias a clases, se pueden asignar referencias a interfaces a diferentes variables referenciadas. T bin se pueden realizar las am asignaciones entre variables referenciadas a clases y a interfaces. Cuando se usa la sentencia MOVE o el operador de asignacin (=) para asignar variables referenciadas, el sistem debe ser capaz de reconocer en la com a probacin de la sintaxis si la asignacin es posible. Supongam que tenem una referencia a clase y tres referencias a interfaces , y . Las siguientes asignaciones con os os referencias a interfaces pueden ser com probadas estticam ente: = . Am referencias a interfaces deben referirse a la m a interface o la interface de tiene que tener a la interface bas ism com com o ponente. = . La clase de la referencia a clase tiene que im entar la interface de la referencia a interface plem = . La clase de tiene que ser la clase predefinida vaca OBJECT . En todos lo dem casos se tiene que trabajar con la sentencia MOVE ?TO o con el operador de asignacin ?= en lugar de los usados antes. Cuando se s usan estos dos operadores no se realiza el chequeo esttico. En su lugar el sistem com a prueba en tiem de ejecucin si la referencia al objeto apunta po a un objeto al cual puede apuntar. Si la asignacin es posible el sistem la realiza y si no lo es genera el error en tiem de ejecucin a po MOVE_CAST_ERROR . Siem que se asigne una referencia a una interface a una referencia a una clase y esta referencia no refiere a la clase OBJECT se tiene que usar este pre tipo de asignacin: ?= . Para que esta asignacin ocurra correctam el objeto al cual apunta tiene que ser un objeto de la m a clase que el tipo de la variable ente ism referenciada a clase .

HERENCIA: VISIN DE CONJUNTO.

converted by Web2PDFConvert.com

El diagram m a uestra la definicin de la interface local I1 y la declaracin y la im entacin de una clase local c1 que im enta la interface I1 en su plem plem seccin pblica. El m todo de la interface I1~M1 se im enta en la clase. No se pueden im entar interface en ninguna otra seccin de visibilidad. plem plem Los com ponentes de la interface am el m pblico de la clase. plan bito

EJEMPLO DE INTERFACESEl siguiente ejem m plo uestra cm se puede usar una interface para im entar dos contadores diferentes pero que se pueden llam de la m a o plem ar ism m anera.

converted by Web2PDFConvert.com

La interface i_counter tiene tres m todos, set_counter increm , ent_counter y get_counter. Las clases c_counter1 y c_counter2 im entan la plem interface en sus secciones pblicas. Am clases tienen que im entar los tres m bas plem todos de la interface en su parte de im entacin. c_counter1 plem es una clase para contadores que pueden tener un valor inicial y son increm entados de uno en uno. c_counter2 es una clase para contadores que slo pueden ser increm entados de diez en diez. Am clases tienen el m o aspecto visto desde el exterior. Su interface con el exterior est bas ism com pletam definida por la interface ya que no hay com ente ponentes adicionales en ninguno de los m todos. DA A cref1 TYPE REF TO c_counter1. T DA A cref2 TYPE REF TO c_counter2. T DA A iref TYPE REF TO i_counter. T Se declaran dos variables referenciadas cref1 y cref2,a las clases c_counter1 y c_counter2 respectivam ente. T bin se declara una variable am referenciada iref a la interface i_counter. Los valores de todas las referencias son initial. DA A cref1 TYPE REF TO c_counter1. T DA A cref2 TYPE REF TO c_counter2. T DA A iref TYPE REF TO i_counter. T CREA OBJECT cref1, cref2. TE : La sentencia CREA OBJECT crea un objeto de cada clase a los cuales apuntan las referencias en cref1 y cref2. TE DA A cref1 TYPE REF TO c_counter1. T DA A cref2 TYPE REF TO c_counter2. T DA A iref TYPE REF TO i_counter. T CREA OBJECT cref1, cref2. TE : iref = cref1. Cuando la referencia de cref1 se asigna a iref, la referencia en iref apunta tam al objeto con nom interno c_counter. bin bre

DISPARAR Y MANEJAR EVENTOSEn ABAP Objects hay ciertos m todos que se conocen com disparadores (triggers) y otros que se conocen com m o o anejadores (handlers). Los triggers son los m todos que disparan un evento, m ientras que los handlers son los m todos que se ejecutan cuando ocurre un evento.converted by Web2PDFConvert.com

Eventos disparadoresPara disparar un evento una clase tiene que: declarar el evento en la parte declarativa disparar el evento en uno de sus m todos. Declaracion de eventos Los eventos se declaran en la parte declarativa de una clase o en una interface. Para declarar eventos dependientes de instancia se usa la sentencia: EVENTS EXPORTING... V ALUE() TYPE type [OPTIONAL].. Para declarar eventos estticos se usa la sentencia: CLASS-EVENTS ... Am sentencias tienen la m a sintaxis. bas ism Cuando se declara un evento se puede usar la adicin EXPORTING para especificar parm etros que se pasan al m anejador del evento. Los parm etros se pasan siem por valor. Los eventos dependientes de instancia siem contienen el parm im pre pre etro plcito SENDER, el cual tiene el tipo de una referencia al tipo o a la interface en la cual el evento es declarado. Disparar eventos Un evento dependiente de instancia en una clase puede ser disparado por cualquier m todo en la clase. Los eventos estticos son disparados por m todos estticos. Para disparar un evento en un m todo se usa la siguiente sentencia: RAISE EVENT EXPORTING... = ... Por cada parm form que no est definido com opcional se tiene que pasar el correspondiente parm real en la adicin etro al o etro EXPORTING. La referencia a s m o ME is pasada autom ism ticam al parm im ente etro plcito SENDER.

Eventos manejadoresLos eventos se usan para ejecutar una serie de m todos. Estos m todos tienen que: estar definidos com eventos m o anejadores (handler) de ese evento estar registrados en tiem de ejecucin para el evento. po Declaracin de m todos m anejadores de eventos Una clase puede contener m todos m anejadores de eventos para eventos tanto de su propia clase com de otras clases. Para declarar un m o todo m anejador de eventos dependiente de instancia se usa la siguiente sentencia: METHODS Para m todos estticos se usa la m a sentencia con CLASS-METHODS en vez de METHODS. es un evento declarado en la clase o en la interface ism . La interface de un m todo m anejador de eventos slo puede contener parm etros form definidos en la declaracin del evento. Los atributos de los ales parm etros tam son adoptados por el evento. El m bin todo m anejador de eventos no tiene por que usar todos los parm etros pasados en la sentencia RAISE EVENT Si se quiere usar tam el parm im . bin etro plcito SENDER, se tiene que listar en la interface. Este parm perm al m etro ite anejador dependiente de instancia acceder al disparador para por ejem perm devolver resultados. Si se declara un m plo itir todo m anejador de eventos en una clase quiere decir que las instancias de la clase o la m a clase va a ser en principio capaz de m ism anejar un evento disparado en un m todo. Registro de m todos m anejadores de eventos Para perm a un m itir todo m anejador de eventos reaccionar a un evento, se tiene que determ en ianr tiem de ejecucin el disparador al cual va a reaccionar. Esto se hace con la siguiente sentencia: po SET HANDLER... ... [FOR]... Esta sentencia relaciona los m todos m anejadores de eventos con sus correspondientes m todos. Hay cuatro tipos diferentes de eventos: Eventos dependientes de instancia declarados en una clase. Eventos dependientes de instancia declarados en una interface. Eventos estticos declarados en una clase. Eventos estticos declarados en una interface. La sintaxis y el efecto de la sentencia SET HANDLER depende de cual de los cuatro casos de arriba tenga lugar. Para un evento dependiente de instancia se tiene que usar la adicin FOR para especificar la instancia para la cual se quiere registrar el m anejador. Se puede especificar una sla instancia com disparador usando una variable referenciada : o SET HANDLER... ...FOR . o se puede registrar el m anejador para todas las instancias que puedan disparar el evento: SET HANDLER... ...FOR ALL INST ANCES. En este caso el registro se aplica incluso a las instancias que an no han sido creadas cuando se registra el m anejador. No se puede usar la adicin FOR para los eventos estticos: SET HANDLER... ... El registro se aplica autom ticam a la clase entera o a todas las clases que im entan la interface que contiene el evento esttico. En el caso de ente plem las interfaces, el registro tam se aplica a las clases que an no han sido cargadas cuando el m bin anejador se registra. Coordinacin en el m anejo de eventos. Despus de la sentencia RAISE EVENT todos los m , todos m anejadores registrados son ejecutados antes de que la siguiente sentencia sea procesada (m anejo de eventos sincrnico). Si un m todo m anejador de eventos desencadena eventos, los correspondientes m todos m anejadores de eventos son ejecutados antes de que el m todo m anejador original continue. Para evitar la posibilidad de un bucle infinito, actualm los eventos slo se pueden ente anidar 64 niveles. Los m todos m anejadores de eventos son ejecutados en el orden en el que son registrados. Debido a que los m anejadores de eventos son registrados dinm ente, no se puede saber el orden en el que sern procesados. Por esto se deben program todos los m icam ar anejadores de eventos com si se o fuesen a ejecutar todos sim ultneam ente.

EVENTOS: VISIN DE CONJUNTOT os dos clases c1 y c2: enem La clase c1 contiene un evento e1, el cual es desencadenado por el m todo m La clase c2 contiene un m 1. todo m el cual responde al evento e1 de 2 la clase c1.

CLASE DISPARADORA DEL EVENTO

converted by Web2PDFConvert.com

El registro del m anejador se hara com sigue: o DA A r1 TYPE REF TO c_1. T DA A h1 TYPE REF TO c_2. T DA A h2 TYPE REF TO c_2. T CREA OBJECT r1, h1, h2. TE : SET HANDLER h1->m h2->m FOR r1. 2 2 CALL METHOD r1->m 1. El program crea una instancia de la clase c1 y dos de la clase c2. Los valores de las variables referenciadas r1, h1 y h2 apuntan a estas instancias. a La sentencia SET HANDLER crea una tabla de m anejadores invisible al usuario para cada evento para el cual un m todo m anejador ha sido registrado. Esta tabla contiene los nom de los m bres todos m anejadores de eventos y de las referencias de las instancias registradas. Las entradas de esta tabla son adm inistradas dinm ente por la sentencia SET HANDLER. Una referencia a una instancia en esta tabla es com una referencia en una variable icam o referenciada. En otras palabras, cuentan com utilizaciones de la instancia, lo cual afecta directam al tiem de vida de la instancia. Por ejem o ente po plo, las instancias C2 y C2 no son borradas totalm aunque las variables h1 y h2 sean inicializadas debido a que continuan registradas en la tabla de ente m anejadores. Para los eventos estticos, el sistem crea una tabla de m a anejadores independiente de instancia para la clase dada. Cuando un evento es desencadenado, el sistem busca en la tabla correspondiente y ejecuta el m a todo en las instancias adecuadas (o en la clase correspondiente si se trata de un m todo m anejador esttico.

EVENTOS: EJEMPLOEl siguiente ejem m plo uestra cm se trabaja con eventos en ABAP Objects: o

converted by Web2PDFConvert.com

La clase counter im enta un contador. Se desencadena el evento critical_value cuando el valor um (threshold) es excedido, y se visualiza la plem bral diferencia. La clase handler puede m anejar las excepciones en la clase counter. El m anejador es registrado en tiem de ejecucin para todas las po variables referenciadas que apunten al objeto. El siguiente ejem m plo uestra cm declarar llam y m o , ar anejar eventos en ABAP Objects. Este objeto trabaja con la lista interactiva desplegada debajo. Cada interaccin del usuario desencadena un evento en ABAP Objects. La lista y sus datos son creados en la clase c_list. Hay una clase status para procesar las acciones del usuario. Se desencadena el evento button_clicked en el evento at usercom and. m El evento es m anejado en la clase c_list. Hay un objeto de la clase c_ship o c_truck para cada linea de la lista. Am clases im entan la interface bas plem i_vehicle. Cuando la velocidad de cualquiera de los objetos cam el evento speed_change es desencadenado. La clase c_list reacciona a esto bia, actualiza la lista.

Restriccionesconverted by Web2PDFConvert.com

Las sentencias ABAP usadas para procesar listas an no estn com pletam disponibles en ABAP ente Objects, aunque s algunas de ellas. Lo m o ocurre con el resto de sentencias ABAP no todas estn ism , disponibles en ABAP Objects.

DeclaracinSe declaran los siguientes eventos en el ejem plo: El evento dependiente de instancia speed_change en la interface i_vehicle. El evento esttico button_clicked en la clase status. La clase c_list tiene los m todos m anejadores de eventos de am eventos. bos La clase status no tiene ningn atributo y por lo tanto slo trabaja con m todos y eventos estticos.

ImplementacinEl m todo esttico user_action de la clase status desencadena el evento esttico button_clicked. Los m todos dependientes de instancia i_vehicle~drive y i_vehicle~stop desencadenan el evento dependiente de instancia i_vehicle~speed_change en las clases c_ship y c_truck.

converted by Web2PDFConvert.com

converted by Web2PDFConvert.com

Utilizacin de las clases en un programaEl program crea un objeto de la clase c_list y registra el m a todo m anejador de eventos fcode_handler del objeto para el evento esttico button_clicked. T bin registra el m am todo m anejador de eventos list_change para el evento speed_change de todas las instancias que im entan la interface i_vehicle. plem

POOLS DE CLASES Clases globales y interfacesLas clases y las interfaces son tipos de objetos. Se pueden definir o bien globalm en R/3 Repository o ente bien localm en un program ABAP Si se definen clases e interfaces globalm ente a . ente, entonces son alm acenadas en un tipo especial de program ABAP llam class pools (tipo K) o interface pools (tipo as ados J) los cuales sirven com contenedores de los respectivos tipos de objetos. Cada pool de clases o o interfaces contiene la definicin de una sla clase o interface. El program es autom a ticam generado ente por el constructor de clases cuando se crea la clase o la interface. Un pool de clases es com parable a un m pool o a un grupo de funciones. Contiene sentencias ABAP odul , tanto declarativas com ejecutables, pero no puede ser ejecutado por si m o. El sistem slo puede o ism a ejecutar las sentencias en el pool de clases a peticin, esto es, cuando la sentencia CREA OBJECT TE crea una instancia de la clase. Los pools de interfaces no contienen ninguna sentencia ejecutable. Son usados com contenedores de las o definiciones de la interface. Cuando se im enta una interface en u