If you wanna be my lover – Das FRIENDS-Konzept

Ich programmiere nun schon einige Zeit objektorientiert. Trotzdem – und das ist ja auch das schöne daran – gibt es immer wieder Themen, die in meiner Vorstellung anders sind, als sie sich dann tatsächlich darstellen. Das Friends-Konzept bedeutet, dass Klassen befreundet sein können. Dies muss in den Klassen definiert werden und bedeutet dann, dass die befreundeten Klassen Zugriff auf die geschützten und privaten Attribute und Methoden der Freunde haben.

Das Friends-Konzept kannte ich zwar, hatte aber bisher noch keine Anwendungsmöglichkeiten dafür, da die Friends-Beziehung immer von zwei Seiten ausgehen muss: Klasse A muss Klasse B als Freund eintragen und Klasse B muss Klasse A als Freund bekannt geben.

So dachte ich bisher.

FRIENDS-Interface

Dass es auch einfacher geht, steht klar und deutlich in der SAP-Hilfe:

Geben Sie ein Interface unter Freunde an, dann bedeutet dies, dass alle Klassen, die dieses Interface implementieren, Zugriff auf die geschützten und privaten Komponenten haben.

Das bedeutet, dass man gar nicht die einzelnen befreundeten Klassen in allen Klassen angeben muss, sondern dass es reicht, ein befreundetes Interface zu verwenden.

Das folgende kleine Demoprogramm verwendet das Interface If_You_Wanna_Be_My_Lover (In Anlehnung an den Hit Wannabe der Spice Girls), damit die Klassen gegenseitig auf das geschützte Attribut der jeweils anderen Klasse zugreifen kann.

Ich hätte zwar gerne auch die anderen drei Spice Girls mit in den Code verarbeitet, aber Mel B. und Scary Spice reichen zum Verständnis aus.

[notice type=’info’]Weiterführende Informationen zum FRIENDS-Konzept findest du im ZEVOLVING-Blog von Naimesh Patel.[/notice]

Realer Nutzen

Wie man dieses Wissen für die tägliche Arbeit nutzen kann, kannst du im ABAPBLOG von Lukasz Pegiel sehen und auch hier im Tricktresor. In diesen Artikel wird beschrieben, dass man das Interface IF_ALV_RM_GRID_FRIEND in eigene Klassen einbinden kann, um dann Zugriff auf geschützte und private Methoden des ALV-Grid zu bekommen.

2016-10-10_15-34-03

Code

REPORT zz_spice_girls.

INTERFACE if_you_wanna_be_my_lover.
ENDINTERFACE.

CLASS lcl_mel_b DEFINITION FRIENDS if_you_wanna_be_my_lover.
 PROTECTED SECTION.
   DATA text TYPE string VALUE 'You gotta get with my friends'.
ENDCLASS.

CLASS lcl_scary_spice DEFINITION FRIENDS if_you_wanna_be_my_lover.
 PROTECTED SECTION.
   DATA text TYPE string VALUE 'If you wanna be my lover'.
ENDCLASS.

CLASS lcl_wannabe DEFINITION FRIENDS if_you_wanna_be_my_lover.
 PUBLIC SECTION.
   INTERFACES if_you_wanna_be_my_lover.
   CLASS-METHODS sing.
   CLASS-METHODS class_constructor.
 PROTECTED SECTION.
   CLASS-DATA mr_mel_b TYPE REF TO lcl_mel_b.
   CLASS-DATA mr_scary_spice TYPE REF TO lcl_scary_spice.
ENDCLASS.

CLASS lcl_wannabe IMPLEMENTATION.
 METHOD class_constructor.
   CREATE OBJECT mr_mel_b.
   CREATE OBJECT mr_scary_spice.
 ENDMETHOD.
 METHOD sing.
   WRITE: / mr_scary_spice->text.
   WRITE: / mr_mel_b->text.
 ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
 lcl_wannabe=>sing( ).
Enno Wulff
Letzte Artikel von Enno Wulff (Alle anzeigen)