ABAP Objects_ Manual

download ABAP Objects_ Manual

of 87

description

manual de ABAP Objects

Transcript of ABAP Objects_ Manual

  • CORT480 - Programacin ABAP Orientada a Objetos

  • Contenido IntroduccinAnlisis y DiseoPrincipiosGeneralizacin / EspecializacinEventosExcepcionesCasos Prcticos

  • Objetivos

    Comprender los siguientes principios:ClasesHerenciaInterfacesPolimorfismoEventosExcepciones

    Conocer objetos standares utililes a utilizar en proyectos

  • 1. Introduccin

    Programacin procedural

    Programacin Orientada a Objetos

  • 1. Introduccin Programacin ProceduralProgramacin Procedural:Las funciones se definen independientemente de las estructuras de datosSe accede de forma directa a los datos

    Estructura de un programa ABAP:Declaracin de DatosLlamadas a Subrutinas / mdulosDefinicin de Subrutinas

  • 1. Introduccin Programacin Orientada a ObjetosQu son los objetos?Son una abstraccin del mundo realUnidades compuestas de datos y funciones pertenecientes a dichos datos

    AAvinData

  • 1. Introduccin Modelo de programacin OODataClasesDa una descripcin del objetoEstablece los tipos de estados(Atributos) y el desarrollo de los Estados(Mtodos)ObjetosReflejo de la vida realInstancias especificas de una clase. Ejemplo: Boeing 727lcl_AvinNombre PlazasSubir_pasajerosDespegarData

  • 1. Introduccin Ventajas de la OOP (I)Consistencia durante el proceso de desarrollo:El lenguaje utilizado durante el proceso de desarrollo es uniforme, lo ideal sera que las modificaciones realizadas durante la fase de implementacin se reflejarn directamente en el diseo

    EncapsulacinLa implementacin de un objeto es oculta para los dems objetos del sistema,as que no se pueden hacer suposiciones sobre el estado interno de un objeto y por lo tanto no surgen dependencias sobre las implementaciones especificas

  • 1. Introduccin Ventajas de la OOP (II)Polimorfismo:Un objeto en diferentes clases puede tener diferentes reacciones a un mismo mensaje

    Herencia:Define la implementacin de la relacin entre clases, en la cual una clase (la subclase) comparte la estructura (atributos) y el comportamiento (mtodos) definidos en una o ms clases (superclases). Nota: En ABAP solo est permitida la herencia simple

  • 1. Introduccin ABAP Objects

    Extensin Compatible de ABAPLas sentencias de ABAP objects se pueden usar en los programas convencionales de ABAP, y viceversaABAP objects no es un lenguaje nuevo, ha sido desarrollado como una extensin de ABAP

  • 2. Anlisis y diseo

    UML

    Diagramas de Clases

    Asociaciones

  • 2. Anlisis y diseo Qu es UML?Un lenguaje de Modelado Orientado a Objetos Unified Modeling Languaje

    Un Lenguaje y forma de notacin para la especificacin, visualizacin y documentacin de Modelos de software de sistemasVarios tipos de Diagramas

    Un estndar Global

  • 2. Anlisis y diseo Diagramas de ClasesPunto de vista esttico del ModeloElementosClasesObjetosSu estructura internaAtributosMtodosSu relacin con otros elementosGeneralizacin/EspecializacinAsociacin

  • 2. Anlisis y diseo Diagrama de Clases: Ejemplolcl_flightlcl_flightbookinglcl_flightcustomerlcl_seatlcl_airplanelcl_winglcl_cargo_airplanelcl_passenger_airplane10..*0..*1111..*11..*11

  • 2. Anlisis y diseo Asociaciones (1)La Asociacin describe las relaciones entre clases. La relacin especifica de objetos de las clases se llama vinculo o conexin de objetos. Por lo tanto las conexiones entre objetos sern las realizaciones de las asociaciones.Las asociaciones pueden ser recursivas, es decir, las clases pueden tener asociaciones con ellas mismas. Las asociaciones recursivas son usadas para describir las conexiones de los objetos de la misma clase.Las asociaciones tienen dos direcciones y cada direccin puede tener un nombreCada direccin tiene una cardinalidad que muestra cuantos objetos pueden estar en conexin con el objeto origen

  • 2. Anlisis y diseo Tipos de asociacionesAgregacinTipos Especiales de asociacionesRelacin completaComposicinTipo especial de AgregacinDepende de la Existencia para para la relacin completaSmbolo de Composicin Smbolo de AgregacinAgregacin y composicin

  • 2. Anlisis y diseo Tipos de AsociacionesEspecializacin y Generalizacin

  • 3. Principios

    ObjetosClasesAtributosMtodosEjercicios

  • 3. Principios ObjetosQu caracteriza a un objeto?IdentidadStatus (atributos)Comportamiento (mtodos)

    Cada objeto generado a partir de una clase tiene su propia identidad, es decir cada objeto es nico.

    Esta identidad del objeto es la caracterstica que nos permite diferenciar unos objetos de otros. Pese a que dos objetos tuvieran idntico valor para todos sus atributos, seran distintos objetos ya que cada objeto tiene su propio nombre. Ej: Tenemos 2 tazas de caf idnticas.Pese a que se ven idnticas son dos objetos distintos

  • 3. Principios ClasesClases: Plantillas para los objetosAtributos: Son los datos y representan el status del objeto

    Componentes de una clase:Mtodos: Cdigo ejecutable, determinan el comportamiento del objeto

  • 3. Principios Clases Locales y GlobalesLas clases Globales se definen en el generador de clases en el ABAP Workbench (SE24) y todos los programas ABAP pueden acceder a las clases globales.

    Las clases locales se definen en un programa ABAP y solo pueden ser invocadas desde los programas en que se definen.

  • 3. Principios AtributosLos atributos describen la informacin que puede ser almacenada en los objetos generados a partir de una claseEstos atributos pueden ser de cualquier tipo: - Elementos de datos, estructuras, tablas internas, - Cualquier tipo de datos ABAP (char, enteros,) - Referencias a otros objetos - Referencias a Interfaces

  • 3. Principios Atributos: DeclaracinCLASS DEFINITION. TYPES: . CONSTANTS: constant TYPE VALUE .

    DATA: variable1 TYPE , variable2 TYPE , variable3 LIKE , variable4 TYPE REF TO , variable5 TYPE REF TO , variable6 TYPE VALUE , variable7 TYPE READ-ONLY. CLASS-DATA: . ENDCLASS.

  • 3. Principios Atributos: Visibilidad Atributos PblicosSon accesibles (usuarios y mtodos).Acceso directo.CLASS lcl_airplane DEFINITION. PUBLIC SECTION. DATA: name TYPE string. PRIVATE SECTION. DATA: weigth TYPE saplane-weigth.ENDCLASS.CLASS lcl_airplane DEFINITION. PUBLIC SECTION. . PRIVATE SECTION. DATA: weigth TYPE saplane-weigth, name TYPE string.ENDCLASS.Atributos privadosNo son accesibles desde fuera de la propia clase. Se ven y se cambian desde la propia clase.

    MEJOR

  • 3. Principios Atributos de la clase y del objetoCLASS lcl_airplane DEFINITION. PUBLIC SECTION. PRIVATE SECTION. DATA: weigth TYPE saplane-weigth, name TYPE string. CLASS-DATA: count TYPE I.ENDCLASS.Existen dos tipos de atributos: Los atributos del objeto (Instance attributes) son aquellos que existen para cada uno de los objetos generados por una determinada clase. Es decir, para cada objeto estos atributos pueden tener valor propio. Estos objetos se declaran con la sentencia DATA:Los atributos de la clase (Static attributes) existen slo una vez para toda la clase. Todos los objetos de la clase tendrn el mismo valor para cada uno de los atributos definidos de esta manera. De tal modo, que si en un objeto se cambia el valor de alguno de estos atributos, el cambio afectara a todos los objetos de la clase, que adoptaran para el atributo cambiado ese nuevo valor. Se definen mediante la sentencia: CLASS-DATA.

  • 3. Principios MtodosLos mtodos son procedimientos internos de la clase que determinan cmo se va a comportar el objeto. Tienen acceso a todos los atributos de la clase y por tanto pueden realizar cambios en el estado de los atributos.

    La Interface de los mtodos son sus parmetros, que hacen posible que los mtodos puedan recibir valores cuando son llamadas y que puedan devolver valores cuando devuelvan el control al programa de llamada.

  • 3. Principios Mtodos: DefinicinCLASS IMPLEMENTATION. METHOD . .. ENDMETHOD.ENDCLASS.

  • 3. Principios Mtodos: VisibilidadMtodos Pblicos-Se les puede llamar desde fuera de la clase.

    Mtodos privados-No se les puede llamar desde fuera de la propia clase.- Se ven y se cambian desde la propia clase.

    CLASS lcl_airplane DEFINITION. PUBLIC SECTION. METHODS: set_name importing im_name. PRIVATE SECTION. METHODS: init_name. DATA: name TYPE string.ENDCLASS.CLASS lcl_airplane IMPLEMENTATION. METHOD: init_name. Name = No Name. ENDMETHOD. METHOD: set_name. Name = im_name. ENDMETHOD.

  • 3. Principios Mtodos: Instance Vs. Static Mtodos del objeto (Instance methods)Pueden utilizar tanto atributos de la clase como propios del objeto en la parte de implementacin del mtodo.Se puede acceder a ellos mediante el nombre del objetoMtodos de la clase (Static methods)Slo pueden utilizar componentes de la clase en la parte de implementacin del mtodo.Se puede acceder a ellos mediante el nombre de la claseCLASS lcl_airplane DEFINITION. PUBLIC SECTION. METHODS: set_name IMPORTING im_name TYPE string.PRIVATE SECTION. DATA: name TYPE string. CLASS-DATA: count type I.ENDCLASS.CLASS lcl_airplane DEFINITION. PUBLIC SECTION. CLASS-METHODS: get_counter RETURNING VALUE (re_count) TYPE I.PRIVATE SECTION. DATA: name TYPE string. CLASS-DATA: count type I.ENDCLASS.

  • 3. Principios Creacin de ObjetosPara poder crear objetos, y para poder acceder a los objetos ya existentes, es necesario la utilizacin de variables de referencia.

  • 3. Principios Creacin de objetos y asignacionesAsignacin de referencias:DATA: airplane TYPE REF TO lcl_airplane, airplane_tab TYPE TABLE OF REF TO lcl_airplane.CREATE OBJECT airplane EXPORTING im_name = LH_Berlin...APPEND airplane TO airplane_tab.Airplane_tabCREATE OBJECT airplane EXPORTING im_name = LH_Paris...APPEND airplane TO airplane_tab.Airplane_tabLOOP AT TO airplane_tab INTO airplane.*work with the instanceENDLOOP.Name:LH_BerlinWeigth: 0KgName: LH_ParisWeigth: 0KgName:LH_BerlinWeigth: 0Kg

  • 3. Principios Mtodos

    Cada objeto se comporta de cierto modo. Este comportamiento est determinado por sus mtodos. Hay 3 tipos de mtodos:Mtodos que provocan un comportamiento y no pasan valoresMtodos que pasan un valorMtodos que pasan o cambian varios valores.

    Un objeto que requiere un servicio de otro objeto enva un mensaje a otro objeto para que le proporcione el servicio. Este mensaje llama a la operacin que se ejecutar. La implementacin de esta operacin conocida como MTODO.

  • 3. Principios Llamando a mtodosLos mtodos pblicos se pueden llamar desde fuera de la clase de varios modos:Mtodos de instancia (objeto) se llaman usando:CALL METHOD -> Mtodos estticos (de clase) se llaman usando:CALL METHOD => Si se llama a un mtodo esttico desde una clase se puede omitir el nombre de la clase. Cuando se llama a un mtodo de instancia desde otro mtodo de instancia, se puede omitir el nombre de la instancia. Se ejecutar automaticamente el mtodo para el objeto actual.

  • 3. Principios Llamadas a mtodos: EjemploMtodos del OBJETO: CALL METHOD -> (instance method) EXPORTING = IMPORTING = CHANGING = RECEIVING = EXCEPTIONS = . Mtodos de la CLASE: CALL METHOD => (static method) EXPORTING = .DATA: airplane TYPE REF TO lcl_airplane.DATA: fuel_consuptionTYPE ty_fuel,DATA: count_planes type i.CREATE OBJECT airplane.CALL METHOD airplane-> est_fuel_con EXPORTING (im_distance = 1500= RECEIVING re_fuel = fuel_consuption.CALL METHOD lcl_airplane=>get_count RECEIVING re_count = count_planes.

  • 3. Principios Llamadas a mtodos: Ejemplo (II)CLASS lcl_airplane DEFINITION.PUBLIC SECTION.METHODS: est_fuel_conIMPORTING im_distance TYPE ty_distanceRETURNING VALUE(re_fuel) TYPE ty_fuel,CLASS-METHODS: get_count RETURNING VALUE(re_count) TYPE i.ENDCLASS.DATA: plane1TYPE REF TO lcl_airplane, plane2TYPE RET TO lcl_airplane, fuel_consuptionTYPE ty_fuel, count_planesTYPE i.**CALL METHOD lcl_airplane ->get_count RECEIVING re_count = count_planes.Count_planes=lcl_airplane=>get_count( ).Fuel_consuption = plane1->est_fuel_con (1500)En ciertos casos se puede utilizar una forma abreviada para llamar al mtodo:

  • 3. Principios ConstructoresSon mtodos especiales para que al crear un objeto, este objeto tenga un estado inicial definido.Slo tienen parmetros import y excepciones.El mtodo CONSTRUCTOR es uno para toda la clase.Se ejecuta una vez por objeto creado para la claseMETHODS CONSTRUCTOR IMPORTING EXCEPTIONS .lcl_airplaneNameweigthcountconstructorCREATE OBJECTName: LH BerlinWeigth: 30000Kg

  • 3. Principios Constructor: definicin

  • 3. Principios Constructor: EjemploCLASS lcl_airplane DEFINITION. PUBLIC SECTION. METHODS CONSTRUCTOR IMPORTING im_name TYPE string im_weight TYPE I. PRIVATE SECTION. DATA: name TYPE string, weight type I. CLASS-DATA count TYPE I.ENDCLASS. CLASS lcl_airplane IMPLEMENTATION. METHOD CONSTRUCTOR. Name = im_name. Weight = im_weight. Count = count + 1. ENDMETHOD.ENDCLASS.

  • 3. Principios Constructores estticos- Se establecen antes de acceder a la clase por primera vez.- Slo se ejecutan una vez por programa.CLASS DEFINITION. PUBLIC SECTION. CLASS-METHODS CLASS_CONSTRUCTOR.ENDCLASS.

    CLASS IMPLEMENTATION. METHOD CLASS_CONTRUCTOR ENDMETHOD.ENDCLASS.

  • 3. Principios EjerciciosAl finalizar estos ejercicios sereis capaces de:Crear clasesInstanciar objetosLlamar mtodosCrear un constructor para una clase y crear un objeto utilizando el constructor.

  • 4. Generaliz. / Especializacin

    HerenciaCastPolimorfismoInterfaces

  • 4. Generaliz. / Especializacin HerenciaLcl_airplane-name-weight.+ get_fuel_level ( ): ty_level+ estimate_fuel_consuption ( ) : i..

  • 4. Generaliz. / Especializacin Herencia: ConceptoLa HERENCIA es una relacin por la cul una clase (subclase) hereda todas las caractersticas de otra clase (superclase).En la subclase se pueden aadir nuevos componentes (atributos, mtodos,) y modificar los mtodos heredados, dotndolos a estos con su propia implementacinLa herencia se basa en el concepto de la similitud entre clases. En el ejemplo, las similitudes entre el avin de pasajeros y el de carga se extraen de la superclase(aviones). De este modo esos componentes comunes solo se definen una vez(en la superclase) y son automticamente heredados por las distintas subclasesEn SAP no es posible la herencia mltiple (solo se permite un nivel de herencia)

  • 4. Generaliz. / Especializacin Herencia: DefinicinCLASS lcl_airplane DEFINITION. PUBLIC SECTION. METHODS: get_fuel_level RETURNING VALUE (re_level) TYPE ty_level.

    PRIVATE SECTION. DATA: name TYPE string, weight type i.

    ENDCLASS. CLASS lcl_cargo_airplane DEFINITION INHERITING FROM lcl_airplane. PUBLIC SECTION. METHODS: get_cargo RETURNING VALUE (re_cargo) TYPE ty_cargo. PRIVATE SECTION.

    DATA: cargo TYPE ty_cargo.ENDCLASS.

  • 4. Generaliz. / Especializacin Superclases SubclasesLos componentes comunes solo estn presentes una vez (en la superclase).Los nuevos componentes declarados en la superclase estn automticamente disponibles en las subclasesSe reduce con ello considerablemente la cantidad de cdigoLas subclases son extremadamente dependientes de las superclases.Se debe tener un profundo conocimiento de cmo estn implementadas las superclases a la hora de definir una clase como subclase de estas

  • 4. Generaliz. / Especializacin Herencia y visibilidadEl concepto de herencia nos proporciona una extensin en el concepto de visibilidad. Este nuevo concepto es un concepto intermedio entre el concepto de publico y privado. As se pueden definir componentes como protegidos, lo que les permite ser visibles y poder ser utilizados por todas las clases que sean subclases de la clase en la que se definen.Las subclases no pueden acceder a los componentes privados de las superclases. Esto es una ventaja a la hora de querer cambiar una superclase ya que esto no afecta a las subclases

  • 4. Generaliz. / Especializacin Herencia y visibilidadComponentes Pblicos - Totalmente Visibles. - Permiten accesos directos.

    Componentes Protegidos- Slo son visibles dentro de sus clases y de sus subclases.

    Componentes Privados- Slo visibles dentro de la clase.- No accesibles desde fuera de la clase, incluso desde sus subclases.CLASS lcl_airplane DEFINITION. PUBLIC SECTION. METHODS get_name RETURNING VALUE (re_name) TYPE string. PROTECTED SECTION. DATA: tank TYPE string. PRIVATE SECTION. DATA: name TYPE string.ENDCLASS.Lcl_airplane# tank : lcl_tank- name : string+ get_name() : string+ public# protected- private

  • 4. Generaliz. / Especializacin La Herencia y el Constructor (I)CLASS lcl_cargo_airplane DEFINITION INHERITING FROM lcl_airplane. PUBLIC SECTION. METHODS: CONSTRUCTOR IMPORTING im_name TYPE string im_cargo TYPE ty_cargo. PRIVATE SECTION.

    DATA: cargo TYPE ty_cargo.ENDCLASS.CLASS lcl_cargo_airplane IMPLEMENTATION.METHOD CONSTRUCTOR. CALL METHOD SUPER->CONSTRUCTOR EXPORTING im_name = name.

    Cargo = im_cargo.

    ENDMETHOD. ENDCLASS.

  • 4. Generaliz. / Especializacin La Herencia y el Constructor (II)DATA: ref2 TYPE REF TO lcl_2, ref3 TYPE REF TO lcl_3.CREATE OBJECT ref2 EXPORTING im = 100.CREATE OBJECT ref3 EXPORTING im_1 = 100 im_2 = 1000.Lcl_1# a1 : i+ constructor(im_a1:i)Lcl_2

    Lcl_3# a2:: i+ constructor( im_a1:i, im_a2:i )La clase a la que pertenece la instacia a crear tiene un constructorRellena sus parmetrosLa clase a la que pertenece la instancia a crear no tiene un constructorBusca en el rbol de herencia la siguiente superclase con un constructor. Rellena los parmetros.

  • 4. Generaliz. / Especializacin Redefinicin de mtodosLos mtodos heredados se pueden redefinir en las subclasesLos mtodos redefinidos se deben implementar in las subclasesEn la redefinicin no se pueden cambiar los parmetros del mtodoSolo se pueden redefinir mtodos de instancia (pblicos y protegidos), no los mtodos estticos.

  • 4. Generaliz. / Especializacin Redefinicin mtodos: Sintaxis CLASS lcl_airplane DEFINITION. PUBLIC SECTION. METHODS: estimate_fuel IMPORTING im_distance TYPE ty_distance RETURNING VALUE (re_fuel) TYPE ty_fuel. ENDCLASS.

  • 4. Generaliz. / Especializacin Clases / Mtodos FinalesCLASS lcl_passenger_airplane DEFINITION FINAL INHERITING FROM lcl_airplane. ..ENDCLASS.Clases Finales: no pueden tener subclases.CLASS lcl_passenger_airplane DEFINITION INHERITING FROM lcl_airplane. PUBLIC SECTION. METHODS estimate_number_of_free_seats FINAL.ENDCLASS.Mtodos Finales: no pueden redefinirse en las subclases.

  • 4. Generaliz. / Especializacin Narrowing CastLas instancias de una subclase se pueden utilizar en cualquier contexto en el que aparece la superclaseDATA: airplane1 TYPE REF TO lcl_airplane, cargo_airplane TYPE REF TO lcl_cargo_airplane.CREATE OBJECT cargo_airplane. Main memoryairplane1Cargo_airplaneName:LH BerlinWeight: 30000Kg100 Tairplane = cargo_airplane. Main memoryairplane1Cargp_airplaneName:LH BerlinWeight: 30000Kg100 T

  • 4. Generaliz. / Especializacin Widening CastDATA: airplane TYPE REF TO lcl_airplane, airplane_tab TYPE TABLE OF REF TO lcl_airplane, cargo_airplane TYPE REF TO lcl_cargo_airplane, passenger_airplane TYPE REF TO lcl_passenger_airplane.

    Airplane_tabName:LH BerlinWeight: 30000Kg100 TName:LH ParisWeight: 25000Kg150 passengersLOOP AT airplane_tab INTO airplane.

    * Problem: Is this really a cargo airplane?

    * Determine the max cargo

    ENDLOOPLOOP AT airplane_tab INTO airplane. TRY. cargo_airplane ?= airplane.* determine max cargo

    CATCH cx_sy_move_cast_error.* react on that cast error

    ENDTRY.ENDLOOP

  • 4. Generaliz. / Especializacin Tipos estticos y dinmicosEl tipo esttico de una variable de referenciaSe establece utilizando TYPE REF TOPermanece constante durante la ejecucin del programaDetermina qu atributos y mtodos se pueden direccionarEl tipo dinmico de una variable de referenciaSe establece por asignacinPuede cambiar durante la ejecucin del programaDetermina el cdigo que se ejecutar en los mtodos redefinidos

  • 4. Generaliz. / Especializacin Semntica de la herencia

    Los componentes heredados se deben comportar en la subclase exactamente igual que lo hacen en la superclase para todos los usuariosLos mtodos redefinidos deben mantener la misma semntica de los componentes heredadosLa herencia es solo para generalizacin/especializacin:Se debe evitar la herencia de cdigo

  • 4. Generaliz. / Especializacin PolimorfismoObjetos de diferentes clases reaccionan de forma diferente a la misma llamada de mtodos.Para hacer esto, las clases implementan el mismo mtodo de diferentes formas.Esto se puede hacer usando la herencia, redefiniendo un mtodo de la superclase en la subclase e implementndolo de forma diferente.

    Cuando una instancia recibe un mensaje para ejecutar un mtodo, el mtodo se ejecuta si ha sido implementado en la clase a la que pertenece la instancia.Si la clase no ha implementado el mtodo, solo lo ha heredado y no lo ha redefinido, entonces busca hacia arriba en el rbol de herencia hasta que encuentra la implementacin y lo ejecuta

  • 4. Generaliz. / Especializacin Polimorfismo: EjemploDATA: cargo_plane TYPE REF TO lcl_cargo_airplane. passenger_plane TYPE REF TO lcl_passenger_airplane, plane_listTYPE TABLE OF REF TO lcl_airplane.CREATE OBJECT: cargo_plane.APPEND cargo_plane TO plane_list.CREATE OBJECT passanger_planeAPPEND passanger_airplane TO plane_listMain memoryCargo_airplanePassenger_airplanePlane_list1243

  • 4. Generaliz. / Especializacin InterfacesLas Interfaces son puntos de contacto externos para las clases; definen los parmetros y los mtodos a utilizar, pero sin implementar las reglas de negocio (slo contienen declaracin)Es necesario implementarlas en cada una de las clases que las referencian.Se consigue trabajar de un mismo modo con diferentes objetos/clases. (polimorfismo)Aumentan el alcance de las clases en la que estn definidas

  • 4. Generaliz. / Especializacin Interfaces (II) Para una Interface se definen sus componentes del mismo modo que se haca con las clases. Sin embargo en las Interfaces no existe el concepto de zonas de visibilidadLas Interfaces se encuentran implementadas en clases, donde: El nombre de la Interface se lista en la zona de declaracin de la clase. Esta tiene que estar definida en la parte publica de la clase Las operaciones definidas en la Interface se implementan como mtodos de la clase Los componentes de la clase estn disponibles a la clase en el momento que se define la Interface en la claseLos componentes de la Interface se direccionan con el operador (~)

  • 4. Generaliz. / Especializacin Interfaces: DefinicinINTERFACE lif_document.DATA: author TYPE REF TO lcl_author.METHODS: print, display.ENDINTERFACE. CLASS lcl_text_document DEFINITION. PUBLIC SECTION. INTERFACES lif_document. METHODS: display.ENDCLASS.CLASS lcl_text_document IMPLEMENTATION. METHOD lif_document~print. ENDMETHOD. METHOD lif_document~display. ENDMETHOD. METHOD display. ENDMETHOD.ENDCLASS.

  • 4. Generaliz. / Especializacin Interfaces: Business Add InsLas Business Add Ins son Interfaces que proporciona SAP para que se implementen las clases que utilicen esas interfaces. La idea es que funcionen como las user-exits, la nica diferencia es que ahora en lugar de codificar cdigo ABAP tradicional hay que implementar todo en una clase que contenga la implementacin de dicha interface

  • 4. Generaliz. / Especializacin Interfaces vs HerenciaPolimorfismo y herencia:Solo se puede utilizar entre objetos de clases que estn conectadas por una jerarqua de herencia

    Polimorfismo y Interfaces:Se pueden utilizar con objetos de cualquier clase, siempre que esas clases tienen implementados los correspondientes Interfaces

  • 4. Generaliz. / Especializacin EjerciciosAl finalizar estos ejercicios sereis capaces de:Definir subclasesRedefinir mtodos de la superclase en la subclaseImplementar llamadas a mtodos Definir e implementar Interfaces

  • 5. Eventos

    Disparar y manejar eventosCoordinacin en el manejo de eventosActivacin/Desactivacin de los mtodos que manejan los eventos.Visibilidad de los eventos.

  • 5. Eventos Caractersticas y usoCuando se desata un evento (RAISE EVENT), el objeto anuncia que se ha producido un cambio de estado, o anuncia que determinado estado se ha alcanzadoEn el ejemplo, el objeto de la clase (lcl_airplane) desencadena el evento (touched_down) en el momento que el avin aterriza (altitude = 0). Otras clases perciben esto y lo procesan. As, el controlador areo marca que el avin ya a aterrizado y los pasajeros se quitan el cinturn de seguridadPassengerIF altitude = 0.RAISE EVENT touched_down.ENDIF.Miller

  • 5. Eventos Disparar y manejar eventos (I)En ABAP Objects hay ciertos mtodos que se conocen como disparadores (triggers) y otros que se conocen como manejadores (handlers). Los triggers son los mtodos que disparan un evento, mientras que los handlers son los mtodos que se ejecutan cuando ocurre un evento Para disparar un evento una clase tiene que:Declarar el evento en la parte declarativa: Los eventos se declaran en la parte declarativa de una clase o en una interface. Disparar el evento en uno de sus mtodos. Un evento dependiente de instancia en una clase puede ser disparado por cualquier mtodo en la clase.Los eventos estticos son disparados por mtodos estticos Los eventos se usan para ejecutar una serie de mtodos. Estos mtodos tienen que:estar definidos como eventos manejadores (handler) de ese evento. Una clase puede contener mtodos manejadores de eventos para eventos tanto de su propia clase como de otras clases. estar registrados en tiempo de ejecucin para el evento.

  • 5. Eventos Disparar y manejar eventos (II)Declaracin de mtodos manejadores de eventosUna clase puede contener mtodos manejadores de eventos para eventos tanto de su propia clase como de otras clases La interface de un mtodo manejador de eventos slo puede contener parmetros formales definidos en la declaracin del evento. Los atributos de los parmetros tambin son adoptados por el evento. El mtodo manejador de eventos no tiene por que usar todos los parmetros pasados en la sentencia RAISE EVENTRegistro de mtodos manejadores de eventosPara permitir a un mtodo manejador de eventos reaccionar a un evento, se tiene que determinar en tiempo de ejecucin el disparador al cual va a reaccionar. Se definir mediante la sentencia SET HANDLERHay cuatro tipos diferentes de eventos:Eventos dependientes de instancia declarados en una claseEventos dependientes de instancia declarados en una interfaceEventos estticos declarados en una claseEventos estticos declarados en una interface

  • 5. Eventos DefinicinCLASS DEFINITION. EVENTS: EXPORTING VALUE ( ) TYPE type.

    CLASS IMPLEMENTATION. METHOD . RAISE EVENT EXPORTING VALUE = act_par>.CLASS lcl_airplane DEFINITION. PUBLIC SECTION. METHODS arrive_at_airport. EVENTS touched_down EXPORTING VALUE (ex_name) TYPE string. PRIVATE SECTION. DATA: name TYPE string.ENDCLASS.

    CLASS lcl_airplane IMPLEMENTATION. METHOD arrive_at_airport. . RAISE EVENT touched_down EXPORTING ex_name = name. ENDMETHOD.ENDCLASS.

  • 5. Eventos Gestin: puntos clave Tanto eventos estticos como de instancia se pueden lanzar desde mtodos de instanciaEn mtodos estticos solo se pueden lanzar eventos estticosLos eventos solo pueden tener parmetros EXPORTING que se deben pasar por valorLanzar un evento utilizando la sentencia RAISE EVENT tiene los siguientes efectos:El flujo del programa se interrumpe en ese puntoEl manejador de eventos registra que ese evento se ha llamado y procesadoUna vez que todos los mtodos manejadores de eventos se ha ejecutado, el flujo del programa comienza de nuevoSi un mtodo manejador de eventos vuelve a lanzar un evento, el flujo del programa se interrumpe de nuevo y todos los mtodos manejadores de eventos se ejecutan (bucle)

  • 5. Eventos Gestin: mtodosCLASS DEFINITION. METHODS: FOR EVENT OF / IMPORTING SENDER.CLASS lcl_air_traffic_controller DEFINITION. .. PRIVATE SECTION. METHODS: on_touched_down FOR EVENT touched_down OF lcl_airplane IMPORTING ex_name SENDER.ENDCLASS.

  • 5. Eventos Gestin: activacinCLASS lcl_air_traffic_controller DEFINITION. PUBLIC SECTION. METHODS: add_airplane IMPORTING im_plane TYPE REF TO lcl_airplane. PRIVATE SECTION. METHODS: on_touched_down FOR EVENT touched_down OF ...ENDCLASS.

    CLASS lcl_air_traffic_controller IMPLEMENTATION. METHOD add_airplane. SET HANDLER on_touched_down FOR im_plane ACTIVATION X ENDMETHOD.

    METHOD ENDCLASS.

  • 5. Eventos Gestin: desactivacinCLASS lcl_air_traffic_controller DEFINITION. PUBLIC SECTION. METHODS: add_airplane IMPORTING im_plane TYPE REF TO lcl_airplane. PRIVATE SECTION. METHODS: on_touched_down FOR EVENT touched_down OF lcl_airplane IMPORTING ex_name SENDER.ENDCLASS.CLASS lcl_air_traffic_controller IMPLEMENTATION. METHOD on_touched_down. SET HANDLER on_touched_down FOR im_plane SENDER ACTIVATION SPACE. ENDMETHOD.

    ENDCLASS.

  • 5. Eventos Gestin: caractersticasEl manejo de eventos es secuencialLa secuencia en la que se llaman a los mtodos manejadores de eventos no est definidaLa zona de visibilidad en la que se haya definido el evento va a marcar la visibilidad en la que han de definirse los mtodos que responden al evento

  • 5. Eventos EjerciciosAl finalizar estos ejercicios sereis capaces de:Definir y lanzar eventos

  • 6. Excepciones

    Excepciones predefinidas y excepciones definidas por el usuario.Lanzar, manejar excepciones y passing along.

  • 6. ExcepcionesDefinicinEl trmino excepcin se usa para refererirse a una situacin en la que un programa ABAP no puede continuar con el proceso normal de ejecucin. En ABAP OOP se usan las excepciones basadas en clases (class exceptions), que pueden ser definidas por el usuario, pero existe un amplio rango de clases de excepciones predefinidas.En una situacion de excepcin, sta es representada por una instancia de la clase de excepcin (objeto de excepcin), cuyos atributos contendrn informacin sobre sta situacin de error.Cuando una excepcin de clase tiene lugar, el sistema interrumpe el proceso normal del programa e intenta navegar hasta l metodo que maneje esa excepcin. Si no lo encuentra, tendr lugar un error en tiempo de ejecucin.

  • 6. ExcepcionesClases de excepciones predefinidasTodas las clases predefinidas empiezan por CX_. Se pueden definir clases de excepcin locales.

    GET_SOURCE _POSITION retorna el nombre del programa y la linea dnde tuvo lugar la excepcin y GET_TEXT retorna el texto de la excepcin que se quiere mostrar.

    Se pueden crear diferentes textos para cada clase y especificar desde el programa el texto requerido usando el parmetro TEXTID del metodo CONSTRUCTOR de la instancia.

    El atributo KERNEL_ERRID de CX_ROOT contiene el nombre del correspondiente error en tiempo de ejecucin si se fue el caso (e.g. COMPUTE_INT_ZERODIVIDE cuando el programa intenta dividir por cero).cx_roottextidkernel_errid..get_textget_source_positioncx_no_checkcx_dynamic_checkcx_static_checkcx_sy_arithmetic_overflow_errorcx_sy_arithmetic_errorcx_sy_move_cast_error

  • 6. ExcepcionesGestin de excepcionesTRY. ... CATCH CX_... CX_... ... [INTO r_exc1]. ... CATCH CX_... ... [INTO r_exc2]. ... CLEANUP. ...

    ENDTRY.Cdigo cuyas posibles excepciones se van a tratarCdigo para llamar al mtodo que gestiona la excepcin recogida en las clases y subclases especificadas en la sentencia CATCHCdigo que se ejecutar si la excepcin no fue capturada por un CATCH de los anteriores

  • 6. ExcepcionesGestin de excepciones: EjemploPARAMETERS: int1 TYPE i, int2 TYPE i. DATA: result TYPE i, text TYPE string, r_exc TYPE REF TO cx_root....TRY. result = int1 * int2. WRITE result. CATCH cx_sy_arithmetic_overflow INTO r_exc. text = r_exc->get_text( ). MESSAGE text TYPE I.ENDTRY....Si ocurre un overflow, el sitema lanza la excepcin cx_sy_arithmetic_overflow. En otro caso, se muestra el resultadoSe crea una instancia de la clase de excepcin y el mtodo get_text nos devuelve el texto del mensaje a mostrar.

  • 6. ExcepcionesCreacin de clases de excepcin (I)Atributos con informacin sobre la excepcinTextos para describir la situacin de errorCLASS CX_SOME_EXCEPTION DEFINITION INHERITING FROM CX_STATIC_CHECK. ...ENDCLASS.

    CLASS CX_SOME_EXCEPTION IMPLEMENTATION. ...ENDCLASS

    Exception IDTextcx_rootAn exception has ocurredZCX_WRONG_PLANETYPETipo de avin incorrecto

  • 6. ExcepcionesCreacin de clases de excp. (II)Todos los mtodos se heredan de cx_root aunque se pueden crear mtodos propios. El constructor de instancia se genera automticamente.Se pueden crear atributos propios para detallar ms el error. El sistema se asegura de que el constructor de instancia tiene parametros IMPORTING cuyo nombre es el mismo que el de stos atributos.Los textos de excepcin pueden contener parmetros escribiendo el atributo entre & dentro del texto.Los textos de excepcin se guardan en el OTR (Online Text Repository) junto con sus traducciones.Puesto que una clase puede tener muchos textos de excepcin, se usa el atributo TEXTID junto con el mtodo GET_TEXT para importar el texto deseado.Para cada clase global, se genera un texto por defecto cuyo nombre es el de la propia clase. Los dems textos que se creen necesitan la asignacin de un nombre en el OTR.

  • 6. ExcepcionesLanzar y gestionar una clase de excepcin propiaMETHOD get_technical_atributes. DATA: r_exc TYPE REF TO cx_root, text TYPE string.

    SELECT SINGLE weight FROM plane_tab INTO ex_weight WHERE planetype = im_type. IF sy-subrc NE 0. TRY. RAISE EXCEPTION TYPE zcx_wrong_planetype EXPORTING pl_type = im_type.

    CATCH zcx_wrong_planetype INTO r_exc. text = r_exc->get_text( ). MESSAGE text TYPE I.

    ENDTRY. ENDIF.

    ENDMETHOD.cx_rootzcx_wrong_planetypecx_static_check

  • 6. ExcepcionesPassing along: DefinicinCLASS cl_class DEFINITION. ... METHODS meth IMPORTING EXPORTING RAISING cx_exception....ENDCLASS.

    CLASS cl_class IMPLEMENTATION. ... METHOD meth. ... RAISE EXCEPTION TYPE cx_exception. ENDMETHOD....ENDCLASS.

    REPORT . ... DATA r_obj TYPE REF TO cl_class. ... TRY. r_obj->meth(EXPORTING.... IMPORTING....). CATCH cx_exception. ... ENDTRY.

    ENDCLASS.

    Excepciones que ocurren en un mtodo no tienen que ser gestionadas en l necesariamente; pueden ser gestionadas por el programa que llama a ese mtodo(1)(2)

  • 6. ExcepcionesExcepciones que deben ser declaradas Las excepciones pertenecientes a estas subclases pueden ser gestionadas. Si no se gestionan, son automticamente traspasadas (passing along). Si no se gestionan en ningn nivel producirn un error en tiempo de ejecucin. No se pueden traspasar automticamente usando la sentencia RAISING. No pueden ser declaradas y por tanto no forman parte del chequeo de sintaxis.Algunas de las clases de excepciones predefinidas cuelgan de esta clase.

    cx_rootcx_no_checkcx_dynamic_checkcx_static_checkLas excepciones pertenecientes a estas clases DEBEN ser gestionadas o traspasadas (passing along) usando la sentencia RAISING. En caso contrario se producir un error en tiempo de ejecucin.No forman parte del chequeo de sintaxis y la excepcin no tiene por qu ser declarada.La mayoria de las excepciones predefinidas cuelgan de esta clase.Las excepciones pertenecientes a estas clases DEBEN ser gestionadas o traspasadas (passing along) usando la sentencia RAISING. Forman parte del chequeo de sintaxisActualmente, solo las clases definidas por el usuario cuelgan de esta clase

  • 6. ExcepcionesEjerciciosAl finalizar estos ejercicios sereis capaces de:Crear tus propias clases de excepciones.Definir, lanzar, gestionar y traspasar excepciones.

  • 7. Casos PrcticosDesktop Office Integration:El objetivo de este ejercicio es aprender a utilizar los "container" de SAP para insertar objetos ( documentos office, pginas html....) en SAPALV TreeDemos creadas en SAP (transaccin DWDM )

    Un objeto es nicamente una porcin de cdigo fuente que contiene datos y proporcionan servicios. Los datos constituyen los atributos del objeto. Los servicios que proporcionan el objeto se conocen como mtodos y se asemejan en su funcionamiento a las funciones.Una clase es una entidad terica que describe el comportamiento de un objeto. Un objeto es una instancia en tiempo de ejecucin de una clase.Cada instancia de una clase (objeto) tiene su propia identidad y su propio conjunto de valores para sus atributos,Encapsulacin: Los objetos restringen la visibilidad de sus recursos (atributos y mtodos) al resto de usuarios. Cada objeto posee una interface que determina la manera de interactuar con l. La implementacin del objeto es encapsulada, lo que quiere decir que desde fuera el objeto es invisible, simplemente se usa.El polimorfismo quiere decir que mtodos que se llaman exactamente igual pueden comportarse de manera distinta en clases diferentes. La orientacin a objetos tiene unas estructuras llamadas interfaces que permiten acceder a los mtodos con el mismo nombre en diferentes clases.En SAP no est permitida la herencia mltiple, es decir, una subclase solo puede tener una superclase (un hijo solo puede tener un padre)ABAP Objects es un conjunto de sentencias orientadas a objetos que han sido introducidas dentro del lenguaje ABAP. Esta extensin se basa 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.UML (Unified Modeling Language) es un lenguaje de Modelo estandarizado. Que se usa para la especificacin construccin, visualizacin y documentacin de Modelos de Software de Sistemas y permite una comunicacin uniforme entre varios usuarios.UML no define los pasos en el proceso de desarrollo orientado a ObjetosSAP usa UML como estadarEspecificaciones UML en la Pgina http://www.omg.org

    Los diagramas de clase nos proporcionan un punto de vista esttico del modelo, es decir, las clases con sus atributos y mtodos y como se relacionan entre ellas, pero no nos ofrece la visin de cmo interactan entre ellas, esta visin la dan los diagramas de secuencia.Un diagrama de clases describe los elementos en el Modelo y sus relaciones estticas. Hay dos tipos de relaciones estticas.Asociaciones(por ejemplo un cliente de vuelo reserva un vuelo)Generalizacin/Especializacin (Un avin de carga y un avin de pasajeros son tipos de aviones)Las clases pueden mostrarse con sus atributos en el diagrama de clasesNotacin UML :Una asociacin es representada por una lnea entre los smbolos de clasesLa cardinalidad de cada relacin puede verse al final de cada lneaLas asociaciones pueden tener nombre (Un Verbo un Texto corto), este nombre se escribe en Italic sobre la lnea con una flecha que muestra la direccin. Ambas son opcionales.Cardinalidades Comunes* o 0..* Varios1 Solo 11..* Uno o Ms0..1 Cero o uno

    La agregacin es un tipo especial de asociacin. La agregacin describe un objeto que contiene a otro o que es parte de otro. Un avin contiene Alas. En UML ser representado por un rombo vaco y estar siempre en el lado de la parte entera.La composicin es un tipo especial de Agregacin en el que la parte inferior, es decir, la que es parte del todo no puede existir sin el todo. Por ejemplo; una reserva no puede existir sin el vuelo. En UML se representar como un rombo relleno

    En UML las Generalizaciones y las especializaciones se denotan con flechas que van de la clase subordinada a la superclase.

    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 descripcin abstracta de un objeto. Tambin podemos decir que una clase es un conjunto de instrucciones que tienen como objetivo construir un objeto. Los atributos del objeto estn definidos por los componentes de una clase (atributos, mtodos y eventos), que son los que describen y controlan el comportamiento de los objetos.Datos bsicos para la creacin de clases globales:Creac. Instancia: el valor por defecto es pblico (cualquier usuario puede instanciar la clase), si se selecciona protegido solo la propia clase y sus subclases pueden instanciar la clase. Si se elige privado solo la propia clase puede instanciarse.Final: Si se selecciona final estamos indicando que la clase es la ltima del rbol de herencia y no puede tener subclasesModelado: Si se selecciona el sistema no definir la clase en el pool de clases (R3 Repository)Datos bsicos para la declaracin de atributos:Clase: tipo de atributo, ya sea constante, dependiente de instancia o esttico (compartido por todas las instancias de la clase.Visibilidad: define la visibilidad de los atributos para los usuarios de la clase. Pueden ser pblicos, protegidos y privados. Se recomienda que siempre sean privadosSolo modelado: si se elige esta opcin el sistema no guarda el componente en el pool de clases y no puede ser llamado en tiempo de ejecucin.Slo lectura: mediante esta opcin podemos impedir que el usuario cambie el valor del atributo.Clase tipif: Para especificar la referencia al tipo ABAP. Puede ser TYPE, LIKE, o TYPE REF TO para las referencias a las clases.

    En la declaracin de clases locales:La utilizacin de READ-ONLY significa que el atributo pblico declarado con la sentencia DATA puede leerse desde el exterior pero que para poder cambiar su valor se deben utilizar los mtodos de la clase.

    En este ejemplo todos los objetos de la clase airplane tendrn el mismo valor para el atributo count, mientras que los atributos weight y name podrn tener valores diferentes para cada uno de las instancias (objetos) de la clase.Para crear mtodos es conveniente haber creado antes los atributos de la clase para as poder implementarlos directamente. Datos bsicos para la declaracin de mtodos:Clase: tipo de mtodo, dependiente de instancia o estticoVisibilidad: tipo de mtodo, visible, protegido o privado. Un mtodo privado solo puede llamarse desde dentro de la clase, o sea desde otro mtodo de la clase, mientras que un mtodo protegido slo desde dentro de la misma clase o de la superclase.Solo modelado: si se selecciona esta opcin el sistema no guarda el mtodo en el pool de clases.Para implementar el mtodo hay que posicionarse en la pestaa de mtodos sobre el mtodo que queremos implementar y hacer doble click o elegir cdigo fuente con lo que se accede al editor ABAP.

    Los mtodos son operaciones que cambian los atributos de una clase o interface. Hay dos tipos de mtodos, los mtodos dependientes de instancia, que son aquellos que se refieren a cada instancia particular y los mtodos estticos, que son aquellos compartidos por todas las instancias de una clase. Los mtodos estticos solo pueden usar atributos estticos.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 sesin interna (rea de memoria de un programa ABAP). Una clase puede tener un nmero indefinido de objetos (instancias)Las referencias a objetos se usan para acceder a un objeto desde un programa ABAP. Las referencias a objetos son punteros a objetos. En ABAP los objetos estn siempre contenidos en variables referenciadas.Las variables referenciadas o bien contiene 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 como cualquier otro objetos de datos elemental, por lo que pueden contener una tabla interna o una estructura.En este ejemplo tenemos dos variables de referencia (una de ellas es una tabla interna). La variable airplane contiene la primera vez una referencia al objeto avin LH_Berlin, adems la tabla interna de referencias almacena la referencia a ese mismo objeto. A continuacin la variable airplane contiene la primera vez una referencia al objeto avin LH_Pars, adems se guarda en la tabla interna de referencias tambin la referencia a ese objeto. Cuando se recorre la tabla interna airplane_tab utilizando la variable airplane, sta ltima va apuntando a los objetos cuyas referencias se almacenan en la tabla interna, es decir, primero a LH_Berln y luego a LH_ParsLa manera en la que se llama a un evento depende del mtodo que se trate y desde donde se llame, En la parte de implementacin de una clase se pueden llamar simplemente usando su nombre CALL METHOD . Desde fuera de la clase, podremos llamar slo a los mtodos cuya visibilidad nos permite hacerlo. Los mtodos visibles dependientes de instancia pueden ser llamados desde fuera de la clase usando la sentencia: CALL METHOD ->, donde ref es una variable referenciada cuyo valor apunta a una instancia de clase. Los mtodos visibles estticos pueden ser llamados desde fuera de la clase con la sentencia: CALL METHOD =>En primer lugar se asigna valor a la variable airplane creado un objeto de la clase lcl_airplane. A continuacin se llama al mtodo de instancia est_fuel_fuel pasndole como valor para el parmetro de entrada im_distance el valor de 1500. El valor devuelto por el mtodo despus de ejecutarse se almacena en la variable fuel_consuption. Por ltimo se llama al mtodo esttico get_count guardando el valor devuelto por dicho mtodo en la variable count_planes.En este ejemplo se estn utilizando sentencias reducidas para llamar a los mtodos la primera llamada al mtodo get_count es igual a la que se realiz en el slide anterior utilizando la sentencia CALL METHOD. De igual forma se puede llamar de forma reducida al mtodo est_fuel_con y el resultado es equivalente al obtenido en la llamada de la slide anterior.Los constructores son un tipo especial de mtodos que no pueden ser llamados con la sentencia CALL METHOD. Estos mtodos son llamados automticamente por el sistema para fijar el estado inicial de un nuevo objeto o clase. Los constructores son mtodos con nombres predefinidos Para crear el constructor de una clase desde el Class Builder hay que irse a la pestaa de mtodos y pulsar el botn Constructor o Constructor Clase dependiendo de lo que queremos crear, y el resto ya igual que para los mtodos normales (los constructores no solo pueden tener parmetros de entradas y los constructores estticos no pueden tener parmetros).El constructor dependiente de instancia de una clase se llama CONSTRUCTOR. Se implementa en la parte de implementacin de la misma manera que cualquier otro mtodo. El sistema llama al constructor dependiente de instancia una vez para cada instancia de la clase, justo despus de que el objeto haya sido creado mediante la sentencia CREATE OBJECT. Se le pueden pasar parmetros de entrada y controlar sus errores usando las adiciones EXPORTING y EXCEPTIONS en la sentencia CREATE OBJECT.Hay dos tipos de constructores, los dependientes de instancia y los estticos o independientes de instancia. El constructor esttico de una clase es el mtodo esttico predefinido CLASS_CONSTRUCTOR. Se implementa como cualquier otro mtodo. El constructor esttico no tiene parmetros. El sistema llama al constructor esttico una vez para cada clase, justo antes de que la clase se usa por primera vez. Debido a esto el constructor esttico no puede acceder a los componentes de la propia clase.La herencia sirve para aumentar la especializacin partiendo de una determinada superclase.El hecho de que la herencia sea una a una no quiere decir que el rbol de la herencia tenga solamente un nivel. Por el contrario, una superclase puede generar subclases, y cada una de estas subclases puede ser a su vez superclase para otras n subclases.La herencia es una relacin unidireccional, es decir, las subclases conocen cul es su superclase, pero la superclase no conoce cual/es son sus subclases.

    Creacin de subclases desde el Class Builder:Para crear una clase directa de una clase desde el editor de clases se escoge la pestaa Atributos (datos bsicos) y dentro de ella subclase (siempre que la clase no sea final). La clase se crea ahora como una clase normal. La subclase hereda todos los componentes de la superclase excepto los mtodos constructores.Cada clase tiene su constructor dependiente de instancia llamado CONSTRUCTOR. Esta es una excepcin a la regla de que los nombres de los componentes dentro de un rbol de herencia deben ser nicos. Los constructores dependientes de instancia de varias clases de un rbol de herencia son completamente independientes unos de otros. No se puede redefinir el constructor dependiente de instancia de una superclase en una subclase ni llamar especficamente al mtodo con CALL METHOD CONSTRUCTOR, de manera que no se puede llegar a tener conflictos de nombre. Debido a que una subclase contiene todos los atributos visibles de la superclase, los cuales puedes tener fijados constructores dependientes de instancia, el constructor dependiente de instancia de una subclase tiene que asegurarse de que todos los constructores de la superclase son llamados. Para que esto ocurra, el constructor de la subclase tiene que contener la sentencia CALL METHOD SUPER->CONSTRUCTORTodas las subclases contienen los componentes de todas las clases existentes entre ellas mismas y el nodoraiz del rbol de herencia. La visibilidad de un componente no puede ser cambiada nunca. En cambio sepuede usar la adicin REDEFINITION en la sentencia METHODS para redefinir un mtodo pblico oprotegido dependiente de instancia en una subclase y hacer que realice una funcin ms especializada.Cuando se redefine un mtodo no se puede cambiar su interface, el mtodo mantiene el mismo nombre yla misma interface de parmetros, pero tiene una nueva implementacin. La declaracin y laimplementacin de un mtodo en una superclase no se ve afectada cuando se redefine un mtodo en unasubclase. La implementacin de la redefinicin en la subclase oculta la implementacin original en lasuperclase.Cualquier referencia que apunte a un objeto de la subclase usa el mtodo redefinido, incluso si lareferencia fue definida con referencia a la superclase. Esto se aplica particularmente a la referencia a smismo me->.

    Slo se pueden redefinir mtodos dependientes de instancia. Los atributos, los mtodos estticos y otros componentes heredados no se pueden redefinir. Adems los mtodos que se quieren redefinir no pueden haber sido definidos como finales en la superclase.Se pueden definir nuevos componentes en las tres zonas de visibilidad (pblico, protegido o privado) de una subclase teniendo en cuenta que los nombres han de ser distintos entre los componentes heredados y creados en la subclase ya que si no existirn conflictos entre ellos. Para redefinir un mtodo heredado en una subclase: Se visualizan todos los mtodos de la subclase. En principio no aparecen los mtodos heredados, para que aparezcan tenemos que ir a Utilidades Opciones y seleccionar Visualizar tambin componentes heredados.Si se siguen los pasos indicados en la ayuda de la versin 4.6B lo que se hace es modificar el mtodo de la superclase. Para redefinir el mtodo hay que realizar lo siguiente:Se selecciona el mtodo elegido y se pulsa el botn de redefinir:(segundo por la derecha de la subscreen). Se entra directamente a la redifinicin del mtodo. Si se quiere anular la redifinicin y volver al mtodo original el botn situado a la derecha lo permite.Los mtodos refefinidos aparecen en diferente color en el editor de clases. Si se redefine un mtodo enuna subclase, el mtodo correspondiente en la superclase permanece sin cambios.

    Objetos de diferentes clases (lcl_cargo_airplane y lcl_passenger_airplane) se pueden almacenar en tablas internas de referencias a la superclase. Luego se puede recorrer la tabla interna y hacer llamadas a mtodos que aunque se llamen igual (como estn definidos en la clase), pueden estar redefinidos y comportarse de forma distinta.Esta el la ventaja del polimorfismo: en una nica llamada se pueden dar resultados distintos segn el tipo dinmico de la variable que se usa para llamar al mtodo.Las Interfaces slo tienen parte de declaracin.- Son como clases abstractas que slo contienen mtodos abstractos.- Las Interfaces no tienen zonas de visibilidad Las Interfaces estn implementadas dentro de las clases.Creacin de interfeces desde el Class- BuilderSe selecciona el tipo de objeto interfaceSe definen los componentes del interface, se definen los mtodos pero no se implementan, la implementacin se realiza en la claseSe accede a la clase en la que queremos definir el interface y se implementa

    Las Bussiness Add Inns (BADis) se definen en la transaccin SE18 y se implementan en la SE19. Tambin se puede ir por Herramientas->Workbech->Utilidades->Add ins empresariales

    Los objetos o las clases pueden usar eventos para desencadenar un tipo de mtodos en otros objetos o clases. Estos mtodos se llaman mtodos que manejan eventos (event handler methods) En una llamada normal a un mtodo, el mtodo puede ser llamado por cualquier nmero de usuarios. Cuando un evento es desencadenado, cualquier nmero de estos mtodos puede ser llamado. La unin ente el disparador del evento (trigger) y el manejador del evento (handler) no es establecida de antemano, si no en el entorno de ejecucin. En las llamadas normales a mtodos, el programa que llama determina los mtodos a los que quiere llamar. Estos mtodos tienen que existir. El manejador de eventos determina los eventos a los cuales tiene que reaccionar. No tiene porque existir un mtodo manejador de eventos registrado para cada evento. . Los eventos de una clase pueden ser desencadenados en los mtodos de la misma clase usando la sentencia RAISE EVENT. Un mtodo de la misma o de diferente clase, se declara como mtodo manejador de eventos utilizando la adicin FOR EVENT OF . Los objetos pueden indicar que su estado ha cambiado disparando un evento. Los eventos se pueden definir tanto en clases como en interfaces. Los eventos se desencadenan desde un mtodo mediante la sentencia RAISE EVENT. Cada clase o interface que va a manejar el correspondiente evento debe implementar el mtodo manejador de eventos apropiado y registrarlo usando la sentencia SET HANDLER. Cuando un evento tiene lugar, el sistema llama al mtodo manejador registrado para ese evento. Al igual que las definiciones de los mtodos, los eventos tienen una interface de parmetros. La nica diferencia es que los eventos slo pueden tener parmetros EXPORTING.Procedimiento: En el editor de clases se escoge la pestaa Eventos. Se tiene que introducir la siguiente informacin:*Evento Nombre que identifica al evento.*Clase Especifica el tipo de evento, esttico o dependiente de instancia.*Visibilidad Especifica el tipo de evento, pblico, protegido o privado.*Slo modelado Si se selecciona esta opcin, el sistema no crea el evento en el pool de clases. No se podra entonces acceder al componente en tiempo de ejecucin.*Descripcin descripcin breve del evento.Los eventos se listan en la parte declarativa de la clase o la interface despus de la sentencia EVENTS.

    El disparador y el manejador pueden ser objetos oclases, dependiendo de si tenemos eventos dependientes de instancia o eventos estticos y mtodosmanejadores de eventos. Cuando un evento es disparado, el correspondiente mtodo manejador deeventos 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. Slo pueden ser desencadenados en un mtodo dependiente de instancia..Eventos estticos o independientes de instancia Se declaran con la sentencia CLASS-EVENTS.Todos los mtodos (dependientes de instancia y estticos) pueden desencadenar eventos estticos.Los eventos estticos son el nico tipo de eventos que puede ser desencadenado por un mtodoesttico.

    Despus de la sentencia RAISE EVENT, todos los mtodos manejadores registrados son ejecutados antesde que la siguiente sentencia sea procesada (manejo de eventos sincrnico). Si un mtodo manejador deeventos desencadena eventos, los correspondientes mtodos manejadores de eventos son ejecutados antesde que el mtodo manejador original contine. Para evitar la posibilidad de un bucle infinito, actualmentelos eventos slo se pueden anidar 64 niveles.Los mtodos manejadores de eventos son ejecutados en el orden en el que son registrados. Debido a quelos manejadores de eventos son registrados dinmicamente, no se puede saber el orden en el que sernprocesados. Por esto se deben programar todos los manejadores de eventos como si se fuesen a ejecutartodos simultneamente.