✒️ABAP POO - Friends

ABAP POO Friends

FRIENDS (Relaciones de Amistad)

Definición de relaciones de amistad.

En algunos casos, las clases tienen que trabajar tan estrechamente que una clase necesita acceder a los componentes protegidos y privados de otras clases. Del mismo modo, es posible que una clase pueda crear instancias de otras clases sin importar la visibilidad del constructor. Para evitar que estas opciones estén disponibles para todos los usuarios de la clase, utilice el concepto de clase de amistad. Una clase puede garantizar amistad a otras clases e interfaces y, por lo tanto, a todas las clases que implementen la interfaz.

Para crear la amistad, utilice el suplemento FRIENDS de la sentencia CLASS o la pestaña FRIENDS en el generador de clases. Todas las clases e interfaces a las que se garantice amistad están enumeradas en este lugar.

La garantía de amistad es unilateral.

Una clase que garantice una amistad no es automáticamente una amiga de los amigos de la clase. Si una clase que garantiza amistad quiere acceder a los componentes que no son públicos de un amigo, este amigo debe garantizarle su amistad explícitamente.

Implementación de clases factory.

Una aplicación habitual del concepto de amigos (FRIENDS) es la definición de una clase factory. Como el método factory, una clase factory crea y administra las instancias de una clase. Al subcontratar la administración para una clase dedicada, la clase en sí se mantiene más pequeña y fácil de comprender.

En el ejemplo, LCL_FACTORY funciona como una clase factory para los aviones. La clase LCL_FACTORY proporciona el método público CREATE_AIRPLANE en el que CREATE_AIRPLANE instancia la clase LCL_AIRPLANE o devuelve una referencia a una instancia existente. Para restringir la instanciación, la clase LCL_AIRPLANE se define con el suplemento CREATE PRIVATE. Al añadir FRIENDS LCL_FACTORY, la amistad permite que únicamente la clase factory pueda crear instancias de aviones y acceder a los atributos privado.

Normalmente existe una estricta división entre clases externas (PUBLIC) e internas (PROTECTED y PRIVATE). Un consumidor solo puede acceder a los componentes públicos de una clase. Esto permite cambiar la implementación interna de una clase sin invalidar a sus consumidores.

En raras ocasiones, sin embargo, las clases tienen que trabajar tan estrechamente juntas que requieren acceso a sus componentes mutuamente invisibles. El concepto de amistad entre clases se desarrolló para que estos componentes no tengan que estar disponibles para todos los consumidores al mismo tiempo.

FRIENDS

Una clase puede otorgar amistad a otras clases e interfaces (y por lo tanto a todas las clases que implementan esta interfaz). Esta relación se crea usando las adiciones de FRIENDS de la declaración CLASS ... DEFINITION especificando todas las clases e interfaces a las que se les otorgará amistad. A estos amigos se les concede acceso a todos los componentes de la clase que ofrecen la amistad, independientemente de su sección de visibilidad o la adición SOLO LECTURA y siempre pueden crear instancias de esta clase independientemente de la adición CREATE de la declaración CLASS.

Nota: Recomendamos precaución al otorgar una amistad de interfaz global. Cada clase que implementa la interfaz se convierte en amiga de la clase que concede la amistad. Si se utiliza una interfaz global, el alcance de esta amistad debería limitarse utilizando el concepto de paquete, por ejemplo.

La amistad es unilateral

La amistad es un principio unilateral. Una clase que otorga amistad no es automáticamente amiga de sus amigos. Si la clase que otorga la amistad quiere acceder a los componentes privados o protegidos de su amigo, este último debe otorgar la amistad de manera explícita.

Herencia, interfaces y amistad

Las subclases de amigos e interfaces a las que se les asigna un amigo como interfaz de componentes también se convierten en amigos. Por esta razón, se debe tener mucho cuidado al definir una amistad. Cuanto más alto esté un amigo en el árbol de herencia, mayor será el número de subclases que pueden acceder a todos los componentes de la clase que otorgan amistad. Una clase que otorga amistad al objeto de la clase raíz gana todas las clases de Objetos ABAP como amigos y, por lo tanto, no tiene privacidad alguna. Por el contrario, es relativamente seguro otorgar amistad a una clase final, ya que esta clase por sí sola se especifica como un amigo.

La amistad concedida no se hereda, a diferencia del atributo de amigo. Un amigo de una superclase no es, por tanto, automáticamente un amigo de sus subclases.

Las adiciones de FRIENDS

La declaración CLASE ... DEFINICIÓN tiene tres adiciones de FRIENDS:

... FRIENDS cif1 ... cifn

Esta adición se puede especificar al definir cualquier clase local de un programa. La amistad se puede otorgar a todas las clases o interfaces del mismo programa y a las clases e interfaces en la biblioteca de clases. Tenga en cuenta, en particular, que las clases locales de un grupo de clases pueden otorgar amistad a la clase global de ese grupo de clases.

... GLOBAL FRIENDS cif1 ... cifn

Esta adición solo se puede usar con clases globales y es generada por Class Builder cuando se crea. La amistad se puede otorgar a todas las demás clases e interfaces globales.

... LOCAL FRIENDS cif1 ... cifn

Esta adición no se especifica cuando se declara la clase, sino que define su propia declaración. En un grupo de clases, la clase global puede usar esta declaración para otorgar amistad a las clases e interfaces locales de su propio grupo de clases. Mientras que Class Builder genera la declaración CLASS para la declaración de clase real, la declaración

CLASS ... DEFINITION LOCAL FRIENDS cif1 ... cifn.

se ingresa directamente en el programa de inclusión para definir clases e interfaces locales.


Sobre el autor

Publicación académica de Enrique Horacio Lugo Lander, en su ámbito de estudios para el Máster ABAP POO.

SAP SemiSenior

Enrique Horacio Lugo Lander

Profesión: Tsu en Informática - Argentina - Legajo: GB93C

✒️Autor de: 30 Publicaciones Académicas

🎓Egresado del módulo:

Certificación Académica de Enrique Lugo

 

:: Al igual que Enrique ¿Usted está dispuesto a aprender ABAP POO?

El lunes 18 Octubre 2021 comenzamos el 🎓Máster ABAP POO.
Juntos para realizar sus más grandes desafíos!

 Cargando presentación, aguarde unos instantes...

 

 

+Recursos Gratuitos en CVOSOFT:

¡Lo importante es aprender!, por eso en CVOSOFT la comunidad SAP más grande de habla hispana, ponemos a su alcance los siguientes recursos abiertos libres y gratuitos:

Buscador de Publicaciones:

 

 

Consultas y Soporte

👋Hola! Estamos listos para ayudarle con el soporte que su carrera merece.

Acceda sección contacto y seleccione canal de comunicación más cómodo para usted.

🤝Aguardamos su mensaje, ¡Éxitos!

 


 

👉Que las empresas tomen en serio sus estudios es muy importante para que su inversión educativa tenga sentido.
Las empresas líderes de United States y del Mundo confían a CVOSOFT su recurso más valioso, la formación de su gente.

¿Quieres conocerlas?