IF_SERIALIZABLE_OBJECT -- ein IF ohne Komponenten???

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

IF_SERIALIZABLE_OBJECT -- ein IF ohne Komponenten???

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

kann mir jemand erklären, was das IF_SERIALIZABLE_OBJECT für eine Aufgabe hat? Keine Attribute, Events, Methoden, Typen, nix. Aber "implementiert" in einer Menge Klassen.

Und wie kann es überhaupt eine Aufgabe erfüllen, wenn es keine Komponenten hat?


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: IF_SERIALIZABLE_OBJECT -- ein IF ohne Komponenten???

Beitrag von ST22 (Specialist / 279 / 43 / 41 ) »
Hallo Ralf,

Enno schreibt dazu: https://www.tricktresor.de/blog/serialize-me/

Weiß natürlich nicht, ob das als Erklärung genügt.

Frohe Weihnachten
Frank

Re: IF_SERIALIZABLE_OBJECT -- ein IF ohne Komponenten???

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Nein, leider nicht - weil ich nicht verstehe, was das IF dabei tut.

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

Re: IF_SERIALIZABLE_OBJECT -- ein IF ohne Komponenten???

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
ralf.wenzel hat geschrieben:Nein, leider nicht - weil ich nicht verstehe, was das IF dabei tut.
Es sagt dem Kernel, dass der Entwickler der Klasse, die das IF implementiert der Meinung ist, dass die Klasse sich einfrieren lassen kann( bzw. ihr innerer Zustand sich mit der ID-Transformation serialisieren und deserialisieren lässt wobei ich glaube, dass damit keine privaten Attribute gemeint sind ).

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
ralf.wenzel

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: IF_SERIALIZABLE_OBJECT -- ein IF ohne Komponenten???

Beitrag von ewx (Top Expert / 4846 / 311 / 642 ) »
es ist ein Marker-Interface, das definiert, dass diese Klasse serialisierbar ist.

Ohne Interface:

Code: Alles auswählen.

<asx:abap version="1.0" xmlns:asx="http://www.sap.com/abapxml">
 <asx:values>
  <MODEL href="#o10"/>
 </asx:values>
 <asx:heap xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:abap="http://www.sap.com/abapxml/types/built‑in" xmlns:cls="http://www.sap.com/abapxml/classes/global" xmlns:dic="http://www.sap.com/abapxml/types/dictionary">
  <prg:DEMO id="o10" xmlns:prg="http://www.sap.com/abapxml/classes/program/ZZENNO189"/>
 </asx:heap>
</asx:abap>
Mit Interface

Code: Alles auswählen.

<asx:abap version="1.0" xmlns:asx="http://www.sap.com/abapxml">
 <asx:values>
  <MODEL href="#o10"/>
 </asx:values>
 <asx:heap xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:abap="http://www.sap.com/abapxml/types/built‑in" xmlns:cls="http://www.sap.com/abapxml/classes/global" xmlns:dic="http://www.sap.com/abapxml/types/dictionary">
  <prg:DEMO id="o10" xmlns:prg="http://www.sap.com/abapxml/classes/program/ZZENNO189">
   <local.DEMO>
    <TEST1>Hallo</TEST1>
    <TEST2>Huhu</TEST2>
   </local.DEMO>
  </prg:DEMO>
 </asx:heap>
</asx:abap>

Code: Alles auswählen.

CLASS demo DEFINITION.
  PUBLIC SECTION.
    INTERFACES if_serializable_object.
    DATA test1 TYPE text10.
    DATA test2 TYPE text10.
    METHODS constructor.
ENDCLASS.

CLASS demo IMPLEMENTATION.
  METHOD constructor.
    test1 = 'Hallo'.
    test2 = 'Huhu'.
  ENDMETHOD.
ENDCLASS.


START-OF-SELECTION.

  DATA(o_demo) = NEW demo( ).

  DATA ser TYPE string.

  CALL TRANSFORMATION id
       SOURCE model = o_demo
       RESULT XML ser.

  cl_demo_output=>display_xml( ser ).

Re: IF_SERIALIZABLE_OBJECT -- ein IF ohne Komponenten???

Beitrag von edwin (Specialist / 302 / 10 / 68 ) »
Hi Ralf,
damit kannst Du z.B. eine Instanz serialisieren (mit Daten) in der DB speichern, später wieder holen, deserialisieren und mit der Instanz weiterarbeiten.

Bsp:

Code: Alles auswählen.

  DATA cl_class    TYPE REF TO zcl_<Class>. "<<dieses Ding hat ein Interface if_serializable_object
  DATA new_class TYPE REF TO zcl_<Class>.
  DATA va_xml    TYPE xstring.


  CREATE OBJECT cl_class.

  cl_class->set_<irgendwas>().
  cl_class->get_<sonstwas>().

  CALL TRANSFORMATION id_indent
               SOURCE ref = cl_class
               RESULT XML va_xml.

* va_xml irgendwo hin speichern z.B mit Export ...
 
* jetzt wieder holen  Import from   und eine neue Instanz füllen

  CALL TRANSFORMATION id_indent
               SOURCE XML  va_xml
               RESULT ref = new_class.

  new_class->get_<sonstwas>().  "<<< hier müsste dann das gleiche wie   cl_class->get_<sonstwas>(). kommen

/Edwin
Zuletzt geändert von edwin am 20.12.2018 22:05, insgesamt 1-mal geändert.

Re: IF_SERIALIZABLE_OBJECT -- ein IF ohne Komponenten???

Beitrag von edwin (Specialist / 302 / 10 / 68 ) »
Ups ewx war schneller
/Edwin

Re: IF_SERIALIZABLE_OBJECT -- ein IF ohne Komponenten???

Beitrag von msfox (Specialist / 364 / 56 / 74 ) »
ewx hat geschrieben:es ist ein Marker-Interface, das definiert, dass diese Klasse serialisierbar ist.
Das war das Entscheidende. Habe ich auch erst letztens gelernt - von einem anderen Kollegen. :-).
Wenn man allerdings bei Wikipedia der Kritik Glauben schenkt und darüber nachdenkt, muss man so was nicht wirklich verwenden (https://de.wikipedia.org/wiki/Markierungsschnittstelle):
„Schweres Erbe“
In der Objektorientierten Programmierung wird die Implementierung auch der schmalsten Schnittstelle an erbende Klassen weitergegeben. Dies bedeutet, dass eine Klasse, die von einer serialisierbaren Klasse erbt, nicht als „nicht serialisierbar“ definiert werden kann. Deshalb wird teils auf die Laufzeit ausgewichen, um logische Fehler überhaupt offenzulegen: In der Java-Dokumentation wird so beispielsweise empfohlen, explizit eine NotSerializableException zu werfen.
„Smell“
Ein anderes Problem ist die Tatsache, dass zum Erkennen einer Markierungsschnittstelle der Operator instanceof („Instanz von“) verwendet werden muss, was als Smell („schlechter Geruch“, d. h. fragwürdige Programmiertechnik) betrachtet werden kann und somit auch das Muster als Smell charakterisiert.[1]
Verschleierung
Die Programm-Logik wird aus dem regulären Quelltext in Frameworks verlagert, die auf der Analyse von Metadaten aufbauen. Das macht sie für Menschen schwer nachvollziehbar. Markierungsschnittstellen selbst zu definieren, ist für alltägliche Programmieraufgaben meist völlig überzogen. Da jedoch das Markieren („Tagging“) als Technik vertraut erscheint, neigen OO-Anfänger leicht zu diesem Mittel (um die Aufgabe letztlich nur aufzuschieben). Durch den Einsatz von Markierungsschnittstellen entzieht man dem Compiler Möglichkeiten zur statischen Prüfung.

Mein Kollege hat das so implementiert, dass ich dieses Marker-Interface an eine CREATE-Methode einer Factory übergebe. Die Create-Methode kann aber nur zwei Klassen verarbeiten, welche diese Marker-Interface habe. Wenn ich also das Marker-Interface an einer weitere Klasse implementiere, wird diese nicht verarbeitet.
Daher finde ich diese Art des Patterns etwas sinnlos...

Folgende Benutzer bedankten sich beim Autor msfox für den Beitrag:
a-dead-trousers


Re: IF_SERIALIZABLE_OBJECT -- ein IF ohne Komponenten???

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
msfox hat geschrieben:Verschleierung
Die Programm-Logik wird aus dem regulären Quelltext in Frameworks verlagert, die auf der Analyse von Metadaten aufbauen. Das macht sie für Menschen schwer nachvollziehbar.
Sehe ich in diesem speziellen Fall aber nicht als Nachteil, da die Serialisierung an den Kernel übertragen wird und somit vom Nicht-Kernel-Entwickler nicht nur "schlecht" sondern gar nicht nachvollziehbar ist. Somit entspricht die ID-Transformation de facto einem ABAP-Befehl, welcher halt als Syntaxmerkmal das Interface erwartet.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: IF_SERIALIZABLE_OBJECT -- ein IF ohne Komponenten???

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Drei Zeilen Doku hätten verhindert, dass sowas Nachfragen und Diskussionen auslöst....


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

Seite 1 von 1

Vergleichbare Themen

0
Antw.
2824
Views
Änderung Komponenten Fertigungsauftrag
von popay » 17.01.2008 18:10 • Verfasst in ABAP® Core
2
Antw.
3805
Views
PS: Netzplan mit Aktivitäten + Komponenten kopieren
von ewx » 16.06.2016 11:37 • Verfasst in Sonstige Module
0
Antw.
864
Views
Anwendungs-Komponenten-Hierarchie replizieren
von Dyrdek » 15.06.2015 15:15 • Verfasst in ABAP® für Anfänger
11
Antw.
2870
Views
Stücklisten mit Komponenten manuell erstellen
von der_neuling » 01.12.2020 11:21 • Verfasst in ABAP® für Anfänger
0
Antw.
1104
Views
Solution Manager - Komponenten-Auswahl verkleinern
von funky_escobar » 28.02.2008 14:34 • Verfasst in Basis

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 12 Stunden von DeathAndPain gelöst 22 / 3131
Daten an Tabelle binden
vor 17 Stunden von Lukas Sanders 2 / 1021
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 594

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

Dialog-Container mit Toolbar/Status
vor 12 Stunden von DeathAndPain gelöst 22 / 3131
Daten an Tabelle binden
vor 17 Stunden von Lukas Sanders 2 / 1021
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 594

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2595
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9181