Es gibt das FRIENDS-Konzept in ABAP. In der Welt der objektorientierten Programmierung (OOP) gibt es private Attribute und Methoden. Normalerweise kann nur die Klasse selbst auf private Attribute und Methoden zugreifen. Versucht man auf private Attribute oder Methoden zuzugreifen, erhält man sofort entsprechende Fehlermeldungen im Syntaxcheck.
In der Programmiersprache ABAP ist es jedoch möglich, durch das FRIENDS-Konzept, also die Freundschaft zwischen ABAP-Klassen, den Zugriff auf private Attribute und Methoden zu ermöglichen. Das FRIENDS-Konzept in ABAP sollte sparsam eingesetzt werden. Es sollte nur zwischen Klassen verwendet werden, die eine enge Beziehung zueinander haben. Der ABAP-Entwickler sollte den Einsatz immer abwägen und sorgfältig dokumentieren. Was das FRIENDS-Konzept in ABAP ist, wie man es einsetzt und welche Vor- und Nachteile es hat, wird in diesem Artikel näher erläutert.
Das FRIENDS-Konzept in ABAP
Das FRIENDS-Konzept in ABAP ermöglicht ABAP-Klassen den Zugriff auf normalerweise private Attribute und Methoden anderer Klassen. Anders als der Begriff „Freunde“ vermuten lässt, ist dies im FRIENDS-Konzept in ABAP einseitig. Eine Klasse kann einer anderen Klasse Zugriff gewähren, ohne dass diese den Zugriff erwidern muss. Wichtig ist, dass eine Klasse, die Freundschaft gewährt, nicht automatisch auch Freund ihrer Freunde ist. Wenn eine befreundete Klasse auf die nicht-öffentlichen Komponenten eines Freundes zugreifen möchte, muss dieser ihr ebenfalls explizit die Freundschaft gewähren.
Im Class Builder (Transaktion SE24) gibt es hierfür die Registerkarte „Friends“. Dort eingetragene Klassen bzw. Interfaces sind Freunde und haben damit Zugriff auf private Attribute und Eigenschaften.
Um in einer lokalen Klasse eine Freundesklasse zu definieren, verwendest Du den Zusatz FRIENDS zur Anweisung CLASS.
CLASS lcl_klasse DEFINITION LOCAL FRIENDS lcl_freund.
In dem folgenden Beispiel ist die lokale Klasse lcl_freund ein „Freund“ der Klasse lcl_klasse und kann deshalb die privaten Attribute und Methoden der Klasse lcl_klasse aufrufen.
REPORT z_friends. CLASS lcl_freund DEFINITION. PUBLIC SECTION. METHODS: call_method_freund IMPORTING iv_attribut TYPE string. ENDCLASS. CLASS lcl_klasse DEFINITION FRIENDS lcl_freund. PRIVATE SECTION. DATA: attribut TYPE string. METHODS: set_attribut IMPORTING iv_attribut TYPE string, get_attribut EXPORTING ev_attribut TYPE string. ENDCLASS. CLASS lcl_klasse IMPLEMENTATION. METHOD set_attribut. attribut = iv_attribut. ENDMETHOD. METHOD get_attribut. ev_attribut = attribut. ENDMETHOD. ENDCLASS. CLASS lcl_freund IMPLEMENTATION. METHOD call_method_freund. DATA: lo_klasse TYPE REF TO lcl_klasse, lv_attribut TYPE string. CREATE OBJECT lo_klasse. lo_klasse->set_attribut( 'ERP UP' ). lo_klasse->get_attribut( IMPORTING ev_attribut = lv_attribut ). WRITE: / lv_attribut. WRITE: / lo_klasse->attribut. ENDMETHOD. ENDCLASS. START-OF-SELECTION. DATA: lo_freund TYPE REF TO lcl_freund. CREATE OBJECT lo_freund. lo_freund->call_method_freund( 'ERP UP' ).
Das FRIENDS-Konzept in ABAP richtig einsetzen
In der realen Welt finden Freundesklassen in verschiedenen Anwendungsfällen Verwendung:
Die SAP-Hilfe zum FRIENDS-Konzept in ABAP zeigt deutlich, dass, wenn Du ein Interface als „Freund“ angibst, alle ABAP-Klassen, die dieses Interface implementieren, automatisch Zugriff auf geschützte und private Attribute und Methoden erhalten. Dadurch entfällt die Notwendigkeit, jede befreundete Klasse in allen Klassen aufzuführen, da die Verwendung eines befreundeten Interfaces ausreicht.
Das Interface IF_ALV_RM_GRID_FRIEND ist ein Freund der ABAP-Klasse IF_ALV_RM_GRID_FRIEND, wie im obigen Screenshot zu sehen ist. Um auf die privaten Attribute und Methoden des ALV Grid zuzugreifen, kann das Interface IF_ALV_RM_GRID_FRIEND einfach in einer Klasse verwendet werden, um die privaten Attribute und Methoden in dieser Klasse zu verwenden.
Eine Klasse, die ein Debugging-Tool implementiert, kann Freundschaft zu einer Klasse gewährt werden, die das zu debuggende Objekt repräsentiert. Dadurch erhält das Debugging-Tool Zugriff auf die privaten und geschützten Elemente des Objekts, was äußerst hilfreich sein kann, um den Zustand des Objekts zu überprüfen und Fehler zu finden.
Ebenso kann eine Klasse, die das Factory-Pattern zur Erzeugung von Objekten umsetzt, Freundschaft zu den Klassen gewähren, die die von ihr erstellbaren Objekte repräsentieren. Dies ermöglicht dem Factory-Pattern den Zugriff auf die privaten und geschützten Elemente der Objektklassen, wodurch eine kontrollierte und flexible Objekterzeugung erleichtert wird.
Des Weiteren kann eine Klasse, die ein Framework für Einheitstests entwickelt, Freundschaft zu den Klassen gewähren, die sie testet. Dadurch erhält das Einheitstest-Framework Zugriff auf die privaten und geschützten Elemente dieser Klassen, was essenziell ist, um das Verhalten der Klassen umfassend zu testen und sicherzustellen, dass sie wie erwartet funktionieren.
Die FRIENDS-Zusätze
Durch den Zusatz „FRIENDS“ in der Klassendefinition gibt man die ABAP-Klassen an, die als Freunde definiert werden. Diese ABAP-Klassen haben Zugriff auf die privaten Attribute und Methoden. Dabei gibt es drei Zusätze für die FRIENDS-Anweisung:
- FRIENDS class_1 … class_n
- Freundschaftsbeziehungen zwischen lokalen Klassen eines Programms und anderen Klassen sowie Schnittstellen im selben Programm und der Klassenbibliothek
- GLOBAL FRIENDS class_1 … class_n
- Ausschließlich bei globalen Klassen durch den Class Builder
- Freundschaftsbeziehungen zu anderen globalen Klassen und Schnittstellen
- LOCAL FRIENDS class_1 … class_n
- Separat von der Klassendeklaration in einem Class-Pool definiert
- Freundschaft zu den lokalen Klassen und Interfaces des Class-Pools der globalen Klasse
Vor- und Nachteile des FRIENDS-Konzepts in ABAP
Vorteile des FRIENDS-Konzepts in ABAP
- Ermöglicht die gemeinsame Nutzung von nicht-öffentlichen Informationen einer Klasse durch Nichtmitgliedfunktionen, was für Debugging, Tests oder die Implementierung spezieller Funktionen nützlich sein kann.
- Ermöglicht Unterklassen und Interfaces, denen Freundschaft gewährt wird, den Zugriff auf nicht-öffentliche Komponenten der Klasse, die Freundschaft gewährt.
- Bietet die Möglichkeit, zusätzliche Funktionalität, die außerhalb der Klasse definiert ist, durch die Verwendung einer befreundeten Klasse zu nutzen.
- Ermöglicht die Verwendung von Daten, auf die die Klasse normalerweise keinen Zugriff hat.
- Friends-Klassen können die Code-Performance verbessern, indem sie die Notwendigkeit der Erstellung von Zwischenobjekten reduzieren. Dies liegt daran, dass befreundete Klassen direkt auf die Elemente der anderen zugreifen können, ohne dass ein Zwischenobjekt verwendet werden muss.
Nachteile des FRIENDS-Konzepts in ABAP
- Friends-Klassen können Deinen Code weniger sicher machen, da sie unbefugten Zugriff auf private und geschützte Elemente ermöglichen.
- Friends-Klassen können Deinen Code weniger verständlich machen, da es schwierig sein kann, den Informationsfluss zwischen Friends-Klassen nachzuvollziehen.
- Friends-Klassen führen eine Abhängigkeit zwischen den beiden Klassen ein. Das bedeutet, dass du bei Änderungen an einer Klasse auch Änderungen an der anderen Klasse vornehmen musst.
Über den Autor
Mein Name ist Andreas Geiger und ich bin ein erfahrener Senior SAP Berater. Mit mehr als 10 Jahren Berufserfahrung habe ich mehrere SAP-Projekte erfolgreich abgeschlossen und umfangreiche Kenntnisse in verschiedenen Bereichen wie SAP FI, SAP MM und ABAP erworben. Nun möchte ich mein Wissen mit Dir teilen, um Dir einen Mehrwert zu bieten und Dich bei Deiner täglichen Arbeit mit dem SAP-System zu unterstützen.
ERP UP unterstützen
Wenn Du mit ERP UP zufrieden bist, kannst Du mich gerne unterstützen. Dabei gibt es unzählige Möglichkeiten, wie Du mich einfach und schnell unterstützen kannst. Wie Du genau ERP UP unterstützen kannst, erfährst Du hier. Vielen Dank.