a-dead-trousers hat geschrieben: ↑03.02.2024 17:55
Das Include mit dem Implementation-Teil deiner Klasse muss NACH dem Include mit dem End-of-Selection inkludiert werden.
Warum sollte das nötig sein? Wenn das Klassen-Include nacheinander DEFINITION und IMPLEMENTATION enthält
(oder beides in verschiedenen INCLUDEs) und alles vor END-OF-SELECTION inkludiert wird, sollte das problemlos funktionieren. Das ist eine Frage persönlichen Stils, wie man das gliedern möchte, damit es übersichtlich ist. Der Ansatz, ein Include für eine bestimmte Klasse zu bauen, wo dann alles von dieser Klasse drin ist
(DEFINITION und IMPLEMENTATION) ist sicher nicht alternativlos, aber auf der anderen Seite durchaus eine Option. Die Aufteilung von Klassen in DEFINITION und IMPLEMENTATION-Block hat ja ohnehin nur akademische Hintergründe und ist aus praktischen Gesichtspunkten nachteilhaft
(wobei der wesentlichste Nachteil darin besteht, dass die Schnittstelle einer Methode nicht mehr dort im Code zu finden ist, wo der Code der Methode steht. Das ist bei FORM-Routinen anders und bei Funktionsbausteinen effektiv auch, weil ABAP bei diesen automatisch einen entsprechenden Kommentar am Beginn des Bausteins einfügt und diesen auch stets aktuell hält).
Aber das ist halt auch so ein unnötiger Mist bei Klassen, dass der ABAP-Interpreter prüft, wo sie stehen. FORM-Routinen können stehen, wo sie wollen - solange sie irgendwo im Programm existieren, werden sie gefunden. Ich verstehe nicht, weshalb das bei Klassen und ihren Methoden nicht auch möglich sein soll. Dann bräuchte man auch nicht mehr die idiotische DEFINITION DEFERRED-Klausel. Wenn in modernen Programmen die Reihenfolge der Zeilenblöcke wieder eine Rolle spielt, dann kann man gleich wieder den ollen GOTO-Befehl aus Basic einführen.
@L0w-RiDer: Grundsätzlich hat Dein Problem mit Includes nichts zu tun. Includes verhalten sich exakt so, als ob ihr Inhalt dort stehen würde, wo sie aufgerufen werden. Du könntest also mit Copy&Paste den Inhalt des Includes ins Hauptprogramm kopieren und den INCLUDE-Befehl damit ersetzen; der Effekt wäre syntaktisch derselbe. Auf diesem Hintergrund musst Du schauen, dass der DEFINITION-Block der Klasse vor der ersten Benutzung derselben steht. Wie Du das dann in Includes aufteilst, um Dein Programm übersichtlicher zu gliedern, ist eine andere Frage und Dir überlassen.