Anda di halaman 1dari 87

CORT480 - Programacin

ABAP Orientada a Objetos


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

Comprender los siguientes principios:
Clases
Herencia
Interfaces
Polimorfismo
Eventos
Excepciones

Conocer objetos standares utililes a utilizar en proyectos

Objetivos
4


Programacin procedural

Programacin Orientada a Objetos
1. Introduccin
5
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 Procedural
6
Qu son los objetos?
Son una abstraccin del mundo real
Unidades compuestas de datos y funciones
pertenecientes a dichos datos

1. Introduccin
Programacin Orientada a Objetos
Method

Method
AAvin
Data
7
1. Introduccin
Modelo de programacin OO
Data
Clases
Da una descripcin del objeto
Establece los tipos de
estados(Atributos) y el
desarrollo de los
Estados(Mtodos)
Objetos
Reflejo de la vida real
Instancias especificas de una
clase. Ejemplo: Boeing 727
lcl_Avin
Nombre
Plazas
Subir_pasajeros
Despegar
Method

Method
Data
8
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 (I)
9
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
Ventajas de la OOP (II)
10

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
1. Introduccin
ABAP Objects
11


UML

Diagramas de Clases

Asociaciones

2. Anlisis y diseo
12
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

2. Anlisis y diseo
Qu es UML?
13
Punto de vista esttico del Modelo
Elementos
Clases
Objetos
Su estructura interna
Atributos
Mtodos
Su relacin con otros elementos
Generalizacin/Especializacin
Asociacin

2. Anlisis y diseo
Diagramas de Clases
14
2. Anlisis y diseo
Diagrama de Clases: Ejemplo
lcl_flight lcl_flightbooking lcl_flightcustomer
lcl_seat
lcl_airplane lcl_wing
lcl_cargo_airplane lcl_passenger_airplane
1 0..*
0..* 1
1
1
1..*
1
1..* 1
1
15
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


2. Anlisis y diseo
Asociaciones (1)
16
2. Anlisis y diseo
Tipos de asociaciones
Agregacin
Tipos Especiales de asociaciones
Relacin completa
Composicin
Tipo especial de Agregacin
Depende de la Existencia para
para la relacin completa
lcl_airplane lcl_wing
1
1..*
lcl_flight lcl_flightbooking
1
0..*
Smbolo de Composicin
Smbolo de Agregacin
Agregacin y composicin
17
2. Anlisis y diseo
Tipos de Asociaciones
cl_airplane
cl_cargo_airplane cl_cargo_airplane
E
s
p
e
c
i
a
l
i
z
a
c
i

n

cl_airplane
cl_cargo_airplane cl_cargo_airplane
G
e
n
e
r
a
l
i
z
a
c
i

n

Especializacin y Generalizacin
18

Objetos
Clases
Atributos
Mtodos
Ejercicios

3. Principios
19
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

3. Principios
Objetos
20
Clases: Plantillas para los objetos
3. Principios
Clases
CLASS <classname> DEFINITION.

ENDCLASS.
Parte de definicin
Componentes de la clase como:
atributos y mtodos.
CLASS <classname> IMPLEMENTATION.

ENDCLASS.
Parte de implementacin
Contiene la implementacin
de los mtodos.
Atributos:
Son los datos y representan
el status del objeto

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

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



3. Principios
Clases Locales y Globales
Las clases locales se definen en un programa ABAP y solo
pueden ser invocadas desde los programas en que se definen.

CLASS <classname> DEFINITION.

ENDCLASS.
CLASS <classname> IMPLEMENTATION.

ENDCLASS..
22
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
3. Principios
Atributos
23
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.

24
3. Principios
Atributos: Visibilidad
Atributos Pblicos
Son 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 privados
No son accesibles desde
fuera de la propia clase.
Se ven y se cambian desde
la propia clase.

MEJOR
25
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.
26
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.

3. Principios
Mtodos
27
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>
EXCEPTIONS <exceptions> ].
ENDCLASS.
CLASS<classname> IMPLEMENTATION.
METHOD <method_name>.
..
ENDMETHOD.
ENDCLASS.
28
3. Principios
Mtodos: Visibilidad
Mtodos 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.
29
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 objeto
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
CLASS 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.
30
Para 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
Name: LH Boston
Weight: 30000kg
Creacin del
objeto
Lcl_airplane
Name
weigth
..
31
Asignacin de referencias:
3. Principios
Creacin de objetos y
asignaciones
DATA: airplane TYPE REF TO lcl_airplane,
airplane_tab TYPE TABLE OF REF TO lcl_airplane.
airplane
CREATE OBJECT airplane EXPORTING
im_name = LH_Berlin...
APPEND airplane TO airplane_tab.
Airplane_tab
airplane
CREATE OBJECT airplane EXPORTING
im_name = LH_Paris...
APPEND airplane TO airplane_tab.
Airplane_tab
LOOP AT TO airplane_tab INTO
airplane.
*work with the instance
ENDLOOP.
Name:LH_Berlin
Weigth: 0Kg
Name: LH_Paris
Weigth: 0Kg
Name:LH_Berlin
Weigth: 0Kg
32

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.
3. Principios
Mtodos
33
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.
3. Principios
Llamando a mtodos
34
3. Principios
Llamadas a mtodos: Ejemplo
Mtodos del OBJETO: CALL METHOD <instance>-><instance_method>
(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> .
DATA: airplane TYPE REF TO lcl_airplane.
DATA: fuel_consuption TYPE 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.

35
3. Principios
Llamadas a mtodos: Ejemplo (II)
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 TYPE REF TO lcl_airplane,
plane2 TYPE RET TO lcl_airplane,
fuel_consuption TYPE ty_fuel,
count_planes 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)
En ciertos casos se puede utilizar una forma abreviada para llamar al
mtodo:
36
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
METHODS CONSTRUCTOR IMPORTING <im_parameter>
EXCEPTIONS <exception>.
lcl_airplane
Name
weigth
count
constructor
CREATE OBJECT
Name: LH Berlin
Weigth: 30000Kg
37
3. Principios
Constructor: definicin
38
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.
39
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.
40
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.
3. Principios
Ejercicios
41


Herencia
Cast
Polimorfismo
Interfaces
4. Generaliz. / Especializacin
42
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
..
43
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)
4. Generaliz. / Especializacin
Herencia: Concepto
44
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.
45
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

4. Generaliz. / Especializacin
Superclases Subclases
46
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

4. Generaliz. / Especializacin
Herencia y visibilidad
47
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
48
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.
49
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.
4. Generaliz. / Especializacin
La Herencia y el Constructor (II)
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 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.
50
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.
4. Generaliz. / Especializacin
Redefinicin de mtodos
51
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.
52
4. Generaliz. / Especializacin
Clases / Mtodos Finales
CLASS 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.
53
Las instancias de una subclase se pueden utilizar en cualquier
contexto en el que aparece la superclase
4. Generaliz. / Especializacin
Narrowing Cast
DATA: airplane1 TYPE REF TO lcl_airplane,
cargo_airplane TYPE REF TO lcl_cargo_airplane.
CREATE OBJECT cargo_airplane.
Main memory
airplane1
Cargo_airplane
Name:LH Berlin
Weight: 30000Kg
100 T
airplane = cargo_airplane.
Main memory
airplane1
Cargp_airplane
Name:LH Berlin
Weight: 30000Kg
100 T
54
4. Generaliz. / Especializacin
Widening Cast
passenger plane
Airplane_tab
cargo plane
Name:LH Berlin
Weight: 30000Kg
100 T
Name:LH Paris
Weight: 25000Kg
150 passengers
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.

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

ENDTRY.
ENDLOOP

55
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

4. Generaliz. / Especializacin
Tipos estticos y dinmicos
56

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
4. Generaliz. / Especializacin
Semntica de la herencia
57
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
4. Generaliz. / Especializacin
Polimorfismo
58
4. Generaliz. / Especializacin
Polimorfismo: Ejemplo
Main memory
DATA: cargo_plane TYPE REF TO lcl_cargo_airplane.
passenger_plane TYPE REF TO lcl_passenger_airplane,
plane_list TYPE TABLE OF REF TO lcl_airplane.
CREATE OBJECT: cargo_plane.
APPEND cargo_plane TO plane_list.
CREATE OBJECT passanger_plane
APPEND passanger_airplane TO plane_list
Cargo_airplane
Passenger_airplane
Plane_list
1
2
4
3
59
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
4. Generaliz. / Especializacin
Interfaces
60
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
(~)
4. Generaliz. / Especializacin
Interfaces (II)
61
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.
62
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
63
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
4. Generaliz. / Especializacin
Interfaces vs Herencia
64
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
4. Generaliz. / Especializacin
Ejercicios
65

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

5. Eventos
66
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
5. Eventos
Caractersticas y uso
Airplane



LH Berlin
Air-traffic
controller


ATC
Passenger
IF altitude = 0.
RAISE EVENT touched_down.
ENDIF.
Miller
67
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 (I)
68
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


5. Eventos
Disparar y manejar eventos (II)
69
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.
70
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)
71
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
IMPORTING ex_name SENDER.
ENDCLASS.





Airplane



LH Berlin
Air-traffic controller



Schmidt
on_touched_down


72
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



LH Berlin
Air-traffic controller



Schmidt
on_touched_down


SET
HANDLER
73
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.
Airplane



LH Berlin
Air-traffic controller



Schmidt
on_touched_down


SET
HANDLER
74
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
5. Eventos
Gestin: caractersticas
Evento Mtodos que responden al evento
Pblico


Protegido


Privado
Pblico, Protegido o Privado


Protegido o Privado


Privado
75
Al finalizar estos ejercicios sereis capaces de:
Definir y lanzar eventos

5. Eventos
Ejercicios
76
6. Excepciones


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

77
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.
78
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_overflow_error
cx_sy_arithmetic_error cx_sy_move_cast_error
79
6. Excepciones
Gestin de excepciones
TRY.
...

CATCH CX_... CX_... ... [INTO r_exc1].
...

CATCH CX_... ... [INTO r_exc2].
...

CLEANUP.
...

ENDTRY.
Cdigo cuyas posibles
excepciones se van a tratar
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
80
6. Excepciones
Gestin de excepciones: Ejemplo
PARAMETERS: 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
resultado
Se crea una instancia de la
clase de excepcin y el
mtodo get_text nos devuelve
el texto del mensaje a
mostrar.
81
6. Excepciones
Creacin de clases de excepcin (I)
Atributos con
informacin sobre
la excepcin
Exception ID Text
cx_root An exception has ocurred
ZCX_WRONG_PLANETYPE Tipo de avin incorrecto
Textos para
describir la
situacin de error
CLASS CX_SOME_EXCEPTION DEFINITION
INHERITING FROM CX_STATIC_CHECK.
...
ENDCLASS.

CLASS CX_SOME_EXCEPTION
IMPLEMENTATION.
...
ENDCLASS
82
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.
83
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
zcx_wrong_planetype
cx_static_check
84
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.

REPORT <program_name> .
...
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)
85
6. Excepciones
Excepciones 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_root
cx_no_check cx_dynamic_check cx_static_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.
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
86
6. Excepciones
Ejercicios
Al finalizar estos ejercicios sereis capaces de:
Crear tus propias clases de excepciones.
Definir, lanzar, gestionar y traspasar
excepciones.
87
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 )
7. Casos Prcticos

Anda mungkin juga menyukai