loading

Logout succeed

Logout succeed. See you again!

ebook img

Manual Abap Orientado a Objetos - Programación en ABAP 4 PDF

pages50 Pages
release year2002
file size0.47 MB
languageSpanish

Preview Manual Abap Orientado a Objetos - Programación en ABAP 4

ABAP orientado a objetos Versión 1.0 22 de Marzo del 2002 Manuel Fernández Arguelles AG ABAP orientado a objetos LENGUAJE ABAP ORIENTADO A OBJETOS ¿QUÉ ES LA ORIENTACIÓN A OBJETOS? La programación orientada a objetos es un método de desarrollo de software basado en el comportamiento real de los objetos en el mundo real. Se pretende desarrollar componentes de software que se comporten como los objetos reales a los que representan. La orientación a objetos es una técnica usada en muchos lenguajes de programación los cuales comparten una terminología usada universalmente. En esta sección se realizará una primera visión de conjunto de estos términos para en secciones posteriores adentrarse en la implementación de estos conceptos en el lenguaje ABAP. Objetos Un objeto es únicamente una porción de código fuente que contiene datos y proporciona servicios. Los datos constituyen los atributos del objeto. Los servicios que proporciona el objeto se conocen como métodos y se asemejan en su funcionamiento a las funciones. Normalmente los métodos operan con los datos privados del objeto, esto es, con datos que son sólo visibles para los métodos del objeto. De esta manera, los atributos de un objeto no pueden ser cambiados directamente por el usuario del objeto, sólo pueden ser cambiados por los métodos de ese objeto. Así se garantiza la consistencia interna del objeto. Clases Una clase es una entidad teórica que describe el comportamiento de un objeto. Desde un punto de vista meramente técnico, un objeto es una instancia en tiempo de ejecución de una clase. En principio se pueden crear cualquier número de objetos basados en una única clase. Cada instancia de una clase (objeto) tiene su propia identidad y su propio conjunto de valores para sus atributos. Dentro de un programa un objeto es identificado por su referencia, la cual le proporciona un nombre que define inequivocamente al objeto y permite acceder a sus métodos y atributos. Propiedades de los objetos En la programación orientada a objetos, los objetos tienen normalmente las siguientes propiedades: − Encapsulación – Los objetos restringen la visibilidad de sus recursos (atributos y métodos) al resto de usuarios. Cada objeto posee una interface que determina la manera de interactuar con él. La implementación del objeto (su interior) es encapsulada, lo que quiere decir que desde fuera el objeto es invisible, simplemente se usa. − Polimorfismo – El polimorfismo quiere decir que métodos que se llaman exactamente igual pueden comportarse de manera distinta en clases diferentes. La orientación a objetos tiene unas estructuras llamadas interfaces que permiten acceder a métodos con el mismo nombre en diferentes clases. Dentro de cada clase particular se puede redifinir el método obteniendo distintos métodos con el mismo nombre. Asi es que un método no se define exactamente con su nombre, si no con su nombre y el nombre de la clase a la que pertenece. − 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 manera, se pueden sobreescibir los métodos existentes, incluso añadir métodos nuevos. Usos de la orientación a objetos Las principales ventajas de la programación orientada a objetos son: − Sistemas de software muy complejos se vuelven mucho más simples de comprender debido a que la orientación a objetos proporciona una representación mucho más cercana a la realidad que otras técnicas de programación. − En un sistema correctamente diseñado con orientación a objetos es posible realizar cambios al nivel de la clases, sin tener que realizar cambios en ningún otro punto del sistema. Esto reduce significativamente el costo total del mantenimiento necesario. − A través del polimorfismo y la herencia es posible la reutilización de componentes individuales. − La cantidad de trabajo en revisión y mantenimiento del sistema se reduce debido a que muchos problemas pueden ser detectados y corregidos en la fase de diseño. Para conseguir estos objetivos necesitamos: ABAP orientado a objetos - Manuel Fernández Fernández-Argüelles 1 ABAP orientado a objetos − Lenguajes de programación orientados a objetos – Las técnicas de programación orientadas a objetos no utilizan necesariamente un lenguaje orientado a objetos, aunque la eficiencia del desarrollo depende directamente de la utilización o no de un lenguaje orientado a objetos. − Herramientas orientadas a objetos – Estas herramientas permiten crear programas orientados a objetos en lenguajes orientados a objetos. Permiten además diseñar y almacenar los objetos desarrollados y las relaciones entre ellos. − Diseño orientado a objetos – El diseño orientado a objetos de un sistema de software es, de todos los requerimientos para conseguir las ventajas arriba enumeradas, el más importante, el que más tiempo consume y el más dificil de llevar a cabo. ¿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 ejecución ABAP y por otro a la extensión orientada a objetos del lenguaje ABAP El entorno de ejecución El nombre de ABAP objects para todo el entorno de ejecución ABAP quiere indicar el objetivo aún no totalmente desarrollado de adaptar SAP completamente a la orientación a objetos. El ABAP Workbench permite crear objetos del R/3 Repository tales como programas, objetos de autorización, objetos de bloqueo, etcetera. El Business Object Repository (BOR) permite crear SAP Business objects. Hasta ahora las técnicas de orientación a objetos se habían usado exclusivamente en el diseño, pero desde el release 4.0 el lenguaje ABAP es ya un lenguaje orientado a objetos. Extensión orientada a objetos de ABAP ABAP Objects es asimismo un conjunto de sentencias orientadas a objetos que han sido introducidas dentro del lenguaje ABAP. Esta extensión se cimenta en el lenguaje ya existente, siendo compatible con él. Se pueden usar objetos en programas existentes, de la misma manera que se pueden usar sentencias ABAP convencionales en programas ABAP orientados a objetos. El resto del lenguaje ABAP está creado desde un principio orientado a una programación estructurada, en la cual los datos se almacenan de manera estructurada en tablas en la base de datos y los programas mediante funciones acceden a estos datos y trabajan con ellos. PASO DE LAS FUNCIONES A LOS OBJETOS Los objetos son el centro de cualquier modelo orientado a objetos. Los objetos contienen atributos (datos) y métodos (funciones). Uno de sus principales objetivos es el suministar al desarrollador de software una forma de trabajo en la cual poder examinar un problema real y poder proporcionar una solución individualizada al problema. En el entorno de los negocios podrían ser objetos las entidades Cliente, Factura, etcetera. Desde el Release 3.1 en adelante, el Business Object Repository (BOR) contiene ejemplos de tales objetos (transacción SW02). Lo más parecido a los objetos que tenía ABAP eran los módulos de funciones y los grupos de funciones. Supongamos que tenemos un grupo de funciones para procesar pedidos. Los atributos de un pedido son los datos globales del grupo de funciones, mientras que los módulos de funciones son las acciones que manipulan los datos, o sea los métodos. Esto quiere decir que los datos reales del pedido están encapsulados en el grupo de funciones y no se puede acceder directamente a ellos, sólo mediante los módulos de funciones. De esta manera se garantiza la consistencia de los datos. Cuando se ejecuta un programa ABAP, el sistema inicia una nueva sesión interna que tiene una zona de memoria en la cual reside el programa ABAP y sus datos asociados. Cuando el programa llama a un módulo de funciones, una instancia del grupo de funciones más sus datos es cargado en el área de memoria de la sesión interna. Un programa puede cargar distintas instancias llamando a módulos de funciones de diferentes grupos de funciones. La instancia de un grupo de funciones en el área de memoria de la sesión interna representa prácticamente el concepto de objeto. Cuando se llama al módulo de funciones, el programa que llama usa la instancia del grupo de funciones basada en su descripción en la biblioteca de funciones. El programa no puede acceder a los datos en el grupo de funciones directamente pero si a través del módulo de funciones. El módulo de funciones y sus parámetros son la interface ente el grupo de funciones y el usuario. La principal diferencia ente la verdadera orientación a objetos y los grupos de funciones es que mientras que un programa puede trabajar simultaneamente con varios grupos de funciones, no puede hacerlo con varias instancias de un mismo grupo. Si un programa quiere procesar varios pedidos a la vez tendría que ABAP orientado a objetos - Manuel Fernández Fernández-Argüelles 2 ABAP orientado a objetos adaptar el grupo de funciones para incluir una administración de instancias, usando por ejemplo, números que diferencien las instancias. En la práctica, esto es muy complicado de realizar. Por esto, los datos son almacenados en el programa y los módulos de funciones son llamados para trabajar con ellos (programación estructurada). Un problema es por ejemplo que todos los usuarios de un módulo de funciones deben usar las mismas estructuras de datos así como el propio grupo de funciones. El cambiar la estructura de interna de datos de un grupo de funciones afecta a muchos usuarios, sin poder predecir las posibles implicaciones del cambio. El único modo de evitar esto es mediante las interfaces, con una técnica que garantice que las estructuras internas de las instancias permanecerán ocultas, permitiendo cambiarlas mas tarde sin causar ningún problema Esto se consigue con la orientación a objetos. ABAP Objects permite definir datos y funciones en clases en lugar de en grupos de funciones. Usando clases, un programa ABAP puede trabajar con cualquier número de instancias (objetos) basados en la misma plantilla. En lugar de cargar en la memoria una única instancia de un grupo de un grupo de funciones implícitamente cuando se llama al módulo de funciones, el programa ABAP ahora puede generar las instancias de la clase explícitamente usando la nueva sentencia ABAP CREATE OBJECT. Cada instancia representa a un único objeto, y se puede acceder a cada una mediante su referencia. La referencia del objeto es lo que permite a un programa ABAP acceder a la interface de la instancia EJEMPLO En el siguiente ejemplo vemos la orientación a objetos de un sencillo grupo de funciones como es el caso de un contador: Supongamos que tenemos el grupo de funciones COUNTER. FUNCTION-POOL contador. DATA: cont TYPE i. FUNCTION fijar_contador. * Interface local (cid:198)(cid:198)(cid:198)(cid:198) importing value (fijar_valor) cont = fijar_valor. ENDFUNCTION. FUNCTION incrementar_contador. ADD 1 TO cont. ENDFUNCTION. FUNCTION obtener_contador. * Interface local (cid:198)(cid:198)(cid:198)(cid:198) exporting value (obtener_valor) obtener_valor = cont. ENDFUNCTION. El grupo de funciones tiene un campo entero llamado cont y tres módulos de funciones, fijar_contador, incrementar_contador y obtener_contador que trabajan con este campo. Dos de los módulos de funciones tienen parámetro input y output. Son los módulos que conforman la interface del grupo de funciones. Cualquier programa ABAP puede trabajar con este grupo de funciones, por ejemplo: DATA numero TYPE i VALUE 5. CALL FUNCTION ‘FIJAR_CONTADOR’ EXPORTING fijar_valor = numero. DO 3 TIMES. CALL FUNCTION ‘INCREMENTAR_CONTADOR’. ENDDO. CALL FUNCTION ‘OBTENER_CONTADOR’ IMPORTING obtener_valor = numero. Después de que esta sección del programa haya sido ejecutada, la variable numero tendrá el valor 8. El programa no puede acceder por sí mismo al campo cont del grupo de funciones. Las operaciones sobre este campo están encapsuladas en el módulo de funciones. El programa sólo puede comunicarse con el grupo de funciones mediante la llamada a los módulos de funciones. ABAP orientado a objetos - Manuel Fernández Fernández-Argüelles 3 ABAP orientado a objetos CLASES Las clases son las plantillas de los objetos. A la inversa, podemos decir que el tipo de un objeto es el mismo que el de su clase. Una clase es la descripción abstracta de un objeto. También podemos decir que una clase es un conjunto de instrucciones que tienen como objetivo construir un objeto. Los atributos de los objetos están definidos por los componentes de la clase (atributos, métodos y eventos), que son los que describen y controlan el comportamiento de los objetos. Clases locales y globales Las clases en ABAP Objects se pueden declarar bien globalmente o bien localmente. Las clases globales se definen en el generador de clases (transacción SE24) en el ABAP Workbench. Estas clases son almacenadas en class pools en la librería de clases en el R/3 Repository. Todos los programas ABAP en un sistema R/3 pueden acceder a las clases globales. Las clases locales se definen en un programa ABAP. Las clases locales y sus interfaces sólo pueden ser invocadas desde el programa en el que se han definido. Cuando se usa una clase en un programa ABAP el sistema busca primero una clase local con el nombre especificado. Si no encuentra ninguna entonces busca una clase global. A parte de la cuestión de la visibilidad, no hay ninguna diferencia entre usar una clase global o una clase local. Lo que si cambia sensiblemente es la manera en la que una clase local y una clase global son creadas. Si se define una clase que se va a usar en un único programa, normalmente es suficiente con definir aparentemente los componentes visibles de manera que la clase se ajuste a nuestro programa. Por otro lado, las clases globales deben estar preparadas para ser usadas en cualquier parte. 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 programa que use un objeto de esa clase reconozca el tipo de datos de cada parámetro de la interface. Veremos por un lado como crear clases e interfaces locales en un programa ABAP, para después ver como utilizar el generador de clases para crear clases e interfaces globales. DEFINICIÓN DE CLASES LOCALES Las clases locales son el conjunto de sentencias que están entre las sentencias CLASS… y ENDCLASS. Una definición completa de una clase constará de una parte declarativa en la que se definen los componentes, y si es necesario una parte de implementación en la que se implementan estos componentes. La parte declarativa de una clase está comprendida entre las sentencias: CLASS <class> DEFINITION. … ENDCLASS. La parte declarativa contiene la declaración de todos los componentes de la clase (atributos, métodos y eventos). Cuando se definen clases locales, la parte declarativa pertenece a los datos globales del programa, por tanto se habrá de situar al principio del programa. Si se declaran métodos en la parte declarativa de una clase, se deberá escribir también su parte de implementación. Ésta es la que va incluída entre las siguientes sentencias: CLASS <class> IMPLEMENTATION. … ENDCLASS. La parte de implementación contiene la implementación de todos los métodos de la clase. Esta parte actúa como un bloque, esto quiere decir que cualquier sección de código que no forme parte del bloque no será accesible. ESTRUCTURA DE UNA CLASE La estructura de una clase se define principalmente basándose en: − Una clase contiene componentes. − Cada componente se asigna a una sección de visibilidad (público, protegido o privado). − Las clases implementan métodos. Componentes de las clases Los componentes de una clase confeccionan sus contenidos. Todos los componentes son declarados en la parte declarativa de la clase. Los componentes definen los atributos de los objetos en una clase. Cuando se define una clase, cada componente es asignado a una de las tres distintas secciones de visibilidad que definen la interface externa de la clase. Todos los componentes de una clase son visibles dentro de la ABAP orientado a objetos - Manuel Fernández Fernández-Argüelles 4 ABAP orientado a objetos clase. Además todos comparten el mismo espacio por lo que sus nombres deben ser únicos dentro de la clase. Hay dos tipos de componentes en una clase, aquellos que existen separadamente para cada objeto de una clase, y aquellos que existen sólo una vez para la clase entera, independientemente del número de instancias. Estos componentes son conocidos como dependientes de instancia o independientes de instancia (o estáticos) respectivamente. En ABAP Obejcts, las clases pueden definir los siguientes componentes (debido a que todos los componentes que se pueden declarar en las clases también pueden ser declarados en las interfaces, las siguientes descripciones se aplican de la misma manera a las interfaces): Atributos Los atributos son los campos de datos internos de una clase y pueden tener cualquier tipo de datos ABAP. El estado de un objeto viene determinado por el contenido de sus atributos. Un tipo de atributos son las variables referenciadas. Estas variables permiten crear y acceder a los objetos, de manera que si se definen en una clase permiten acceder a otros objetos desde dentro de la clase. − Atributos dependientes de instancia. – El contenido de estos atributos es específico de cada objeto. Se declaran usando la sentencia DATA. − Atributos estáticos – El contenido de los atributos estáticos define el estado de la clase y es válido para todas las instancias la clase. Los atributos estáticos existen sólo una vez para la clase. Se declaran usando la sentencia CLASS-DATA. Son accesibles desde todo el entorno de ejecución de la clase. Todos los objetos de una clase pueden acceder a sus atributos estáticos. Si se cambia un atributo estático en un objeto, el cambio es visible en todos los demás objetos de la clase. Métodos Los métodos son procedimientos internos de una clase que definen el comportamiento de un objeto. Los métodos pueden acceder a todos los atributos de una clase. Esto les permite cambiar el contenido de los atributos de un objeto. Los métodos poseen también una interface con parámetros que les permite recibir valores cuando son invocados y devolver valores después de la llamada. Los atributos privados de una clase sólo pueden ser cambiados por métodos de la misma clase. La definición y la interface de un método son similares a las de los módulos de funciones. Un método se define en la parte declarativa de la clase y se implementa en la parte de implementación usando las sentencias: METHOD <meth>. … ENDMETHOD. Se pueden declarar tipos de datos locales y objetos en los métodos de la misma manera que en cualquier otro procedimiento ABAP (subrutinas y módulos de funciones). Los métodos se pueden llamar mediante la sentencia CALL METHOD. − Métodos dependientes de instancia – Estos métodos se declaran usando la sentencia METHODS. Pueden acceder a todos los atributos de una clase, y pueden desencadenar todos los eventos de una clase. − Métodos estáticos o independientes de instancia – Estos métodos se declaran usando la sentencia CLASS-METHODS. Sólo pueden acceder a los atributos estáticos y desencadenar eventos estáticos. − Métodos especiales – Además de los métodos normales que se pueden llamar con la sentencia CALL METHOD, hay dos métodos especiales llamados CONSTRUCTOR y CLASS_CONSTRUCTOR que son automáticamente llamados cuando se crea un objeto (CONSTRUCTOR) o cuando se accede por primera vez a los componentes de la clase (CLASS_CONSTRUCTOR). Eventos Los objetos o las clases pueden usar eventos para desencadenar un tipo de métodos en otros objetos o clases. Estos métodos se llaman métodos que manejan eventos (event handler methods) En una llamada normal a un método, el método puede ser llamado por cualquier número de usuarios. Cuando un evento es desencadenado, cualquier número de estos métodos puede ser llamado. La unión ente el disparador del evento (trigger) y el manejador del evento (handler) no es establecida de antemano, si no en el entorno de ejecución. En las llamadas normales a métodos, el programa que llama determina los métodos a los que quiere llamar. Estos métodos tienen que existir. El manejador de eventos determina los eventos a los cuales tiene que reaccionar. No tiene porque existir un método manejador de eventos registrado para cada evento. Los eventos de una clase pueden ser desencadenados en los métodos de la misma clase usando la ABAP orientado a objetos - Manuel Fernández Fernández-Argüelles 5 ABAP orientado a objetos sentencia RAISE EVENT. Un método de la misma o de diferente clase, se declara como método manejador de eventos utilizando la adición FOR EVENT <evt> OF <class>. Los eventos tienen una interface de parámetros similar a la de los métodos, pero sólo tienen parámetros de salida. Los parámetros son pasados por el disparador (sentencia RAISE EVENT) al método manejador de eventos el cual los recibe como parámetros de entrada. El vínculo de unión entre el disparador y el manejador (trigger y handler) es establecido dinámicamente en el programa usando la sentencia SET HANDLER. El disparador y el manejador pueden ser objetos o clases, dependiendo de si tenemos eventos dependientes de instancia o eventos estáticos y métodos manejadores de eventos. Cuando un evento es disparado, el correspondiente método manejador de eventos es ejecutado en todas las clases registradas para ese manejador. Existen dos tipos de eventos: − Eventos dependientes de instancia – Se declaran con la sentencia EVENTS. Sólo pueden ser desencadenados en un método dependiente de instancia. − Eventos estáticos o independientes de instancia – Se declaran con la sentencia CLASS-EVENTS. Todos los métodos (dependientes de instancia y estáticos) pueden desencadenar eventos estáticos. Los eventos estáticos son el único tipo de eventos que puede ser desencadenado por un método estático. Tipos Se pueden definir tipos de datos ABAP dentro de una clase con la sentencia TYPES. Los tipos de datos no son específicos de cada instancia y existen una sóla vez para todos los objetos de la clase. Constantes Las constantes son un tipo especial de atributos estáticos. Su valor se fija cuando son declaradas y no puede ser cambiado. Se declaran usando la sentencia CONSTANTS. Las constantes existen sólo una vez para todos los objetos de la clase. Visibilidad La parte declarativa de una clase se divide en tres áreas de distinta visibilidad: CLASS <class> DEFINITION. PUBLIC SECTION. … PROTECTED SECTION. … PRIVATE SECTION. … ENDCLASS. Estas tres áreas definen la visibilidad externa de los componentes de la clase, esto es, la interface entre la clase y el usuario. Cada componente de una clase ha de ser asignado a una de estas tres secciones: − Public section – Todos los componentes declarados en la sección pública son accesibles para todos los usuarios de la clase y para todos los métodos de la clase y de cualquier clase que herede de ella. Los componentes públicos conforman la interface entre la clase y el usuario. − Protected section – Todos los componentes declarados en la sección protegida son accesibles para todos los métodos de la clase y de las clases que heredan de ella. Los componentes protegidos conforman la interface entre una clase y todas sus subclases. Debido a que la herencia aún no está activa en el release 4.5B la sección protegida tiene actualmente el mismo efecto que la sección privada. − Private section – Los componentes declarados en la sección privada son sólo visibles en los métodos de la misma clase. Los componentes privados no forman parte de la interface externa de la clase. Encapsulación Las tres áreas de visibilidad son la base de una de las más importantes características de la orientación a objetos, la encapsulación. Cuando se define una clase hay que tener mucho cuidado en el diseño de los componentes públicos, intentando declarar tan pocos como sea posible. Los componentes públicos de las clases globales no pueden ser cambiados una vez que se ha liberado la clase. Por ejemplo, los atributos públicos son visibles externamente, y forman parte de la interface entre un objeto y sus usuarios. Si se quiere encapsular el estado de un objeto completamente no se tiene que ABAP orientado a objetos - Manuel Fernández Fernández-Argüelles 6 ABAP orientado a objetos declarar ningún atributo público. Además de definir la visibilidad de un atributo, se puede proteger también de los cambios usando la adición READ-ONLY. Visión de conjunto CLASS c1 DEFINITION. PUBLIC SECTION. DATA: a1 … METHODS: m1 … EVENTS: e1 … PROTECTED SECTION. DATA: a2 … METHODS: m2 … EVENTS: e2 … PRIVATE SECTION. DATA: a3 … METHODS: m3 … EVENTS: e3 … ENDCLASS. CLASS c1 IMPLEMENTATION. METHOD m1 … ENDMETHOD. METHOD m2 … ENDMETHOD. METHOD m3 … ENDMETHOD. ENDCLASS. Esta sería la estructura de la parte de declaración y la parte de implementación de una clase local c1. Componentes públicos Interface entre la clase y sus usuarios Componentes protegidos Interface con las subclases de la clase c1 Componentes privados No visibles externamente, completamente encapsulados en la clase Implementación de los métodos Tienen acceso completo a todos los componentes de la clase EJEMPLO DE UNA CLASE LOCAL De la misma manera que vimos el ejemplo del contador para el grupo de funciones se puede realizar lo mismo con una clase: CLASS C_CONTADOR DEFINITION. PUBLIC SECTION. METHODS: FIJAR_CONTADOR IMPORTING VALUE(FIJAR_VALOR) TYPE I, INCREMENTAR_CONTADOR, OBTENER_CONTADOR EXPORTING VALUE(OBTENER_VALOR) TYPE I. PRIVATE SECTION. DATA CONT TYPE I. ENDCLASS. CLASS C_CONTADOR IMPLEMENTATION. METHOD FIJAR_CONTADOR. CONT = FIJAR_VALOR. ENDMETHOD. METHOD INCREMENTAR_CONTADOR. ADD 1 TO CONT. ENDMETHOD. ABAP orientado a objetos - Manuel Fernández Fernández-Argüelles 7 ABAP orientado a objetos METHOD OBTENER_CONTADOR. OBTENER_VALOR = CONT. ENDMETHOD. ENDCLASS. La clase c_contador contiene tres métodos públicos, fijar_contador, incrementar_contador y obtener_contador. Cada uno de ellos trabaja con el atributo privado cont. Dos de estos métodos tienen parámetros de entrada y de salida. Estos son los que forman la interface de la clase. El atributo cont no es visible directamente. Más adelante se verá como crear instancias de una clase para poder así utilizar la clase en el programa. UTILIZACIÓN DE OBJETOS Objetos Los objetos son instancias de las clases. Cada objeto tiene una identidad propia y tiene sus propios atributos. Todos los objetos transitorios residen en el contexto de una sesión interna (área de memoria de un programa ABAP). Los objetos permanentes en la base de datos aún no están disponibles (documentación del release 4.6B). Una clase puede tener un número indefinido de objetos (instancias). Referencias a objeto Las referencias a objeto se usan para acceder a un objeto desde un programa ABAP. Las referencias a objeto son punteros a los objetos. En ABAP los objetos están siempre contenidos en variables referenciadas. 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 directamente. Las variables referenciadas en ABAP son tratadas como cualquier otro objeto de datos elemental. 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, comparable a los tipos de datos para las estructuras o para las tablas internas. El tipo de datos completo no está definido hasta la declaración en el programa ABAP. El tipo de datos de la variable referenciada determina como el programa actúa 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á mas adelante). Las referencias a clases se definen usando la siguiente adición: … TYPE REF TO <class>. Esta adición se usa en las sentencias TYPES o DATA. Una variable referenciada de este tipo se llama variable referenciada a clase o referencia a clase simplemente. Una referencia a clase <cref> permite al usuario crear una instancia, o sea un objeto, de la clase y acceder a un componente visible de la siguiente manera: cref->comp ¿Cómo 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 <obj> a la clase <class>, se puede crear el objeto usando la sentencia CREATE OBJECT <cref>. Esta sentencia crea una instancia de la clase <class>, y la variable referenciada <cref> contiene la referencia al objeto. Acceder a los componentes de un objeto Los programas sólo pueden acceder a los componentes 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 llamar al método meth: CALL METHOD ref->meth. Para los componentes estáticos (independientes de instancia, sólo dependientes de clase) se puede usar tanto el nombre de la clase como la variable referenciada. También es posible acceder a los componentes estáticos de una clase antes de que un objeto de la clase haya sido creado. La sintaxis, siendo class la clase es la siguiente: ABAP orientado a objetos - Manuel Fernández Fernández-Argüelles 8 ABAP orientado a objetos − Para acceder al atributo estático attr: class->attr. − Para llamar al método estático meth: CALL METHOD class->meth. Dentro de una clase se puede acceder también a los componentes individuales mediante la referencia a sí mismo ME: − Para acceder al atributo attr en la propia clase: me->attr. − Para llamar al método meth en la propia clase: CALL METHOD me->meth. CREAR MAS DE UNA INSTANCIA DE UNA CLASE En un programa se pueden crear cualquier número de objetos de una misma clase. Estos objetos son completamente independientes unos de otros. Cada uno tiene su propia identidad dentro del programa y sus propios atributos. Cada sentencia CREATE OBJECT genera un nuevo objeto, cuya identidad está completamente definida por su referencia al objeto. Asignar referencias Se pueden asignar referencias a distintas variables referenciadas usando la sentencia MOVE. De esta manera se puede tener las referencias en varias variables referenciadas apuntando al mismo objeto. Cuando se asigna una referencia a una variable referenciada distinta, sus tipos deben ser compatibles. Cuando se usa la sentencia MOVE o el operador de asignación = para asignar variables referenciadas, el sistema debe ser capaz de reconocer en el chequeo de la sintaxis si la asignación va a ser posible. Esto mismo se aplica cuando se pasan variables referenciadas como parámetros a procedimientos. Si escribimos la sentencia cref1 = cref2, las dos referencias tienen que tener el mismo tipo, esto es, tienen que referirse a la misma clase, o bien la clase de cref1 tiene que ser la clase predefinida como vacía, OBJECT. La clase OBJECT no tiene componentes y tiene la misma función para las variables referenciadas que el tipo de datos ANY para las variables normales. Las variables referenciadas con el tipo OBJECT pueden funcionar como contenedoras para pasar referencias. De cualquier manera, nunca pueden ser usadas para acceder a objetos. Tiempo de vida de un objeto Un objeto existe mientras se esté usando en el programa, lo que quiere decir que existe siempre que al menos una referencia apunte hacia él, o al menos un método del objeto esté registrado como método manejador de eventos. Desde el momento en que deja de haber referencias a un objeto y ninguno de sus método es un método manejador de eventos, el objeto es borrado de la memoria automáticamente. El ID del objeto queda libre para ser usado por un nuevo objeto. OBJETOS COMO INSTANCIAS DE UNA CLASE Clase C1 Comp. Comp. privados públicos Implementación de métodos Comp. protegidos SESIÓN INTERNA DE UN PROGRAMA ABAP Instancia 1, Clase C1 Comp. Comp. privados Instancia 2, Clase C1 públicos Comp. Comp. privados Instancia 3, Clase C1 Implementación públicos Comp. Comp. privados de métodos Implementación públicos Comp. protegidos de métodos Implementación Comp. protegidos de métodos Comp. protegidos ABAP orientado a objetos - Manuel Fernández Fernández-Argüelles 9

See more

The list of books you might like