5.5. - Interfaces
5.5.1. - Introducción a interfaces
Las clases, sus instancias y el acceso a los objetos usando variables referenciadas son la base de la POO. Hay veces en las que es necesario para las clases similares proporcionar funcionalidades similares pero que están codificadas en cada clase, las cuales dan un punto de contacto común con el usuario.
5.5.2. - ¿Qué son las interfaces?
Son estructuras independientes que se pueden implementar en una clase para extender el ámbito de esa clase. El ámbito específico de una clase viene definido por sus componentes y sus secciones de visibilidad. Los componentes públicos de una clase definen su ámbito público, ya que todos sus atributos y los parámetros de los métodos pueden ser utilizados por todos los usuarios.
Las interfaces junto con la herencia proporcionan uno de los pilares básicos del polimorfismo, ya que permiten que un solo método con una interface se comporte distinto en diferentes clases.
5.5.3. - Definición de una interface
Se pueden definir globalmente en el repositorio R/3 o localmente. La definición de una interface local se realiza mediante la palabra reservada “INTERFACE<nombre_interface> …. ENDINTERFACE.”.
La definición contiene la declaración de todos los componentes de la interface. Se pueden definir los mismos componentes en una interface que en una clase.
Los componentes no tienen que ser asignados a ninguna sección de visibilidad ya que automáticamente pertenecen a la sección pública de la clase.
Las interfaces no tienen parte de implementación, ya que sus métodos son implementados en la clase que implementa la interface.
5.5.4. - Implementación de interfaces
Cuando se implementa una interface en una clase, los componentes de la interface se añaden al resto de componentes de la sección pública. Un componente de la interface puede ser redireccionado como si fuese un miembro de la clase.
La clase tiene que implementar los métodos de todas las interfaces implementadas en ella. La parte de implementación de la clase debe contener la implementación de cada método de la interface.
Las interfaces pueden ser implementadas por diferentes clases. Cada una de las clases es ampliada con el mismo conjunto de componentes, aunque los métodos de la interface pueden ser implementados de manera distinta en cada clase.
5.5.5. - Referencias a interfaces
Las variables referenciadas permiten acceder a los objetos. En lugar de crear variables referenciadas con referencia a una clase, se pueden crear con referencia a una interface. Este tipo de variables referenciadas puede contener referencias a los objetos de las clases que se implementen esa interface. La definición se realiza con “TYPE REF TO <interface>”.
Una variable referenciada con el tipo referenciado a una interface se llama variable referenciada a una interface. Una referencia a interface permite usar la declaración “<ireferencia>-><componente>” y acceder a todos los componentes visibles de la interface.
5.5.6. - Referencias a interfaces
Para crear un objeto de la clase, primero se tiene que haber declarado una variable referenciada con referencia a la clase. Si la clase implementa una interface, se puede usar la asignación “<ireferencia> = <creferencia>”, entre la variable referenciada a la clase y una referencia a la interface, para hacer que la referencia a interface apunte al mismo objeto que la referencia a la clase.
Si la interface contiene un atributo dependiente de instancia y un método dependiente de instancia, se puede direccionar los componentes de la interface de las siguientes formas:
1. Usando la variable referenciada a una clase
a. Para acceder a un atributo
i. <creferencia>-><interface~atributo>
b. Para acceder al método
i. CALL METHOD <creferencia>-><interface~método>
2. Usando la variable referenciada a una interface
a. Para acceder a un atributo
i. <ireferencia>-><atributo>
b. Para acceder al método
i. CALL METHOD <irefenrecia>-><método>
3. Solo se puede usar el nombre de la interface para acceder a las constantes, componentes estáticos estén implicados
a. Para acceder a una constante
i. <interface>=><constante>
4. Demás componentes estáticos de una interface, solo usar referencias a objetos o la clase que implementa la interface
a. Para acceder a un atributo estático
i. <clase>=><interface~atributo>
b. Para llamar a un método estático
i. CALL METHOD <class>=><intf~meth>
5.5.7. - Ejemplos de interfaces
Ejemplo 1
Interface: Estado
Clases: Contador, bicicleta.
Visibilidad: Pública
Evento: START-OF-SELECTION
Objetos: Cuenta, bici.
Ejecutar métodos: cuenta->incrementar | bici->manejar
Almacenar en: TI_ESTADO
Llamar al método: IMPRIMIR
Salida por pantalla
Si se definen interfaces globalmente, son almacenadas en un tipo especial de programa llamado “INTERFACE-POOL”, que es del tipo J y sirve como contenedor del respectivo tipo de objeto. Cada pool de interfaces, contiene la definición de una sola interface. El programa es generado automáticamente cuando se genera la interface global.