Ansicht
Dokumentation

ABENMULTIPLE_USE_INCLUDE_GUIDL - MULTIPLE USE INCLUDE GUIDL

ABENMULTIPLE_USE_INCLUDE_GUIDL - MULTIPLE USE INCLUDE GUIDL

ROGBILLS - Synchronize billing plans   BAL_S_LOG - Application Log: Log header data  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Mehrfachverwendung von Include-Programmen

Technisch gesehen ist es möglich, ein Include-Programm mehrfach zu verwenden, indem es mehrmals in eine Kompilationseinheit oder in verschiedene Kompilationseinheiten eingebunden wird.

Include-Programme nicht mehrfach verwenden

Verwenden Sie ein Include-Programm zur Modularisierung genau einer Kompilation. Es darf nicht mehrmals in verschiedene Kompilationseinheiten eingebunden werden, Auch innerhalb einer Kompilationseinheit soll ein Include-Programm nur ein einziges Mal eingebunden werden.

Die Mehrfachverwendung von Include-Programmen ist konzeptionell höchst problematisch. Dies betrifft insbesondere den Gebrauch von Include-Programmen für die Wiederverwendung von:

  • Typdefinitionen
  • Datendeklarationen
  • lokalen Klassen
  • Prozedurimplementierungen

Wir empfehlen dringend, aus den im Folgenden aufgeführten Gründen für Wiederverwendungen nur geeignete Mittel wie globale Klassen und Interfaces zu verwenden.

Eingeschränkte Wartbarkeit
Das Einbinden eines Include-Programms in mehrere Kompilationseinheiten schränkt die Wartbarkeit sowohl des Include-Programms selbst als auch der verwendenden Kompilationseinheiten stark ein. Änderungen an einem solchen Include-Programm können im Kontext ausgewählter Rahmenprogramme unproblematisch sein, gleichzeitig andere Kompilationseinheiten aber syntaktisch inkorrekt machen. Besonders kritisch sind dahin gehend Kompilationseinheiten, die Include-Programme einbinden, die in anderen Systemen entwickelt wurden.

Erhöhter Ressourcenverbrauch
Werden Kompilationseinheiten, die gemeinsame Include-Programme verwenden, gleichzeitig ausgeführt, müssen diese Include-Programme vom ABAP-Laufzeit-Framework mehrmals geladen werden, was den Speicherverbrauch erhöht. In der Vergangenheit wurden mehrfach verwendete Include-Programme beispielsweise zur zentralen Definition von Konstanten eingesetzt. Hierzu ist heute ein globales Interface oder eine globale Klasse zu verwenden. Da diese nur einmal geladen wird, erhöht sich hier der Speicherverbrauch nicht wie bei der mehrfachen Verwendung von Include-Programmen mit jeder neuen Benutzung.

Auch durch die mehrfache Verwendung eines Include-Programms innerhalb einer Kompilationseinheit (beispielsweise durch Einbinden in den Quelltext mehrerer Funktionsbausteine einer Funktionsgruppe oder in den Quelltext mehrerer Methoden einer Klasse) steigt der Speicherverbrauch, da dadurch die Kompilationseinheit unnötig aufgebläht wird. Bei der Benutzung zentral definierter, eigenständiger Typen und der Ablage benötigter Konstanten in geeigneten Klassen oder Interfaces bleibt kein sinnvolles Einsatzgebiet für mehrfach verwendete Include-Programme innerhalb einer Kompilationseinheit denkbar.

Fehlender semantischer Zusammenhang
Include-Programme werden wie Quelltextdateien in anderen Programmierumgebungen rein textuell und völlig semantikfrei in eine Kompilationseinheit eingebunden. Die Semantik ergibt sich erst im Zusammenhang mit der Kompilationseinheit und der Stelle, an der das Include-Programm eingebunden wird. Daraus folgt insbesondere auch, dass Klassendefinitionen, die über ein Include-Programm in verschiedene Kompilationseinheiten eingebunden werden, zu technisch unterschiedlichen Klassen führen, deren Objekte unterschiedliche Referenztypen haben und nicht zwischen den Kompilationseinheiten ausgetauscht werden können.

Folgender Quelltext zeigt ein Include-Programm, das Deklarationen von Konstanten enthält, die zur Verwendung in mehreren Programmen vorgesehen sind. Ein solches Vorgehen ist nach obiger Regel nicht mehr erlaubt.

*&---------------------------------------------*
*& Include Z_ORDERS_OF_MAGNITUDE
*&---------------------------------------------*
CONSTANTS:
  mega TYPE  p DECIMALS 6 VALUE '1000000.0',
  kilo TYPE  p DECIMALS 6 VALUE '1000.0',
  milli TYPE p DECIMALS 6 VALUE '0.001',
  micro TYPE p DECIMALS 6 VALUE '0.000001'.

Folgender Quelltext zeigt die gleichen Deklarationen von Konstanten wie obiges Beispiel, dieses Mal aber in einer zur Wiederverwendung geeigneten globalen Klasse. Hier wäre sogar eine zugehörige ABAP-Unit-Testmethode denkbar, welche die Konsistenz der Konstanten überprüft.

CLASS zcl_orders_of_magnitude DEFINITION PUBLIC.
  PUBLIC SECTION.
    CONSTANTS:
      mega TYPE  p DECIMALS 6 VALUE '1000000.0',
      kilo TYPE  p DECIMALS 6 VALUE '1000.0',
      milli TYPE p DECIMALS 6 VALUE '0.001',
      micro TYPE p DECIMALS 6 VALUE '0.000001'.
ENDCLASS.






BAL Application Log Documentation   ROGBILLS - Synchronize billing plans  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 5543 Date: 20240523 Time: 094137     sap01-206 ( 98 ms )