02 Manual ABAP Objects CORT480

75
CORT480 - Programación ABAP Orientada a Objetos

Transcript of 02 Manual ABAP Objects CORT480

Page 1: 02 Manual ABAP Objects CORT480

CORT480 - Programación ABAP Orientada a Objetos

Page 2: 02 Manual ABAP Objects CORT480

2

1. Introducción

2. Análisis y Diseño

3. Principios

4. Generalización / Especialización

5. Eventos

6. Casos Prácticos

Contenido

Page 3: 02 Manual ABAP Objects CORT480

3

Comprender los siguientes principios:• Clases• Herencia• Interfaces• Polimorfismo• Eventos

Conocer objetos standares utililes a utilizar en proyectos

Objetivos

Page 4: 02 Manual ABAP Objects CORT480

4

• Programación procedural

• Programación Orientada a Objetos

1. Introducción

Page 5: 02 Manual ABAP Objects CORT480

5

• Programación Procedural:– Las funciones se definen independientemente de las

estructuras de datos

– Se accede de forma directa a los datos

• Estructura de un programa ABAP:– Declaración de Datos

– Llamadas a Subrutinas / módulos

– Definición de Subrutinas

1. Introducción Programación Procedural

Page 6: 02 Manual ABAP Objects CORT480

6

• ¿Qué son los objetos?– Son una abstracción del mundo real

– Unidades compuestas de datos y funciones pertenecientes a dichos datos

1. Introducción Programación Orientada a Objetos

Method

Method

AAvión

Data

Page 7: 02 Manual ABAP Objects CORT480

7

1. Introducción Modelo de programación OO

Data• Clases

– Da una descripción del objeto

– Establece los tipos de estados(Atributos) y el desarrollo de los Estados(Métodos)

• Objetos– Reflejo de la vida real

– Instancias especificas de una clase. Ejemplo: Boing 727

lcl_AviónNombre Plazas

Subir_pasajerosDespegar

Method

MethodData

Page 8: 02 Manual ABAP Objects CORT480

8

• Consistencia durante el proceso de desarrollo:– El lenguaje utilizado durante el proceso de desarrollo es

uniforme, lo ideal sería que las modificaciones realizadas durante la fase de implementación se reflejarán directamente en el diseño

• Encapsulación– La implementación de un objeto es oculta para los demás

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. Introducción Ventajas de la OOP (I)

Page 9: 02 Manual ABAP Objects CORT480

9

• Polimorfismo:– Un objeto en diferentes clases puede tener diferentes

reacciones a un mismo mensaje

• Herencia:– Define la implementación de la relación entre clases, en la cual

una clase (la subclase) comparte la estructura (atributos) y el comportamiento (métodos) definidos en una o más clases (superclases). Nota: En ABAP solo está permitida la herencia simple

1. Introducción Ventajas de la OOP (II)

Page 10: 02 Manual ABAP Objects CORT480

10

• Extensión 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 extensión de ABAP

1. Introducción ABAP Objects

Page 11: 02 Manual ABAP Objects CORT480

11

• UML

• Diagramas de Clases

• Asociaciones

2. Análisis y diseño

Page 12: 02 Manual ABAP Objects CORT480

12

• Un lenguaje de Modelado Orientado a Objetos

UUnified nified MModeling odeling LLanguajeanguaje

• Un Lenguaje y forma de notación para la especificación, visualización y documentación de Modelos de software de sistemas– Varios tipos de Diagramas

• Un estándar Global

2. Análisis y diseño ¿Qué es UML?

Page 13: 02 Manual ABAP Objects CORT480

13

• Punto de vista estático del Modelo– Elementos

• Clases• Objetos

– Su estructura interna• Atributos• Métodos

– Su relación con otros elementos• Generalización/Especialización• Asociación

2. Análisis y diseño Diagramas de Clases

Page 14: 02 Manual ABAP Objects CORT480

14

2. Análisis y diseño 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

Page 15: 02 Manual ABAP Objects CORT480

15

• La Asociación describe las relaciones entre clases. La relación especifica de objetos de las clases se llama vinculo o conexión de objetos. Por lo tanto las conexiones entre objetos serán 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 dirección puede tener un nombre

• Cada dirección tiene una cardinalidad que muestra cuantos objetos pueden estar en conexión con el objeto origen

2. Análisis y diseño Asociaciones (1)

Page 16: 02 Manual ABAP Objects CORT480

16

2. Análisis y diseño Tipos de asociaciones

Agregación•Tipos Especiales de asociaciones•Relación completa

Composición•Tipo especial de Agregación•Depende de la Existencia para

para la relación completa

lcl_airplane lcl_wing1 1..*

lcl_flight lcl_flightbooking1 0..*

Símbolo de Composición

Símbolo de Agregación

Agregación y composición

Page 17: 02 Manual ABAP Objects CORT480

17

2. Análisis y diseño Tipos de Asociaciones

cl_airplane

cl_cargo_airplane cl_cargo_airplane

Especialización

cl_airplane

cl_cargo_airplane cl_cargo_airplane

Generalización

Especialización y Generalización

Page 18: 02 Manual ABAP Objects CORT480

18

• Objetos• Clases• Atributos• Métodos• Ejercicios

3. Principios

Page 19: 02 Manual ABAP Objects CORT480

19

• ¿Qué caracteriza a un objeto?– Identidad– Status (atributos)– Comportamiento (métodos)

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

• Esta identidad del objeto es la característica que nos permite diferenciar unos objetos de otros. Pese a que dos objetos tuvieran idéntico valor para todos sus atributos, serían distintos objetos ya que cada objeto tiene su propio nombre. Ej: Tenemos 2 tazas de café idénticas.Pese a que se ven idénticas son dos objetos distintos

3. Principios Objetos

Page 20: 02 Manual ABAP Objects CORT480

20

Clases: Plantillas para los objetos

3. Principios Clases

CLASS <classname> DEFINITION.

ENDCLASS.

Parte de definición

Componentes de la clase como:

atributos y métodos.

CLASS <classname> IMPLEMENTATION.

ENDCLASS.

Parte de implementación

Contiene la implementación

de los métodos.

Atributos:

Son los datos y representan el status del objeto

Componentes de una clase:Métodos:

Código ejecutable, determinan el comportamiento del objeto

Page 21: 02 Manual ABAP Objects CORT480

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

Page 22: 02 Manual ABAP Objects CORT480

22

• Los atributos describen la información 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

Page 23: 02 Manual ABAP Objects CORT480

23

3. Principios Atributos: Declaración

CLASS <classname> DEFINITION.

TYPES: <definición 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.

Page 24: 02 Manual ABAP Objects CORT480

24

3. Principios Atributos: Visibilidad

Atributos Públicos

Son accesibles (usuarios y métodos).

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

Page 25: 02 Manual ABAP Objects CORT480

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 (Public 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 sólo una vez para toda la clase. Todos los objetos de la clase tendrán 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 afectaría a todos los objetos de la clase, que adoptarían para el atributo cambiado ese nuevo valor. Se definen mediante la sentencia: CLASS-DATA.

Page 26: 02 Manual ABAP Objects CORT480

26

• Los métodos son procedimientos internos de la clase que determinan cómo 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 métodos son sus parámetros, que hacen posible que los métodos puedan recibir valores cuando son llamadas y que puedan devolver valores cuando devuelvan el control al programa de llamada.

3. Principios Métodos

Page 27: 02 Manual ABAP Objects CORT480

27

3. Principios Métodos: Definición

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.

Page 28: 02 Manual ABAP Objects CORT480

28

3. Principios Métodos: Visibilidad

Métodos Públicos

-Se les puede llamar desde

fuera de la clase.

Métodos 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.

Page 29: 02 Manual ABAP Objects CORT480

29

3. Principios Métodos: Instance Vs. Static

•Métodos del objeto (Instance methods)–Pueden utilizar tanto atributos de la clase como propios del objeto en la parte de implementación del método.–Se puede acceder a ellos mediante el nombre del objeto

•Métodos de la clase (Static methods)–Sólo pueden utilizar componentes de la clase en la parte de implementación del método.–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.

Page 30: 02 Manual ABAP Objects CORT480

30

• Para poder crear objetos, y para poder acceder a los objetos ya existentes, es necesario la utilización de variables de referencia.

3. Principios Creación de Objetos

Name: LH BostonWeight: 30000kg

Creación delobjeto

Lcl_airplane

Nameweigth

…..

Page 31: 02 Manual ABAP Objects CORT480

31

• Asignación de referencias:

3. Principios Creación 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_tabLOOP AT TO airplane_tab INTO

airplane.

*work with the instance

ENDLOOP.

Name:LH_BerlinWeigth: 0Kg

Name: LH_ParisWeigth: 0Kg

Name:LH_BerlinWeigth: 0Kg

Page 32: 02 Manual ABAP Objects CORT480

32

• Cada objeto se comporta de cierto modo. Este comportamiento está determinado por sus métodos. Hay 3 tipos de métodos:– Métodos que provocan un comportamiento y no pasan valores– Métodos que pasan un valor– Métodos que pasan o cambian varios valores.

• Un objeto que requiere un servicio de otro objeto envía un mensaje a otro objeto para que le proporcione el servicio. Este mensaje llama a la operación que se ejecutará. La implementación de esta operación conocida como MÉTODO.

3. Principios Métodos

Page 33: 02 Manual ABAP Objects CORT480

33

• Los métodos públicos se pueden llamar desde fuera de la clase de varios modos:– Métodos de instancia (objeto) se llaman usando:

• CALL METHOD <referece> -> <instance_method>

– Métodos estáticos (de clase) se llaman usando:• CALL METHOD <class_name> => <class_method>

• Si se llama a un método estático desde una clase se puede omitir el nombre de la clase. Cuando se llama a un método de instancia desde otro método de instancia, se puede omitir el nombre de la instancia. Se ejecutará automaticamente el método para el objeto actual.

3. Principios Llamando a métodos

Page 34: 02 Manual ABAP Objects CORT480

34

3. Principios Llamadas a métodos: Ejemplo

Métodos 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>.

Métodos 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.

Page 35: 02 Manual ABAP Objects CORT480

35

3. Principios Llamadas a métodos: 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 método:

Page 36: 02 Manual ABAP Objects CORT480

36

3. Principios Constructores

• Son métodos especiales para que al crear un objeto, este objeto tenga un estado inicial definido.• Sólo tienen parámetros import y excepciones.• El método 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

Nameweigthcount

constructor

CREATE OBJECT

Name: LH BerlinWeigth: 30000Kg

Page 37: 02 Manual ABAP Objects CORT480

37

3. Principios Constructor: definición

Page 38: 02 Manual ABAP Objects CORT480

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.

Page 39: 02 Manual ABAP Objects CORT480

39

3. Principios Constructores estáticos

- Se establecen antes de acceder a la clase por primera vez.

- Sólo se ejecutan una vez por programa.

CLASS <classname> DEFINITION.

PUBLIC SECTION.

CLASS-METHODS CLASS_CONSTRUCTOR.

ENDCLASS.

CLASS <classname> IMPLEMENTATION.

METHOD CLASS_CONTRUCTOR

ENDMETHOD.

ENDCLASS.

Page 40: 02 Manual ABAP Objects CORT480

40

• Al finalizar estos ejercicios sereis capaces de:– Crear clases

– Instanciar objetos

– Llamar métodos

– Crear un constructor para una clase y crear un objeto utilizando el constructor.

3. Principios Ejercicios

Page 41: 02 Manual ABAP Objects CORT480

41

• Herencia• Cast• Polimorfismo• Interfaces

4. Generaliz. / Especialización

Page 42: 02 Manual ABAP Objects CORT480

42

4. Generaliz. / Especialización 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…..

Page 43: 02 Manual ABAP Objects CORT480

43

• La HERENCIA es una relación por la cuál una clase (subclase) hereda todas las características de otra clase (superclase).

• En la subclase se pueden añadir nuevos componentes (atributos, métodos,…) y modificar los métodos heredados, dotándolos a estos con su propia implementación

• La herencia se basa en el concepto de la similitud entre clases. En el ejemplo, las similitudes entre el avión 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 automáticamente heredados por las distintas subclases

• En SAP no es posible la herencia múltiple (solo se permite un nivel de herencia)

4. Generaliz. / Especialización Herencia: Concepto

Page 44: 02 Manual ABAP Objects CORT480

44

4. Generaliz. / Especialización Herencia: Definición

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.

Page 45: 02 Manual ABAP Objects CORT480

45

• Los componentes comunes solo están presentes una vez (en la superclase).– Los nuevos componentes declarados en la superclase están

automáticamente disponibles en las subclases– Se reduce con ello considerablemente la cantidad de código

• Las subclases son extremadamente dependientes de las superclases.– Se debe tener un profundo conocimiento de cómo están

implementadas las superclases a la hora de definir una clase como subclase de estas

4. Generaliz. / Especialización Superclases – Subclases

Page 46: 02 Manual ABAP Objects CORT480

46

• El concepto de herencia nos proporciona una extensión 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. / Especialización Herencia y visibilidad

Page 47: 02 Manual ABAP Objects CORT480

47

4. Generaliz. / Especialización Herencia y visibilidad

• Componentes Públicos

- Totalmente Visibles.

- Permiten accesos directos.

• Componentes Protegidos

- Sólo son visibles dentro de sus clases y de sus subclases.

• Componentes Privados

- Sólo 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

Page 48: 02 Manual ABAP Objects CORT480

48

4. Generaliz. / Especialización 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.

Page 49: 02 Manual ABAP Objects CORT480

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. / Especialización 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 parámetros

• 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 parámetros.

Page 50: 02 Manual ABAP Objects CORT480

50

• Los métodos heredados se pueden redefinir en las subclases– Los métodos redefinidos se deben implementar in las

subclases– En la redefinición no se pueden cambiar los parámetros del

método– Solo se pueden redefinir métodos de instancia (públicos y

protegidos), no los métodos estáticos.

4. Generaliz. / Especialización Redefinición de métodos

Page 51: 02 Manual ABAP Objects CORT480

51

4. Generaliz. / Especialización Redefinición métodos: 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.

Page 52: 02 Manual ABAP Objects CORT480

52

4. Generaliz. / Especialización Clases / Métodos 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.

•Métodos Finales: no pueden redefinirse en las subclases.

Page 53: 02 Manual ABAP Objects CORT480

53

• Las instancias de una subclase se pueden utilizar en cualquier contexto en el que aparece la superclase

4. Generaliz. / Especialización “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 BerlinWeight: 30000Kg100 T

airplane = cargo_airplane.

Main memory

airplane1

Cargp_airplane

Name:LH BerlinWeight: 30000Kg100 T

Page 54: 02 Manual ABAP Objects CORT480

54

• El tipo estático de una variable de referencia– Se establece utilizando TYPE REF TO– Permanece constante durante la ejecución del programa– Determina qué atributos y métodos se pueden direccionar

• El tipo dinámico de una variable de referencia– Se establece por asignación– Puede cambiar durante la ejecución del programa– Determina el código que se ejecutará en los métodos

redefinidos

4. Generaliz. / Especialización Tipos estáticos y dinámicos

Page 55: 02 Manual ABAP Objects CORT480

55

• Los componentes heredados se deben comportar en la subclase exactamente igual que lo hacen en la superclase para todos los usuarios

• Los métodos redefinidos deben mantener la misma semántica de los componentes heredados

• La herencia es solo para generalización/especialización:– Se debe evitar la herencia de código

4. Generaliz. / Especialización Semántica de la herencia

Page 56: 02 Manual ABAP Objects CORT480

56

• Objetos de diferentes clases reaccionan de forma diferente a la misma llamada de métodos.Para hacer esto, las clases implementan el mismo método de diferentes formas.Esto se puede hacer usando la herencia, redefiniendo un método de la superclase en la subclase e implementándolo de forma diferente.

• Cuando una instancia recibe un mensaje para ejecutar un método, el método se ejecuta si ha sido implementado en la clase a la que pertenece la instancia.Si la clase no ha implementado el método, solo lo ha heredado y no lo ha redefinido, entonces busca hacia arriba en el árbol de herencia hasta que encuentra la implementación y lo ejecuta

4. Generaliz. / Especialización Polimorfismo

Page 57: 02 Manual ABAP Objects CORT480

57

4. Generaliz. / Especialización 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

Page 58: 02 Manual ABAP Objects CORT480

58

• Las Interfaces son puntos de contacto externos para las clases; definen los parámetros y los métodos a utilizar, pero sin implementar las reglas de negocio (sólo contienen declaración)

• 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 están definidas

4. Generaliz. / Especialización Interfaces

Page 59: 02 Manual ABAP Objects CORT480

59

• Para una Interface se definen sus componentes del mismo modo que se hacía 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 declaración de

la clase. Esta tiene que estar definida en la parte publica de la clase

– Las operaciones definidas en la Interface se implementan como métodos de la clase

– Los componentes de la clase están 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. / Especialización Interfaces (II)

Page 60: 02 Manual ABAP Objects CORT480

60

4. Generaliz. / Especialización Interfaces: Definición

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.

Page 61: 02 Manual ABAP Objects CORT480

61

4. Generaliz. / Especialización 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 código ABAP tradicional hay que implementar todo en una clase que contenga la implementación de dicha interface

Page 62: 02 Manual ABAP Objects CORT480

62

• Polimorfismo y herencia:– Solo se puede utilizar entre objetos de clases que están

conectadas por una jerarquía de herencia

• Polimorfismo y Interfaces:– Se pueden utilizar con objetos de cualquier clase, siempre que

esas clases tienen implementados los correspondientes Interfaces

4. Generaliz. / Especialización Interfaces vs Herencia

Page 63: 02 Manual ABAP Objects CORT480

63

• Al finalizar estos ejercicios sereis capaces de:– Definir subclases

– Redefinir métodos de la superclase en la subclase

– Implementar llamadas a métodos

– Definir e implementar Interfaces

4. Generaliz. / Especialización Ejercicios

Page 64: 02 Manual ABAP Objects CORT480

64

• Disparar y manejar eventos• Coordinación en el manejo de eventos• Activación/Desactivación de los métodos que

manejan los eventos.• Visibilidad de los eventos.

5. Eventos

Page 65: 02 Manual ABAP Objects CORT480

65

• 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 avión aterriza (altitude = 0). Otras clases perciben esto y lo procesan. Así, el controlador aéreo marca que el avión ya a aterrizado y los pasajeros se quitan el cinturón de seguridad

5. Eventos Características y uso

Airplane

LH Berlin

Air-traffic controller

ATC

Passenger

IF altitude = 0.

RAISE EVENT touched_down.

ENDIF.Miller

Page 66: 02 Manual ABAP Objects CORT480

66

• En ABAP Objects hay ciertos métodos que se conocen como disparadores (triggers) y otros que se conocen como manejadores (handlers). Los triggers son los métodos que disparan un evento, mientras que los handlers son los métodos 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 métodos. Un evento dependiente de instancia en

una clase puede ser disparado por cualquier método en la clase.Los eventos estáticos son disparados por métodos estáticos

• Los eventos se usan para ejecutar una serie de métodos. Estos métodos tienen que:– estar definidos como eventos manejadores (handler) de ese evento. Una clase

puede contener métodos manejadores de eventos para eventos tanto de su propia clase como de otras clases.

– estar registrados en tiempo de ejecución para el evento.

5. Eventos Disparar y manejar eventos (I)

Page 67: 02 Manual ABAP Objects CORT480

67

Declaración de métodos manejadores de eventos• Una clase puede contener métodos manejadores de eventos para eventos tanto de su

propia clase como de otras clases • La interface de un método manejador de eventos sólo puede contener parámetros

formales definidos en la declaración del evento. Los atributos de los parámetros también son adoptados por el evento. El método manejador de eventos no tiene por que usar todos los parámetros pasados en la sentencia RAISE EVENT

Registro de métodos manejadores de eventos• Para permitir a un método manejador de eventos reaccionar a un evento, se tiene que

determinar en tiempo de ejecución 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 estáticos declarados en una clase• Eventos estáticos declarados en una interface

5. Eventos Disparar y manejar eventos (II)

Page 68: 02 Manual ABAP Objects CORT480

68

5. Eventos Definición

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.

Page 69: 02 Manual ABAP Objects CORT480

69

5. Eventos Gestión: puntos clave

• Tanto eventos estáticos como de instancia se pueden lanzar desde métodos de instancia

• En métodos estáticos solo se pueden lanzar eventos estáticos

• Los eventos solo pueden tener parámetros 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 métodos manejadores de eventos se ha ejecutado, el flujo del programa comienza de nuevo

• Si un método manejador de eventos vuelve a lanzar un evento, el flujo del programa se interrumpe de nuevo y todos los métodos manejadores de eventos se ejecutan (bucle)

Page 70: 02 Manual ABAP Objects CORT480

70

5. Eventos Gestión: métodos

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

Schmidton_touched_down

Page 71: 02 Manual ABAP Objects CORT480

71

5. Eventos Gestión: activación

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

Schmidton_touched_down

SETHANDLER

Page 72: 02 Manual ABAP Objects CORT480

72

5. Eventos Gestión: desactivación

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

Schmidton_touched_down

SETHANDLER

Page 73: 02 Manual ABAP Objects CORT480

73

• El manejo de eventos es secuencial• La secuencia en la que se llaman a los métodos 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 métodos que responden al evento

5. Eventos Gestión: características

Evento Métodos que responden al evento

Público

Protegido

Privado

Público, Protegido o Privado

Protegido o Privado

Privado

Page 74: 02 Manual ABAP Objects CORT480

74

• Al finalizar estos ejercicios sereis capaces de:– Definir y lanzar eventos

5. Eventos Ejercicios

Page 75: 02 Manual ABAP Objects CORT480

75

• Desktop Office Integration:– El objetivo de este ejercicio es aprender a

utilizar los "container" de SAP para insertar objetos ( docuementos office, páginas html....) en SAP

• ALV Tree• Demos creadas en SAP (transacción DWDM )

6. Casos Prácticos