Lokale Klassen in globalen Klassen

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
10 Beiträge • Seite 1 von 1
10 Beiträge Seite 1 von 1

Lokale Klassen in globalen Klassen

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Moin,

wofür (außer Testklassen) nutzt ihr lokale Klassen in globalen Klassen?

Ich bin hier bei einem Kunden, der das exzessiv nutzt (dem ersten, der mir unterkommt). Da kann durchaus sein, dass eine globale Klasse ein halbes Dutzend lokaler Klassen enthält.

Wenn ich SO eine globale Klasse ableite, ist doch das ganze Coding in der Ableitung gar nicht verfügbar.

So ganz erschließt sich mir das gerade nicht. Das ist jetzt nicht gegen den Kunden gerichtet, das ist *mein* Defizit. Glaube ich.



Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Lokale Klassen in globalen Klassen

Beitrag von jocoder (Specialist / 343 / 3 / 102 ) »
Für kleine Hilfsfunktionen, für die sich im ersten Entwurf keine globale Klasse lohnt, habe ich lokale Klassen hin und wieder verwendet.

In historisch gewachsenen "eier legenden Wollmilchsau Klassen" war dies oft eine Möglichkeit, ein bisschen mehr Struktur hereinzubringen.

Vorteil ist hier unter anderem die freie Namenswahl ohne Namensraumpräfix usw.
Nachteil natürlich, das keine Referenzvariablen im privaten und geschützen Bereich angelegt werden können und damit die Verwendung von Instanzen quasi nur innerhalb einer Methode möglich ist.

Re: Lokale Klassen in globalen Klassen

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Danke.

Ich mache mal eine Behauptung und erbitte eure Meinung, ob der Satz so richtig ist:

Behauptung:

"Was ich an Funktionalitäten brauche, um meine Klasse zu realisieren, schreibe ich in lokale Klassen - wenn ich etwas häufiger brauche, kann ich daraus immer noch eine globale Klasse machen"

Gegenhypothese:

"ALLES, was ich an Coding schreibe, ist potentiell für andere (Zwecke/Entwickler) brauchbar und sollte daher in globale Klassen geschrieben werden".

Ich könnte jetzt sagen, welche These ich unterstütze und warum, ich möchte aber die Diskussion nicht beeinflussen, sondern erst eure Meinungen dazu einholen - zum Schluss schreibe ich dann meine drunter.

Das ist für mich gerade ganz wertvolles Input - ich bitte um rege Beteiligung.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Lokale Klassen in globalen Klassen

Beitrag von m.andreschak (ForumUser / 22 / 2 / 3 ) »
Hi,
zusätzlich zu den von jocoder genannten Anwendungsfällen habe ich sie bisher für folgendes benutzt:

- Häufig für kleine, lokale Exceptions, die innerhalb der globalen Klasse den Programmfluss steuern, oder mittels if100 Nachrichten "weitertragen".
- Semi-häufig aus technischen Gründen, für Hilfsklassen z.B. zum Zugriff auf geschützte Methoden einer anderen Klasse, von der ich mit der Hilfsklasse erbe - oder wenn ich aus anderen Gründen von Standardklassen erben muss.
- Selten Utility-Methoden, die "so sehr utility sind", dass sich nicht einmal eine private methode dafür in der globalen klasse lohnt.


Ansonsten: Ja, man sollte Dinge wiederverwendbar bauen. Aber Du weißt ja, wie das ABAP Leben manchmal so spielt.

Re: Lokale Klassen in globalen Klassen

Beitrag von DeathAndPain (Top Expert / 1941 / 257 / 412 ) »
Ich habe noch eine zweite Gegenhypothese: Funktionalitäten, die ich brauche, um meine Klasse zu realisieren, gehören in (ggf. private) Methoden dieser Klasse und nicht in irgendwelche geschachtelten eingebetteten Klassen.

Re: Lokale Klassen in globalen Klassen

Beitrag von ewx (Top Expert / 4846 / 311 / 641 ) »
Ich nutze lokale Klassen sehr gerne ebenfalls aus den von m.andreschak genannten Gründen.

Zudem finde ich es gut, dass man dadurch das System nicht so zumüllt. Es ist deutlich, welche anderen Klassen zu dieser Klasse gehören. Ja, es gibt Pakete wodurch ich eine Zugehörigkeit definieren kann. Allerdings finde ich das deutlich aufwändiger und weniger "schön", weil ich die Objekte u.U. kürzer benennen kann, als ich das im Repository tun könnte.

Man könnte Lokale Klasse auch mit Unterroutinen in Funktionsgruppen vergleichen. Die gehören auch zu der Gruppe und sind (in der Regel) nicht (sinnvoll) von außen aufrufbar.

Und ja, natürlich kann man sich mit der "Wichtigkeit" der lokalen Klassen irren und andere Entwickler könnten diese Klassen ggfs. ebenfalls gut gebrauchen. Aus meiner Erfahrung heraus ist diese Wiederverwendbarkeit immer sehr eingeschränkt, weil irgendwas an Voraussetzungen oder den Daten doch nicht so passt, wie man es braucht.

Re: Lokale Klassen in globalen Klassen

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Worüber ich hin und wieder gestolpert bin, um einen Nutzen für lokale Klassen in Bezug auf Verbung aufzuzeigen:
Die lokale Klasse implementiert ein globales Interface und die durch die globle Klasse erzeugten Objekte werden nach außen in der Schnittstelle weitergegeben. Somit hängt die Implementierung der (Teil-)Objekte der Klasse an der jeweiligen Hauptklasse.
Vergleichen könnte man das ganze dann mit der IXML-API. Public gibt es da nur die Interfaces und erst duch die Klasse CL_IXML wird die eigentlichen Implementierung angesprochen. Zwar läuft die API dann über Kernel-Methoden aber erst durch CL_IXML werden die eigentlichen (klassenlokalen) Objekte erzeugt. Laienhaft eine Art von Factory Pattern aber ohne einen Einfluss auf die internen Abläufe zu haben.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Lokale Klassen in globalen Klassen

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Das war mir jetzt zu schnell....
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Lokale Klassen in globalen Klassen

Beitrag von ewx (Top Expert / 4846 / 311 / 641 ) »
Habe ich auch nicht verstanden...
a-dead-trousers hat geschrieben:
21.04.2020 20:56
Die lokale Klasse implementiert ein globales Interface
Soweit verstehe ich es. und dann...?

Re: Lokale Klassen in globalen Klassen

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
ewx hat geschrieben:
22.04.2020 12:09
Habe ich auch nicht verstanden...
a-dead-trousers hat geschrieben:
21.04.2020 20:56
Die lokale Klasse implementiert ein globales Interface
Soweit verstehe ich es. und dann...?
Die Implementierungen aller Objete (via Interfaces-Methoden) die von außen sichtbar sein sollen erfolgen in der globalen Klasse als lokale Klassen. Alles was für das Gelingen der API bzw. des Frameworks unter der Haube miteinender kommunizieren soll bleibt dabei aber trotzdem abgeschotten. Sowas wie eine riesige Friends-Beziehung.

Um beim Beispiel IXML zu bleiben:
Es gibt keine Möglichkeit z.B. von der Klasse CL_IXML_ELEMENT abzuleiten. Somit gibt es auch keine Möglichkeit das Framework vom Entwickler unbeabsichtigt zu "beeinflussen". Wenn man aber das Interface IF_IXML selbst implementiert kann man sich sein eigenes Framework hochziehen und dabei nach belieben die internen Abläufe optimieren.

Warum ich dieses Vorgehen zum Schutz der Integrität eines Frameworks zum Teil besser finde als zum Beispiel mit dem Friends-Kozept liegt daran, dass ich mir bei globalen Klassen trotzdem immer Gedanken machen muss wie die Kommunikation zwischen den einzelnen Objekte ausgestalten werden muss. Nicht zuviele Methoden Public machen um nicht Gefahr zu laufen, dass damit Missbrauch betrieben werden kann vs. einen möglichst effizienten Umgang mit internen Ressourcen.

Trotzdem hab ich mir die Wiederverwendbarkeit nicht vollends verbaut, weil zumindest die Methodensignaturen dank der Interfaces klar definiert bleiben.

Wobei ich aber zugeben muss, dass ich sowas bislang selbst noch nicht umgesetzt habe, weil mir die Wiederverwendbarkeit von Code in globalen Klassen doch noch um einen Zacken wichtiger ist als die Wahrung der Konsistenz von APIs.

Ich will nur aufzeigen, dass eine derartige Vorgehensweise in einigen Fällen durchaus Sinn machen kann, nicht dass ich es gutheißen würde. 😉

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag (Insgesamt 2):
ewxralf.wenzel

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Seite 1 von 1

Vergleichbare Themen

20
Antw.
2672
Views
Globale Klassen oder Lokale Klassen
von ZF_SAPler » 29.11.2022 13:47 • Verfasst in ABAP® für Anfänger
2
Antw.
1613
Views
Umgehung von globalen Klassen möglich?
von rambozola » 30.11.2006 08:10 • Verfasst in ABAP Objects®
3
Antw.
2668
Views
Inner classes / lokale klassen
von Gast » 26.08.2005 18:50 • Verfasst in ABAP Objects®
8
Antw.
9056
Views
Architektur von Abap-Klassen (Klassen Attribute)
von snooze » 12.04.2005 12:56 • Verfasst in ABAP Objects®
2
Antw.
2103
Views
Können lokale Klasse von Globalen erben?
von gs3rr4 » 24.04.2017 13:36 • Verfasst in ABAP Objects®

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 2 Tagen von Bright4.5 1 / 744
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2368
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8954