SAP ABAP - Interfaces
Al igual que las clases en ABAP, las interfaces actúan como tipos de datos para objetos. Los componentes de las interfaces son los mismos que los componentes de las clases. A diferencia de la declaración de clases, la declaración de una interfaz no incluye las secciones de visibilidad. Esto se debe a que los componentes definidos en la declaración de una interfaz siempre están integrados en la sección de visibilidad pública de las clases.
Las interfaces se utilizan cuando dos clases similares tienen un método con el mismo nombre, pero las funcionalidades son diferentes entre sí. Las interfaces pueden parecer similares a las clases, pero las funciones definidas en una interfaz se implementan en una clase para ampliar el alcance de esa clase. Las interfaces junto con la función de herencia proporcionan una base para el polimorfismo. Esto se debe a que un método definido en una interfaz puede comportarse de manera diferente en diferentes clases.
A continuación se muestra el formato general para crear una interfaz:
INTERFACE <intf_name>.
DATA.....
CLASS-DATA.....
METHODS.....
CLASS-METHODS.....
ENDINTERFACE.
En esta sintaxis, <intf_name> representa el nombre de una interfaz. Las declaraciones DATA y CLASSDATA se pueden utilizar para definir la instancia y los atributos estáticos de la interfaz, respectivamente. Las sentencias METHODS y CLASS-METHODS se pueden utilizar para definir la instancia y los métodos estáticos de la interfaz, respectivamente. Como la definición de una interfaz no incluye la clase de implementación, no es necesario agregar la cláusula DEFINITION en la declaración de una interfaz.
Note- Todos los métodos de una interfaz son abstractos. Están completamente declarados incluyendo su interfaz de parámetros, pero no implementados en la interfaz. Todas las clases que quieran utilizar una interfaz deben implementar todos los métodos de la interfaz. De lo contrario, la clase se convierte en una clase abstracta.
Usamos la siguiente sintaxis en la parte de implementación de la clase:
INTERFACE <intf_name>.
En esta sintaxis, <intf_name> representa el nombre de una interfaz. Tenga en cuenta que esta sintaxis debe usarse en la sección pública de la clase.
La siguiente sintaxis se utiliza para implementar los métodos de una interfaz dentro de la implementación de una clase:
METHOD <intf_name~method_m>.
<statements>.
ENDMETHOD.
En esta sintaxis, <intf_name ~ method_m> representa el nombre completamente declarado de un método de la interfaz <intf_name>.
Ejemplo
Report ZINTERFACE1.
INTERFACE my_interface1.
Methods msg.
ENDINTERFACE.
CLASS num_counter Definition.
PUBLIC Section.
INTERFACES my_interface1.
Methods add_number.
PRIVATE Section.
Data num Type I.
ENDCLASS.
CLASS num_counter Implementation.
Method my_interface1~msg.
Write: / 'The number is', num.
EndMethod.
Method add_number.
ADD 7 TO num.
EndMethod.
ENDCLASS.
CLASS drive1 Definition.
PUBLIC Section.
INTERFACES my_interface1.
Methods speed1.
PRIVATE Section.
Data wheel1 Type I.
ENDCLASS.
CLASS drive1 Implementation.
Method my_interface1~msg.
Write: / 'Total number of wheels is', wheel1.
EndMethod.
Method speed1.
Add 4 To wheel1.
EndMethod.
ENDCLASS.
Start-Of-Selection.
Data object1 Type Ref To num_counter.
Create Object object1.
CALL Method object1→add_number.
CALL Method object1→my_interface1~msg.
Data object2 Type Ref To drive1.
Create Object object2.
CALL Method object2→speed1.
CALL Method object2→my_interface1~msg.
El código anterior produce la siguiente salida:
The number is 7
Total number of wheels is 4
En el ejemplo anterior, my_interface1 es el nombre de una interfaz que contiene el método 'msg'. A continuación, se definen e implementan dos clases, num_counter y drive1. Ambas clases implementan el método 'msg' y también métodos específicos que definen el comportamiento de sus respectivas instancias, como los métodos add_number y speed1.
Note - Los métodos add_number y speed1 son específicos de las clases respectivas.