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.

Weiterführende Informationen zum FRIENDS-Konzept findest du im ZEVOLVING-Blog von Naimesh Patel.

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