02 manual abap objects cort480
TRANSCRIPT
CORT480 - Programación ABAP Orientada a Objetos
2
1. Introducción
2. Análisis y Diseño
3. Principios
4. Generalización / Especialización
5. Eventos
6. Casos Prácticos
Contenido
3
Comprender los siguientes principios:• Clases• Herencia• Interfaces• Polimorfismo• Eventos
Conocer objetos standares utililes a utilizar en proyectos
Objetivos
4
• Programación procedural
• Programación Orientada a Objetos
1. Introducción
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
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
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
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)
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)
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
11
• UML
• Diagramas de Clases
• Asociaciones
2. Análisis y diseño
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?
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
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
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)
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
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
18
• Objetos• Clases• Atributos• Métodos• Ejercicios
3. Principios
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
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
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 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
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.
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
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.
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
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.
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.
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.
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
…..
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
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
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
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.
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:
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
37
3. Principios Constructor: definición
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 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.
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
41
• Herencia• Cast• Polimorfismo• Interfaces
4. Generaliz. / Especialización
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…..
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
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.
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
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
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
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.
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.
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
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.
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.
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
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
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
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
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
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
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)
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.
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
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
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
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
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
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)
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)
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.
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)
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
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
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
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
74
• Al finalizar estos ejercicios sereis capaces de:– Definir y lanzar eventos
5. Eventos Ejercicios
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