✒️ABAP POO Friends
ABAP POO Friends
FRIENDS
ADICION FRIENDS, para qué y cómo se implementa.
En los lenguajes POO el acceso a los componentes privados y protegidos, ya sean atributos o métodos, está prohibido.
FRIENDS permite dar acceso a atributos protegidos y privados de otra clase.
Esta Adición que se agrega en una clase permite a otra clase que pueda acceder a sus componentes protegidos y privados.
La adición FRIENDS se debe agregar a la clase cuyos atributos necesitan ser accedidos.
CLASS lcl_clase1 DEFINITION FRIENDS lcl_clase2.
…
…
ENDCLASS.
Por ejemplo, declaramos la clase local (LCL) LCL_ME y queremos que otra clase local (LCL) LCL_AMIGA pueda acceder a los componentes de la clase LCL_ME, se haría de este modo:
CLASS lcl_me DEFINITION FRIENDS lcl_friend.
PRIVATE SECTION.
……DATA: a1 TYPE string VALUE ‘Soy A1 de la clase LCL_ME’.
ENDCLASS.
Otro ejemplo.
Definimos la clase LCL_AMIGA y la clase LCL_MIA que será la FRIEND de LCL_AMIGA, de modo que el método ACCESO_A1_DELA_CLASE1 acceda a los componentes privados de la clase LCL_MIA:
CLASS lcl_amiga DEFINTION.
…PUBLIC SECITON.
……METHODS: acceso_a1_dela_clase1.
ENDCLASS.
CLASS lcl_mia DEFINITION FRIENDS lcl_amiga.
…PRIVATE SECTION.
……DATA: a1 TYPE string VALUE ‘Soy A1 de la clase LCL_ME’.
ENDCLASS
CLASS lcl_amiga IMPLEMENTATION.
…METHOD acceso_a1_dela_clase1.
……DATA: lo_clase1 TYPE REF TO lcl_mia.
……CREATE OBJECT lo_clase1.
……WRITE: /lo_class1->a1.
…ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
…DATA: lofrien TYPE REF TO lcl_friend.
…CREATE OBJECT lo_friend.
…lo_friend->acceso_a1_dela_clase1( ).
También se puede especificar la adición FRIEND usando una interface como amiga. Si hacemos esto entonces todas las clases que implementen la interface, tendrán acceso garantizado a la clase.
INTERFACE lif_friend.
…METHODS: acceso_a1_dela_clase1.
ENDINTERFACE.
CLASS lcl_frined DEFINITION.
…PUBLIC SECTION.
……INTERFACES: lif_friend.
ENDCLASS.
CLASS lcl_friend2 DEFINTION.
…PUBLIC SECTION.
……INTERFACES: lif_friend.
ENDCLASS
CLASS lcl_me DEFINTION FRIENDS lif_friend.
…PRIVATE SECTION.
……DATA: a1 TYPE string VALUE ‘Soy A1 de la clase LCL_ME’.
ENDCLASS
CLASS lcl_friend IMPLEMENTATION.
…METHOD lif_friend~access_a1_dela_clase1.
……DATA: lo_clase1 TYPE REF TO lcl_me.
……CREATR OBJETC lo_class1.
……WRTIE: / ‘Accedemos a A1 de la clase LCL_FRIEND a través de LIF_FRIEND’.
……WRITE: / lo_clase1->a1.
…ENDMETHOD.
ENDCLASS
CLASS lcl_friend_2 IMPLEMENTATION.
…METHOD lif_friend~access_a1_dela_clase1.
……DATA: lo_clase1 TYPE REF TO lcl_me.
……CREATR OBJETC lo_class1.
……WRTIE: / ‘Accedemos a A1 de la clase LCL_FRIEND_2 a través de LIF_FRIEND’.
……WRITE: / lo_clase1->a1.
…ENDMETHOD.
ENDCLASS
START-OF-SELECTION.
DATA: lo_friend TYPE REF TO lif_friend.
CREATE OBJECT lo_friend TYPE lcl_friend.
lo_friend ->acceso_a1_dela_clase1( ).
CREATE OBJECT lo_friend TYPE lcl_friend2.
NOTA: las subclases de la clase local LCL_ME no son amigas, es decir no heredan la adición FRIENDS de su superclase.
La relación de amistad entre calases debe usar con mucha precaución. La relación de amistad son unilaterales. Una clase que es amiga de otra clase no es amiga de las clases amigas de la otra clase.
Si na clase es amiga de object, tendrá acceso a todas las clases.
Lo normal es ser amiga de clases finales.
 
 
 
Sobre el autor
Publicación académica de Josep Antoni Lopez Moyano, en su ámbito de estudios para el Máster ABAP POO.
Josep Antoni Lopez Moyano
Profesión: It Manager - España - Legajo: QP26P
✒️Autor de: 375 Publicaciones Académicas
🎓Egresado de los módulos:
- Carrera Consultor en SAP HCM Nivel Inicial
- Carrera Consultor Basis NetWeaver Nivel Avanzado
- Carrera Consultor Basis NetWeaver Nivel Inicial
- Máster Funcional ABAP
- Máster ABAP Orientado a Objetos
- Carrera Consultor ABAP Nivel Avanzado
- Carrera Consultor ABAP Nivel Inicial