Sinn und Unsinn von Datenreferenzvariablen

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

Sinn und Unsinn von Datenreferenzvariablen

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

ich bin gerade beim Lesen eines Buches auf folgendes Coding gestoßen:

Code: Alles auswählen.

types: t_itab type table of i with non-UNIQUE key TABLE_LINE.
data:  tab_ref type ref to t_itab,
      i_ref type ref to i.

do 10 times.
  if tab_ref is INITIAL.
    create data tab_ref.
  endif.
  append sy-index to tab_ref->*.
enddo.

if tab_ref is not INITIAL.
  if i_ref is INITIAL.
    create data i_ref.
  endif.

  loop at tab_ref->* into i_ref->*.
    write: / I_ref->*.
  endloop.
endif.
clear: tab_ref, i_ref.
Nun weiß ich, dass man Referenzen braucht, weil man auf Objekte nicht direkt zugreifen kann (wobei mir noch niemand erklären konnte, WARUM man nicht direkt auf Objekte zugreifen kann).

Was aber kann hinter dem Sinn einer Datenreferenzvariablen wie dieser sein? Warum definiert man nicht einfach eine itab und ein Feld als Arbeitsbereich? Ja, ich weiß, dass das ein Beispiel ist - aber mir fällt kein Zweck ein, wofür man Referenzen konventioneller Datenfelder erzeugen sollte (wahrscheinlich aus dem gleichen Grund warum ich nicht weiß, warum man nicht direkt auf Objekte zugreifen kann ;) ).

Wer kann mich aufschauen?
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: Sinn und Unsinn von Datenreferenzvariablen

Beitrag von a-dead-trousers (Top Expert / 4397 / 223 / 1182 ) »
Objekte und auch Daten die über diesem Weg angelegt werden (CREATE) landen in einem "globalen" Speicherbereich. d.h. Du kannst in einer Untermethode (die auch auch z.B. überladen sein kann) dynamisch ein Datenfeld definieren, dass du dann an beliebigen Stellen wiederverwenden kannst (sofern du die Referenz darauf irgendwo abgelegt hast)
Eine normale Variable ist nur in dem Kontext gültig in dem sie angelegt wurde. Du kannst zum Beispiel mit GET REFERENCE auf ein interne Variable verweisen und die evtl. sogar nach draußen (globale Datenrefernzvariable) propagieren, aber sobald du die Methode oder Unterroutine verlässt, zeigt die Referenz auf einen inkonsitenten Zustand (sieht man schön im Debugger). Das Datenfeld könnte zwar irgendwo im Speicher noch vorhanden sein, ist aber für den nächsten GC vorgemerkt.
Da Feld-Symbole in Klassen(nicht Methoden) nicht verwendet werden dürfen, bleibt nur der Weg über eine Datenreferenz um ein ähnliches Verhalten wie bei LOOP AT ASSIGNING zu erreichen, das aber über mehrere Methoden hinweg funktioniert. Ein weiterer Pluspunkt ist meines Erachtens die Verwendung bei großen Datenmengen. Wenn man z.B. interne Tabelle A per Returning an den Aufrufer übergeben möchte, ist dies nur per Value möglich. Also muss das ganze Datenobjekt kopiert werden, was mitunter viel Laufzeit kostet (Altes Thema ASSIGNING vs. INTO) Da wäre es dann schon einfacher nur den Zeiger auf das Objekt zu verwenden und man kann dann sogar mit den Originaldaten arbeiten.

Ich verwend das gerne bei internen (privaten) Methoden. Methode A liest eine Tabelle nach bestimmten Kriterien aus und liefert einen Zeiger auf die gefundene Zeile zurück. In Methode B rufe ich Methode A mehrmals mit unterschiedlichen Parametern auf und kann gleich (wie bei Feldsymbol) die Daten ändern.

lg ADT
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

2
Antw.
1320
Views
sinn und unsinn von field symbols
von c oco » 09.12.2005 13:46 • Verfasst in ABAP® für Anfänger
8
Antw.
2801
Views
Sinn und Unsinn von Alternativeditoren für ABAP
von ralf.wenzel » 27.04.2006 11:56 • Verfasst in SAP - Allgemeines
10
Antw.
2795
Views
Wo liegt der Sinn dahinter?
von Django90 » 27.09.2017 10:28 • Verfasst in ABAP® für Anfänger
9
Antw.
2108
Views
Sinn von Unit-Tests
von SaskuAc » 03.04.2019 13:33 • Verfasst in ABAP® für Anfänger
0
Antw.
1570
Views
Sinn und Zweck der Tabelle AGR_AGRS2
von zzcpak » 18.10.2007 14:53 • Verfasst in Basis

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Trennen Strasse und Hausnummer
vor 3 Stunden von msfox 18 / 10890
Dialog-Container mit Toolbar/Status
vor 6 Stunden von black_adept gelöst 27 / 4006
IT0024 Qualifikationen CP-ID
vor 7 Stunden von ArjenR 1 / 64

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.

Aktuelle Forenbeiträge

Trennen Strasse und Hausnummer
vor 3 Stunden von msfox 18 / 10890
Dialog-Container mit Toolbar/Status
vor 6 Stunden von black_adept gelöst 27 / 4006
IT0024 Qualifikationen CP-ID
vor 7 Stunden von ArjenR 1 / 64

Unbeantwortete Forenbeiträge

IT0024 Qualifikationen CP-ID
vor 7 Stunden von ArjenR 1 / 64
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2998
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9587