IF_SERIALIZABLE_OBJECT -- ein IF ohne Komponenten???


Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).

Moderatoren: Jan, Steff

IF_SERIALIZABLE_OBJECT -- ein IF ohne Komponenten???

Beitragvon ralf.wenzel » 20.12.2018, 18:16

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
ralf.wenzel
Top Expert
 
Beiträge: 3339
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 207 mal
Ich bin: Freiberufler/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

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

Beitragvon ST22 » 20.12.2018, 18:42

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
ST22
Specialist
 
Beiträge: 226
Registriert: 15.04.2005, 07:34
Dank erhalten: 24 mal
Ich bin: Entwickler/in

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

Beitragvon ralf.wenzel » 20.12.2018, 18:50

Nein, leider nicht - weil ich nicht verstehe, was das IF dabei tut.

Ralf
ralf.wenzel
Top Expert
 
Beiträge: 3339
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 207 mal
Ich bin: Freiberufler/in

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

Beitragvon black_adept » 20.12.2018, 21:47

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 ).
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Für diese Nachricht hat black_adept einen Dank bekommen :
ralf.wenzel
black_adept
Top Expert
 
Beiträge: 3184
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 553 mal
Ich bin: Freiberufler/in

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

Beitragvon ewx » 20.12.2018, 21:52

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 ).
ewx
Top Expert
 
Beiträge: 3870
Registriert: 04.08.2003, 19:55
Wohnort: Schleswig-Holstein
Dank erhalten: 334 mal

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

Beitragvon edwin » 20.12.2018, 22:01

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.
edwin
Specialist
 
Beiträge: 249
Registriert: 27.02.2007, 17:15
Wohnort: Ludwigsburg
Dank erhalten: 37 mal
Ich bin: Freiberufler/in

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

Beitragvon edwin » 20.12.2018, 22:03

Ups ewx war schneller
/Edwin
edwin
Specialist
 
Beiträge: 249
Registriert: 27.02.2007, 17:15
Wohnort: Ludwigsburg
Dank erhalten: 37 mal
Ich bin: Freiberufler/in

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

Beitragvon msfox » 21.12.2018, 22:25

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...

Für diese Nachricht hat msfox einen Dank bekommen :
a-dead-trousers
msfox
ForumUser
 
Beiträge: 20
Registriert: 12.12.2018, 12:09
Dank erhalten: 2 mal
Ich bin: Entwickler/in

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

Beitragvon black_adept » 23.12.2018, 17:18

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
black_adept
Top Expert
 
Beiträge: 3184
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 553 mal
Ich bin: Freiberufler/in

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

Beitragvon ralf.wenzel » 23.12.2018, 18:29

Drei Zeilen Doku hätten verhindert, dass sowas Nachfragen und Diskussionen auslöst....


Ralf
ralf.wenzel
Top Expert
 
Beiträge: 3339
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 207 mal
Ich bin: Freiberufler/in


Zurück zu ABAP Objects®

  Aktuelle Beiträge   
Adobe Forms - Download - Keine Seiten
vor 11 Stunden von shimsham 2 Antw.
UTF-8 mit Funktionsbaustein
vor 13 Stunden von a-dead-trousers 4 Antw.
gelöst Fehler SAVE NOT ALLOWED bei F4IF_START_VALUE_REQUEST
vor 10 Stunden von AdrianSchm 1 Antw.
SAP Logon bei Aufruf WebGUI
Gestern von msfox 0 Antw.
Formatierung Textdatei aus Query und ABAP
vor 13 Stunden von wreichelt 5 Antw.

  Ähnliche Beiträge beta
WHERE Klausel mit Komponenten einer internen Tabelle
11.07.2008, 10:49 von Matthias.Selle 1 Antw.
ALV / Eingabe ohne Konvertierung
11.08.2005, 14:16 von AC 2 Antw.
ALV: Variante umstellen ohne set_table_for_first_display
11.06.2008, 16:48 von ewx 4 Antw.
Ausgabe von Tabellen ohne DDIC-Bezug im ALV
26.01.2004, 15:56 von BlueEnergy 6 Antw.
ALV ohne CTL-Taste mehrere Zeilen markieren
10.11.2005, 17:38 von mpm@c2b 0 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder