Herencia en SAP ABAP

GoHost > Blog > abap > Herencia en SAP ABAP

Herencia en SAP ABAP

Herencia en SAP ABAP

WhatsApp

Introducción

La herencia es un concepto fundamental en la programación orientada a objetos (OOP) y es especialmente relevante en SAP ABAP. Permite crear nuevas clases que heredan propiedades y métodos de clases ya existentes, facilitando la reutilización del código, la extensibilidad y el mantenimiento de los programas. En este artículo, exploraremos en detalle cómo funciona la herencia en SAP ABAP, sus beneficios y ejemplos prácticos que ilustran su implementación.

¿Qué es la Herencia?

En términos simples, la herencia permite que una clase (denominada subclase o clase derivada) herede atributos y comportamientos (métodos) de otra clase (denominada superclase o clase base). La herencia se puede ver como una relación «es un tipo de», donde la subclase puede ser considerada como un tipo especializado de la superclase.

Por ejemplo, si tenemos una superclase llamada Vehículo, una subclase llamada Auto puede heredar características de Vehículo, como el método arrancar() y las propiedades como color y marca.

CLASS Vehículo DEFINITION.
  PUBLIC SECTION.
    DATA: color TYPE string.
    DATA: marca TYPE string.
    METHODS: arrancar.
ENDCLASS.

CLASS Vehículo IMPLEMENTATION.
  METHOD arrancar.
    WRITE: / 'El vehículo ha arrancado'.
  ENDMETHOD.
ENDCLASS.

CLASS Auto DEFINITION INHERITING FROM Vehículo.
  PUBLIC SECTION.
    DATA: númeroPuertas TYPE i.
ENDCLASS.

CLASS Auto IMPLEMENTATION.
  METHOD arrancar.
    WRITE: / 'El auto ha arrancado'.
    SUPER->arrancar( ). " Llamada al método de la superclase
  ENDMETHOD.
ENDCLASS.

En el ejemplo anterior, la clase Auto hereda todas las propiedades y métodos de la clase Vehículo, permitiendo un enfoque más modular en el desarrollo.

Tipos de Herencia

En SAP ABAP, se permite la herencia simple, lo que significa que una clase solo puede heredar de una única superclase. Este enfoque ayuda a evitar la complejidad que podría surgir a partir de la herencia múltiple, donde una clase podría heredar características de múltiples clases.

La herencia simple tiene varias ventajas:

  1. Sencillez: Facilita la comprensión de la estructura del código.
  2. Modularidad: Permite dividir el código en componentes manejables.
  3. Reutilización: Favorece el uso de código existente sin necesidad de duplicarlo.

Cómo Implementar la Herencia en ABAP

Definición de Clases y Métodos

La definición de una superclase y una subclase se realiza mediante la declaración de clases en ABAP, utilizando la palabra clave CLASS. La superclase contendrá los métodos y atributos comunes que luego serán heredados por la subclase.

CLASSCliente DEFINITION.
  PUBLIC SECTION.
    DATA: nombre TYPE string.
    METHODS: mostrarNombre.
ENDCLASS.

CLASS Cliente IMPLEMENTATION.
  METHOD mostrarNombre.
    WRITE: / 'Nombre del cliente:', nombre.
  ENDMETHOD.
ENDCLASS.

CLASS ClienteVIP DEFINITION INHERITING FROM Cliente.
  PUBLIC SECTION.
    DATA: descuento TYPE i.
ENDCLASS.

CLASS ClienteVIP IMPLEMENTATION.
  METHOD mostrarNombre.
    WRITE: / 'Cliente VIP:', nombre, 'Descuento:', descuento.
    SUPER->mostrarNombre( ).
  ENDMETHOD.
ENDCLASS.

En este ejemplo, la clase ClienteVIP hereda el método mostrarNombre de Cliente, pero también lo sobreescribe para añadir información adicional.

Sobre-escritura de Métodos

La herencia también permite sobre-escribir métodos. Esto se logra redefiniendo un método en la subclase que tiene el mismo nombre que un método en la superclase. En este caso, se puede utilizar la palabra clave SUPER para llamar al método de la superclase.

CLASS ClienteVIP IMPLEMENTATION.
  METHOD mostrarNombre.
    WRITE: / 'Cliente VIP:', nombre, 'Descuento:', descuento.
    SUPER->mostrarNombre( ). " Invoca el método de la superclase
  ENDMETHOD.
ENDCLASS.

Acceso a Atributos

La subclase puede acceder a los atributos de la superclase directamente si son públicos. También puede tener sus propios atributos.

Beneficios de la Herencia

  1. Eficiencia: Minimiza el esfuerzo de codificación, ya que no es necesario volver a escribir código común.
  2. Mantenimiento: Cualquier modificación en la superclase se propagará automáticamente a todas las subclases, facilitando el mantenimiento y la actualización del código.
  3. Organización: Mejora la organización del código en jerarquías lógicas, lo que facilita su comprensión.

Ejemplo Práctico

Imaginemos que estamos desarrollando un sistema de gestión de empleados. Tendremos una clase base denominada Empleado, y a partir de esta clase, crearemos subclases como Gerente y Desarrollador.

CLASS Empleado DEFINITION.
  PUBLIC SECTION.
    DATA: nombre TYPE string,
          salario TYPE p DECIMALS 2.
    METHODS: calcularSalario.
ENDCLASS.

CLASS Empleado IMPLEMENTATION.
  METHOD calcularSalario.
    WRITE: / 'Salario de', nombre, ':', salario.
  ENDMETHOD.
ENDCLASS.

CLASS Gerente DEFINITION INHERITING FROM Empleado.
  PUBLIC SECTION.
    DATA: bonus TYPE p DECIMALS 2.
    METHODS: calcularSalario.
ENDCLASS.

CLASS Gerente IMPLEMENTATION.
  METHOD calcularSalario.
    salario = salario + bonus.
    WRITE: / 'Salario de Gerente', nombre, ':', salario.
  ENDMETHOD.
ENDCLASS.

CLASS Desarrollador DEFINITION INHERITING FROM Empleado.
  PUBLIC SECTION.
    DATA: horasExtra TYPE i.
    METHODS: calcularSalario.
ENDCLASS.

CLASS Desarrollador IMPLEMENTATION.
  METHOD calcularSalario.
    salario = salario + (horasExtra * 100). " Supongamos que cada hora extra vale 100
    WRITE: / 'Salario de Desarrollador', nombre, ':', salario.
  ENDMETHOD.
ENDCLASS.

En este caso, tanto Gerente como Desarrollador heredan el método calcularSalario de Empleado, pero cada uno lo implementa de manera específica para su tipo de empleado.

Mejores Prácticas

  1. Uso de Modificadores de Acceso: Asegúrate de definir correctamente los modificadores de acceso (PUBLIC, PROTECTED, PRIVATE) para controlar qué atributos y métodos son accesibles desde las subclases.
  2. DocumeEntazión: Comenta tu código y proporciona documentación clara para facilitar el entendimiento del uso de la herencia.
  3. Limita la Profundidad de Herencia: Aunque la herencia es útil, evita crear jerarquías complejas. Mantén la jerarquía tan plana como sea posible para facilitar el mantenimiento.

Conclusiones

La herencia es un pilar fundamental de la programación orientada a objetos en SAP ABAP. Facilita la reutilización del código, mejora la organización del mismo y permite el mantenimiento eficiente de las aplicaciones. Al comprender y aplicar correctamente la herencia, los desarrolladores pueden construir aplicaciones más robustas y escalables.

Ver más temas relacionados