1 / 87

CORT480 - Programación ABAP Orientada a Objetos

CORT480 - Programación ABAP Orientada a Objetos. Contenido. Introducción Análisis y Diseño Principios Generalización / Especialización Eventos Excepciones Casos Prácticos. Objetivos. Comprender los siguientes principios: Clases Herencia Interfaces Polimorfismo Eventos

orien
Download Presentation

CORT480 - Programación ABAP Orientada a Objetos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CORT480 - Programación ABAP Orientada a Objetos

  2. Contenido • Introducción • Análisis y Diseño • Principios • Generalización / Especialización • Eventos • Excepciones • Casos Prácticos

  3. Objetivos • Comprender los siguientes principios: • Clases • Herencia • Interfaces • Polimorfismo • Eventos • Excepciones • Conocer objetos standares utililes a utilizar en proyectos

  4. 1. Introducción • Programación procedural • Programación Orientada a Objetos

  5. 1. Introducción Programación Procedural • 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

  6. Method Method 1. IntroducciónProgramación Orientada a Objetos • ¿Qué son los objetos? • Son una abstracción del mundo real • Unidades compuestas de datos y funciones pertenecientes a dichos datos AAvión Data

  7. Method Method 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: Boeing 727 lcl_Avión Nombre Plazas Subir_pasajeros Despegar Data

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

  9. 1. Introducción Ventajas de la OOP (II) • 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

  10. 1. Introducción ABAP Objects • 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

  11. 2. Análisis y diseño • UML • Diagramas de Clases • Asociaciones

  12. 2. Análisis y diseño ¿Qué es UML? • Un lenguaje de Modelado Orientado a Objetos Unified Modeling Languaje • 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

  13. 2. Análisis y diseño Diagramas de Clases • 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

  14. 2. Análisis y diseño Diagrama de Clases: Ejemplo 1 0..* 0..* 1 lcl_flight lcl_flightbooking lcl_flightcustomer 1 1 lcl_seat 1..* lcl_airplane lcl_wing 1 1..* 1 lcl_cargo_airplane lcl_passenger_airplane 1

  15. 2. Análisis y diseño Asociaciones (1) • 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

  16. 1 1..* lcl_airplane lcl_wing 1 0..* lcl_flight lcl_flightbooking 2. Análisis y diseño Tipos de asociaciones Agregación y composición Símbolo de Agregación • Agregación • Tipos Especiales de asociaciones • Relación completa Símbolo de Composición • Composición • Tipo especial de Agregación • Depende de la Existencia para • para la relación completa

  17. cl_airplane Especialización cl_cargo_airplane cl_cargo_airplane cl_airplane Generalización cl_cargo_airplane cl_cargo_airplane 2. Análisis y diseño Tipos de Asociaciones Especialización y Generalización

  18. 3. Principios • Objetos • Clases • Atributos • Métodos • Ejercicios

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

  20. 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. 3. Principios Clases Clases: Plantillas para los objetos Componentes de una clase: Atributos: Son los datos y representan el status del objeto Métodos: Código ejecutable, determinan el comportamiento del objeto

  21. CLASS <classname> IMPLEMENTATION. ENDCLASS.. CLASS <classname> DEFINITION. ENDCLASS. 3. Principios Clases Locales y Globales • Las clases Globales se definen en el generador de clases en el ABAP Workbench (SE24) y todos los programas ABAP pueden acceder a las clases globales. • Las clases locales se definen en un programa ABAP y solo pueden ser invocadas desde los programas en que se definen.

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

  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>, variable3LIKE <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 CLASS lcl_airplane DEFINITION. PUBLIC SECTION. DATA: name TYPE string. PRIVATE SECTION. DATA: weigth TYPE saplane-weigth. ENDCLASS. Atributos Públicos Son accesibles (usuarios y métodos). Acceso directo. 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. PrincipiosAtributos 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 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. 3. PrincipiosMétodos • 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.

  27. 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. 3. PrincipiosMétodos: Definición

  28. 3. PrincipiosMétodos: Visibilidad CLASS lcl_airplane DEFINITION. PUBLIC SECTION. METHODS: set_name importing im_name. PRIVATE SECTION. METHODS: init_name. DATA: name TYPE string. ENDCLASS. 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 IMPLEMENTATION. METHOD: init_name. Name = ‘No Name’. ENDMETHOD. METHOD: set_name. Name = im_name. ENDMETHOD.

  29. 3. PrincipiosMétodos: Instance Vs. Static CLASS lcl_airplaneDEFINITION. PUBLIC SECTION. METHODS: set_name IMPORTING im_name TYPE string. PRIVATE SECTION. DATA: name TYPE string. CLASS-DATA: count type I. ENDCLASS. • 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 CLASS lcl_airplaneDEFINITION. PUBLIC SECTION. CLASS-METHODS: get_counter RETURNING VALUE (re_count) TYPE I. PRIVATE SECTION. DATA: name TYPE string. CLASS-DATA: count type I. ENDCLASS. • 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

  30. Lcl_airplane Name weigth ….. Creación del objeto Name: LH Boston Weight: 30000kg 3. PrincipiosCreación de Objetos • Para poder crear objetos, y para poder acceder a los objetos ya existentes, es necesario la utilización de variables de referencia.

  31. airplane airplane 3. Principios Creación de objetos y asignaciones • Asignación de referencias: DATA: airplaneTYPE REF TO lcl_airplane, airplane_tab TYPE TABLE OF REF TO lcl_airplane. CREATE OBJECT airplane EXPORTING im_name = ‘LH_Berlin’... APPEND airplane TO airplane_tab. Name:LH_Berlin Weigth: 0Kg Airplane_tab CREATE OBJECT airplane EXPORTING im_name = ‘LH_Paris... APPEND airplane TO airplane_tab. Name:LH_Berlin Weigth: 0Kg LOOP AT TO airplane_tab INTO airplane. *work with the instance ENDLOOP. Airplane_tab Name: LH_Paris Weigth: 0Kg

  32. 3. PrincipiosMétodos • 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.

  33. 3. PrincipiosLlamando a métodos • 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.

  34. 3. PrincipiosLlamadas 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. PrincipiosLlamadas a métodos: Ejemplo (II) En ciertos casos se puede utilizar una forma abreviada para llamar al método: 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)

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

  37. 3. PrincipiosConstructor: definición

  38. 3. PrincipiosConstructor: 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. PrincipiosConstructores 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. 3. PrincipiosEjercicios • 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.

  41. 4. Generaliz. / Especialización • Herencia • Cast • Polimorfismo • Interfaces

  42. Lcl_passenger_airplane Lcl_cargo_airplane -seats -emergency_exits …. -name -weight …. + get_seats ( ): i ….. + get_cargo ( ): ty_cargo ….. 4. Generaliz. / Especialización Herencia Lcl_airplane -name -weight …. + get_fuel_level ( ): ty_level + estimate_fuel_consuption ( ) : i …..

  43. 4. Generaliz. / Especialización Herencia: Concepto • 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)

  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. 4. Generaliz. / EspecializaciónSuperclases – Subclases • 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

  46. 4. Generaliz. / Especialización Herencia y visibilidad • 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

  47. 4. Generaliz. / Especialización Herencia y visibilidad 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. • 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. Lcl_airplane + public # protected - private # tank : lcl_tank - name : string + get_name() : string

  48. CLASS lcl_airplane IMPLEMENTATION. METHOD CONSTRUCTOR. name = im_name. ENDMETHOD. ENDCLASS. CLASS lcl_airplane DEFINITION. PUBLIC SECTION. METHODS CONSTRUCTOR IMPORTING im_name TYPE string. ENDCLASS. 4. Generaliz. / Especialización La Herencia y el Constructor (I) CLASS lcl_cargo_airplane DEFINITION INHERITING FROM lcl_airplane. PUBLIC SECTION. METHODS: CONSTRUCTOR IMPORTING im_name TYPE string im_cargo TYPE ty_cargo. PRIVATE SECTION. DATA: cargo TYPE ty_cargo. ENDCLASS. CLASS lcl_cargo_airplane IMPLEMENTATION. METHOD CONSTRUCTOR. CALL METHOD SUPER->CONSTRUCTOR EXPORTING im_name = name. Cargo = im_cargo. ENDMETHOD. ENDCLASS.

  49. 4. Generaliz. / Especialización La Herencia y el Constructor (II) DATA: ref2 TYPE REF TO lcl_2, ref3 TYPE REF TO lcl_3. CREATE OBJECT ref2 EXPORTING im = 100. CREATE OBJECT ref3 EXPORTING im_1 = 100 im_2 = 1000. Lcl_1 # a1 : i + constructor (im_a1:i) Lcl_2 • La clase a la que pertenece la instacia a crear tiene un constructor • Rellena sus 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. Lcl_3 # a2:: i + constructor ( im_a1:i, im_a2:i )

  50. 4. Generaliz. / EspecializaciónRedefinición de métodos • 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.

More Related