Vous êtes sur la page 1sur 87

Programacin ABAP Orientada a Objetos

Contenido
1. 2. 3. 4. 5. 6. 7. Introduccin Anlisis y Diseo Principios Generalizacin / Especializacin Eventos Excepciones Casos Prcticos

Objetivos
Comprender los siguientes principios:
Clases Herencia Interfaces Polimorfismo Eventos Excepciones

Conocer objetos standares utililes a utilizar en proyectos

1. Introduccin

Programacin procedural Programacin Orientada a Objetos

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

Estructura de un programa ABAP:


Declaracin de Datos Llamadas a Subrutinas / mdulos Definicin de Subrutinas

1. Introduccin
Programacin Orientada a Objetos Qu son los objetos?
Son una abstraccin del mundo real Unidades compuestas de datos y funciones pertenecientes a dichos datos
AAvin

Method Data Method

1. Introduccin
Modelo de programacin OO
Clases
Data

Da una descripcin del objeto Establece los tipos de estados(Atributos) y el desarrollo de los Estados(Mtodos)

lcl_Avin Nombre Plazas Subir_pasajeros Despegar

Objetos
Reflejo de la vida real Instancias especificas de una clase. Ejemplo: Boeing 727
Method Data Method

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

Encapsulacin
La 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 ABAP Las sentencias de ABAP objects se pueden usar en los programas convencionales de ABAP, y viceversa ABAP objects no es un lenguaje nuevo, ha sido desarrollado como una extensin de ABAP

10

2. Anlisis y diseo

UML Diagramas de Clases Asociaciones

11

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 sistemas
Varios tipos de Diagramas

Un estndar Global

12

2. Anlisis y diseo
Diagramas de Clases
Punto de vista esttico del Modelo
Elementos
Clases Objetos

Su estructura interna
Atributos Mtodos

Su relacin con otros elementos


Generalizacin/Especializacin Asociacin

13

2. Anlisis y diseo
Diagrama de Clases: Ejemplo
lcl_flight
1 0..* 0..* 1

lcl_flightbooking
1 1

lcl_flightcustomer

lcl_seat lcl_airplane

1..*

1..*

lcl_wing

lcl_cargo_airplane

lcl_passenger_airplane

14

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 nombre Cada direccin tiene una cardinalidad que muestra cuantos objetos pueden estar en conexin con el objeto origen

15

2. Anlisis y diseo
Tipos de asociaciones
Agregacin y composicin
Smbolo de Agregacin

Agregacin
Tipos Especiales de asociaciones Relacin completa

lcl_airplane

1..*

lcl_wing

Smbolo de Composicin

Composicin
Tipo especial de Agregacin Depende de la Existencia para para la relacin completa

lcl_flight

0..*

lcl_flightbooking

16

2. Anlisis y diseo
Tipos de Asociaciones
Especializacin y Generalizacin
cl_airplane
Especializacin

cl_cargo_airplane

cl_cargo_airplane

cl_airplane

Generalizacin

cl_cargo_airplane

cl_cargo_airplane

17

3. Principios
Objetos Clases Atributos Mtodos Ejercicios

18

3. Principios
Objetos
Qu caracteriza a un objeto? Identidad Status (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
19

3. Principios
Clases Clases: Plantillas para los objetos
CLASS <classname> DEFINITION. ENDCLASS. CLASS <classname> IMPLEMENTATION. ENDCLASS.

Parte de definicin
Componentes de la clase como: atributos y mtodos.

Parte de implementacin
Contiene la implementacin de los mtodos.

Componentes de una clase:


Atributos:
Son los datos y representan el status del objeto

Mtodos:
Cdigo ejecutable, determinan el comportamiento del objeto

20

3. Principios
Clases Locales y Globales
Las 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.
CLASS <classname> IMPLEMENTATION. ENDCLASS..
21

CLASS <classname> DEFINITION. ENDCLASS.

3. Principios
Atributos
Los atributos describen la informacin que puede ser almacenada en los objetos generados a partir de una clase Estos 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

22

3. Principios
Atributos: Declaracin

CLASS <classname> DEFINITION. TYPES: <definicin normal de tipo>. CONSTANTS: constant TYPE <type> VALUE <value>. DATA: variable1 TYPE <type>, variable2 TYPE <ddic_type>, variable3 LIKE <variable1>, variable4 TYPE REF TO <classname>, variable5 TYPE REF TO <interface>, variable6 TYPE <type> VALUE <value>, variable7 TYPE <type> READ-ONLY. CLASS-DATA: . ENDCLASS.

23

3. Principios
Atributos: Visibilidad
CLASS lcl_airplane DEFINITION.

Atributos Pblicos
Son accesibles (usuarios y mtodos). Acceso directo. CLASS lcl_airplane DEFINITION. PUBLIC SECTION. . PRIVATE SECTION. name TYPE string. ENDCLASS.

PUBLIC SECTION. DATA: name TYPE string. PRIVATE SECTION. DATA: weigth TYPE saplaneweigth. ENDCLASS.

Atributos privados

MEJOR

No son accesibles desde fuera de la propia clase. Se ven y se cambian desde la propia clase.

DATA: weigth TYPE saplane-weigth,

24

3. Principios
Atributos de la clase y del objeto
CLASS 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.
25

3. Principios
Mtodos
Los 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.

26

3. Principios
Mtodos: Definicin

CLASS <classname> DEFINITION. . METHODS: <method_name> [ IMPORTING <im_var> TYPE <type> EXPORTING <ex_var> TYPE <type> CHANGING <ch_var> TYPE <type> RETURNING VALUE ( <re_var> ) TYPE <type> CLASS<classname> IMPLEMENTATION. EXCEPTIONS <exceptions> ]. METHOD <method_name>. ENDCLASS. .. ENDMETHOD. ENDCLASS.

27

3. Principios
Mtodos: Visibilidad
Mtodos Pblicos
-Se les puede llamar desde fuera de la clase. CLASS lcl_airplane DEFINITION. PUBLIC SECTION. METHODS: set_name importing im_name. PRIVATE SECTION. METHODS: init_name.

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

DATA: name TYPE string. ENDCLASS. CLASS lcl_airplane IMPLEMENTATION. METHOD: init_name. Name = No Name. ENDMETHOD. METHOD: set_name. Name = im_name. ENDMETHOD.
28

3. Principios Mtodos: Instance Vs. Static


CLASS lcl_airplane DEFINITION. 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 objeto 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.
29

PUBLIC SECTION. METHODS: set_name IMPORTING im_name TYPE string. PRIVATE SECTION. DATA: name TYPE string. CLASS-DATA: count type I. ENDCLASS. Mtodos 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 clase

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

Lcl_airplane Name weigth ..

Creacin del objeto

Name: LH Boston Weight: 30000kg

30

3. Principios
Creacin de objetos y asignaciones Asignacin 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. CREATE OBJECT airplane EXPORTING im_name = LH_Paris... APPEND airplane TO airplane_tab. LOOP AT TO airplane_tab INTO airplane. *work with the instance ENDLOOP. Airplane_tab

airplane

Name:LH_Berlin Weigth: 0Kg

airplane Airplane_tab

Name:LH_Berlin Weigth: 0Kg

Name: LH_Paris Weigth: 0Kg 31

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 valores Mtodos que pasan un valor Mtodos 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.

32

3. Principios
Llamando a mtodos
Los mtodos pblicos se pueden llamar desde fuera de la clase de varios modos: Mtodos de instancia (objeto) se llaman usando:
CALL METHOD <referece> -> <instance_method>

Mtodos estticos (de clase) se llaman usando:


CALL METHOD <class_name> => <class_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.

33

3. Principios
Llamadas a mtodos: Ejemplo
Mtodos del OBJETO:
(instance method)

CALL METHOD <instance>-><instance_method> EXPORTING <im_var> = <variable> IMPORTING <ex_var> = <variable> CHANGING <ch_var> = <variable> RECEIVING <re_var> = <variable> EXCEPTIONS <exception> = <nr>.

Mtodos de la CLASE: CALL METHOD <classname>=><class_method>


(static method)

EXPORTING <im_var> = <variable> .


TYPE ty_fuel,

DATA: airplane TYPE REF TO lcl_airplane. DATA: fuel_consuption 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.
34

3. Principios
Llamadas a mtodos: Ejemplo (II)
En ciertos casos se puede utilizar una forma abreviada para llamar al mtodo:
CLASS lcl_airplane DEFINITION. PUBLIC SECTION. METHODS: est_fuel_con IMPORTING im_distance TYPE ty_distance RETURNING VALUE(re_fuel) TYPE ty_fuel, CLASS-METHODS: get_count RETURNING VALUE(re_count) TYPE i. ENDCLASS. DATA: plane1 plane2 fuel_consuption count_planes TYPE REF TO lcl_airplane, TYPE RET TO lcl_airplane, TYPE ty_fuel, TYPE 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)
35

3. Principios Constructores
Son 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 clase lcl_airplane Name weigth count constructor CREATE OBJECT METHODS CONSTRUCTOR IMPORTING <im_parameter> EXCEPTIONS <exception>.
Name: LH Berlin Weigth: 30000Kg

36

3. Principios
Constructor: definicin

37

3. Principios
Constructor: Ejemplo
CLASS 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.
38

3. Principios
Constructores estticos
- Se establecen antes de acceder a la clase por primera vez. - Slo se ejecutan una vez por programa.
CLASS <classname> DEFINITION. PUBLIC SECTION. CLASS-METHODS CLASS_CONSTRUCTOR. ENDCLASS. CLASS <classname> IMPLEMENTATION. METHOD CLASS_CONTRUCTOR ENDMETHOD. ENDCLASS.
39

3. Principios
Ejercicios Al finalizar estos ejercicios sereis capaces de:
Crear clases Instanciar objetos Llamar mtodos Crear un constructor para una clase y crear un objeto utilizando el constructor.

40

4. Generaliz. / Especializacin

Herencia Cast Polimorfismo Interfaces

41

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

Lcl_passenger_airplane -seats -emergency_exits . + get_seats ( ): i ..

Lcl_cargo_airplane -name -weight . + get_cargo ( ): ty_cargo ..


42

4. Generaliz. / Especializacin
Herencia: Concepto
La 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 implementacin La 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 subclases En SAP no es posible la herencia mltiple (solo se permite un nivel de herencia)
43

4. Generaliz. / Especializacin
Herencia: Definicin

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

44

4. Generaliz. / Especializacin
Superclases Subclases
Los componentes comunes solo estn presentes una vez (en la superclase).
Los nuevos componentes declarados en la superclase estn automticamente disponibles en las subclases Se reduce con ello considerablemente la cantidad de cdigo

Las 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

45

4. Generaliz. / Especializacin
Herencia y visibilidad
El 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

46

4. Generaliz. / Especializacin
Herencia y visibilidad
Componentes 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
47

4. Generaliz. / Especializacin
La Herencia y el Constructor (I)
CLASS lcl_airplane DEFINITION. PUBLIC SECTION. METHODS CONSTRUCTOR IMPORTING im_name TYPE string. ENDCLASS. CLASS lcl_airplane IMPLEMENTATION. METHOD CONSTRUCTOR. name = im_name. ENDMETHOD. ENDCLASS.

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.

48

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

La clase a la que pertenece la instacia a crear tiene un constructor Rellena sus parmetros La clase a la que pertenece la instancia a crear no tiene un constructor Busca en el rbol de herencia la siguiente superclase con un constructor. Rellena los parmetros.

Lcl_3 # a2:: i + constructor ( im_a1:i, im_a2:i )

49

4. Generaliz. / Especializacin
Redefinicin de mtodos
Los mtodos heredados se pueden redefinir en las subclases
Los mtodos redefinidos se deben implementar in las subclases En la redefinicin no se pueden cambiar los parmetros del mtodo Solo se pueden redefinir mtodos de instancia (pblicos y protegidos), no los mtodos estticos.

50

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.

CLASS lcl_cargo_airplane DEFINITION INHERITING FROM lcl_airplane. PUBLIC SECTION. METHODS: estimate_fuel REDEFINITION. .. ENDCLASS. CLASS lcl_cargo_airplane IMPLEMENTATION. METHOD estimate_fuel. ENDMETHOD. ENDCLASS. 51

4. Generaliz. / Especializacin
Clases / Mtodos Finales
Clases Finales: no pueden tener subclases.
CLASS lcl_passenger_airplane DEFINITION FINAL INHERITING FROM lcl_airplane. .. ENDCLASS.

Mtodos Finales: no pueden redefinirse en las subclases.


CLASS lcl_passenger_airplane DEFINITION INHERITING FROM lcl_airplane. PUBLIC SECTION. METHODS estimate_number_of_free_seats FINAL. ENDCLASS.

52

4. Generaliz. / Especializacin Narrowing Cast


Las instancias de una subclase se pueden utilizar en cualquier contexto en el que aparece la superclase
DATA: airplane1 TYPE REF TO lcl_airplane, cargo_airplane TYPE REF TO lcl_cargo_airplane. CREATE OBJECT cargo_airplane. airplane1 Cargo_airplane airplane = cargo_airplane. airplane1 Cargp_airplane
Name:LH Berlin Weight: 30000Kg 100 T

Name:LH Berlin Weight: 30000Kg 100 T

Main memory

Main memory
53

4. Generaliz. / Especializacin Widening Cast


DATA: 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.
Name:LH Paris Weight: 25000Kg 150 passengers

LOOP AT airplane_tab INTO airplane. * Problem: Is this really a cargo airplane? * Determine the max cargo ENDLOOP LOOP AT airplane_tab INTO airplane. TRY. cargo_airplane ?= airplane. * determine max cargo * CATCH cx_sy_move_cast_error. react on that cast error Airplane_tab passenger plane cargo plane

Name:LH Berlin Weight: 30000Kg 100 T

ENDTRY. ENDLOOP
54

4. Generaliz. / Especializacin
Tipos estticos y dinmicos
El tipo esttico de una variable de referencia
Se establece utilizando TYPE REF TO Permanece constante durante la ejecucin del programa Determina qu atributos y mtodos se pueden direccionar

El tipo dinmico de una variable de referencia


Se establece por asignacin Puede cambiar durante la ejecucin del programa Determina el cdigo que se ejecutar en los mtodos redefinidos

55

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 usuarios Los mtodos redefinidos deben mantener la misma semntica de los componentes heredados La herencia es solo para generalizacin/especializacin: Se debe evitar la herencia de cdigo

56

4. Generaliz. / Especializacin
Polimorfismo
Objetos 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

57

4. Generaliz. / Especializacin
Polimorfismo: Ejemplo
DATA: cargo_plane passenger_plane plane_list CREATE OBJECT: cargo_plane. APPEND cargo_plane TO plane_list. CREATE OBJECT passanger_plane APPEND passanger_airplane TO plane_list
Cargo_airplane

TYPE REF TO lcl_cargo_airplane. TYPE REF TO lcl_passenger_airplane, TYPE TABLE OF REF TO lcl_airplane.

1 2 4

Plane_list

Passenger_airplane

Main memory
58

4. Generaliz. / Especializacin
Interfaces
Las 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
59

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 visibilidad Las 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 clase Los componentes de la Interface se direccionan con el operador (~)

60

4. Generaliz. / Especializacin
Interfaces: Definicin

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

61

4. Generaliz. / Especializacin
Interfaces: Business Add Ins
Las 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

62

4. Generaliz. / Especializacin
Interfaces vs Herencia Polimorfismo 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

63

4. Generaliz. / Especializacin
Ejercicios Al finalizar estos ejercicios sereis capaces de:
Definir subclases Redefinir mtodos de la superclase en la subclase Implementar llamadas a mtodos Definir e implementar Interfaces

64

5. Eventos
Disparar y manejar eventos Coordinacin en el manejo de eventos Activacin/Desactivacin de los mtodos que manejan los eventos. Visibilidad de los eventos.

65

5. Eventos
Caractersticas y uso
Cuando se desata un evento (RAISE EVENT), el objeto anuncia que se ha producido un cambio de estado, o anuncia que determinado estado se ha alcanzado En 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 seguridad
Airplane Air-traffic controller ATC

LH Berlin

IF altitude = 0.
Passenger RAISE EVENT touched_down.
Miller

ENDIF.

66

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.

67

5. Eventos
Disparar y manejar eventos (II)
Declaracin de mtodos manejadores de eventos Una 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 EVENT Registro de mtodos manejadores de eventos Para 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 HANDLER 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
68

5. Eventos
Definicin

CLASS <classname> DEFINITION. EVENTS: <event> EXPORTING VALUE ( <ex_par> ) TYPE type. CLASS <classname> IMPLEMENTATION. METHOD <m>. RAISE EVENT <event> EXPORTING VALUE <ex_par> = 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.

69

5. Eventos
Gestin: puntos clave
Tanto eventos estticos como de instancia se pueden lanzar desde mtodos de instancia En mtodos estticos solo se pueden lanzar eventos estticos Los eventos solo pueden tener parmetros EXPORTING que se deben pasar por valor Lanzar un evento utilizando la sentencia RAISE EVENT tiene los siguientes efectos:
El flujo del programa se interrumpe en ese punto El manejador de eventos registra que ese evento se ha llamado y procesado Una vez que todos los mtodos manejadores de eventos se ha ejecutado, el flujo del programa comienza de nuevo

Si 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)
70

5. Eventos
Gestin: mtodos
CLASS <class_habdle> DEFINITION. METHODS: <on_event> FOR EVENT <event> OF <classname>/<interface> IMPORTING <ex_par1> <ex_parN> SENDER.

CLASS lcl_air_traffic_controller DEFINITION. .. PRIVATE SECTION. METHODS: on_touched_down FOR EVENT touched_down OF lcl_airplane Air-traffic IMPORTING ex_name SENDER. Airplane controller ENDCLASS. LH Berlin

Schmidt on_touched_down

71

5. Eventos
Gestin: activacin
CLASS 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.

Airplane

Air-traffic controller

LH Berlin

SET HANDLER

Schmidt on_touched_down
72

5. Eventos
Gestin: desactivacin
CLASS 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. LH Berlin Airplane SET HANDLER Schmidt on_touched_down
73

Air-traffic controller

5. Eventos
Gestin: caractersticas
El manejo de eventos es secuencial La secuencia en la que se llaman a los mtodos manejadores de eventos no est definida La 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
Evento
Pblico Protegido Privado

Mtodos que responden al evento


Pblico, Protegido o Privado Protegido o Privado Privado
74

5. Eventos Ejercicios
Al finalizar estos ejercicios sereis capaces de:
Definir y lanzar eventos

75

6. Excepciones

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

76

6. Excepciones
Definicin
El 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.
77

6. Excepciones
Clases de excepciones predefinidas
Todas 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_root
textid kernel_errid .. get_text get_source_position

cx_no_check

cx_dynamic_check

cx_static_check

cx_sy_arithmetic_error cx_sy_move_cast_error

cx_sy_arithmetic_overflow_error

78

6. Excepciones
Gestin de excepciones
TRY. ...
Cdigo cuyas posibles excepciones se van a tratar

CATCH CX_... CX_... ... [INTO r_exc1]. ... CATCH CX_... ... [INTO r_exc2]. ... CLEANUP. ... ENDTRY.

Cdigo para llamar al mtodo que gestiona la excepcin recogida en las clases y subclases especificadas en la sentencia CATCH

Cdigo que se ejecutar si la excepcin no fue capturada por un CATCH de los anteriores
79

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

6. Excepciones
Creacin de clases de excepcin (I)

Atributos con informacin sobre la excepcin

CLASS CX_SOME_EXCEPTION Textos para DEFINITION INHERITING FROM CX_STATIC_CHECK. la describir situacin de error ... ENDCLASS.
Exception ID cx_root

CLASS CX_SOME_EXCEPTION Text IMPLEMENTATION. ... ENDCLASS

An exception has ocurred Tipo de avin incorrecto


81

ZCX_WRONG_PLANETYPE

6. Excepciones Creacin 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.

82

6. Excepciones
Lanzar y gestionar una clase de excepcin propia
METHOD 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_root

cx_static_check

zcx_wrong_planetype

83

6. Excepciones Passing along: Definicin


CLASS cl_class DEFINITION. ... METHODS meth IMPORTING <im_param> EXPORTING <ex_param> RAISING cx_exception. ... ENDCLASS. CLASS cl_class IMPLEMENTATION. ... METHOD meth. ... RAISE EXCEPTION TYPE cx_exception. ENDMETHOD. ... ENDCLASS.

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

(2)

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
84

6. Excepciones
Excepciones que deben ser declaradas
cx_root
cx_no_check
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_dynamic_check
Las 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.

cx_static_check
Las excepciones pertenecientes a estas clases DEBEN ser gestionadas o traspasadas (passing along) usando la sentencia RAISING. Forman parte del chequeo de sintaxis Actualmente, solo las clases definidas por el usuario cuelgan de esta clase

85

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

86

7. Casos Prcticos
Desktop Office Integration:
El objetivo de este ejercicio es aprender a utilizar los "container" de SAP para insertar objetos ( documentos office, pginas html....) en SAP

ALV Tree Demos creadas en SAP (transaccin DWDM )

87

Vous aimerez peut-être aussi