Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer.

Ähnliche Präsentationen


Präsentation zum Thema: "Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer."—  Präsentation transkript:

1 Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

2 Übersicht Einführung Datengraphen und abstrakter Speicher Pickles (Unpickling, Pickling) Bsp. in Java und Alice

3 Einführung

4 Was meint Serialisierung? Serialisierung bedeutet, dass ein Datengraph in eine eindimensionale (lineare)-Form gebracht wird, so dass diese eindeutig in den Ursprungs- Datengraph umgewandelt werden kann.

5 Wozu benötigt man Serialisierung? Speichern Transferieren Compilieren

6 Umsetzung der Serialisierung in verschiedenen Sprachen CLU (eine Sprache, die von Pascal abstammt); (B. Liskov and St. Zilles, 1974) JAVA (Roger Riggs, Jim Waldo, Ann Wollrath Sun Microsystems, Inc., 1996), Microsoft`s.NET Framework Ruby oder Python SML/NJ (A. W. Appel and D. B. MacQueen, 1994), OCaml, Alice Mozart/Oz

7 Datengraphen und abstrakter Speicher

8 Bsp. für einen Datengraph class A { public string s; public int i; public B b; } class B { public int j; public A a; } A x = new A (); B y = new B (); x.s = aaa; x.i = 24; x.b = y; y.j = 45; y.a = x;

9 Bsp. für einen Datengraph Inhalt LabelAdresse 0123401234 object x int string object y int object x object y int 24 int 45 string aaa 1 | 2 | 3 24 aaa 0 | 4 45

10 Datengraph (formal) Ein Datengraph ist eine endliche Funktion g, so dass gilt: Ran(g) Lab x (Str Dom(g)*)

11 Abstrakter Speicher Spezielle Datenstrukturen benötigen eine spezielle Repräsentation (Zahlen, Strings, Arrays,...) (kann zur Optimierung implementiert werden)

12 Pickles

13 Definitionen Pickle: - linear - external - Platform-unabhängige Pickling - Umwandlung eines Datengraphen in einen Pickle Unpickling - Umkehrvorgang zum Pickling

14 Konstruktion/Unpickling von Datengraphen Baum azyklischer Graph zyklischer Graph

15 Baum a bc dc Instruktion# Nachfolger d c b a2 c 0 0 0 2

16 Baum a bc dc Instruktion# Nachfolger d c b a2 c 0 0 0 2

17 Azyklischer Graph Instruktion a b dc # Nachfolger c 0 0 2 2 - - b a d STORE 0 LOAD 0

18 Azyklischer Graph Instruktion a b dc # Nachfolger c 0 0 2 2 - - b a d STORE 0 LOAD 0

19 Zyklischer Graph Instruktion a b dc # Nachfolger PROMISE 0 a STORE 1 c1 - LOAD 1 2 FULFIL 0 - 2 0 b d 2

20 Zyklischer Graph Instruktion a b dc # Nachfolger PROMISE 0 a STORE 1 c1 - LOAD 1 2 FULFIL 0 - 2 0 b d 2

21 Pickling Schritt 1: Datengraph Pickle-Baum Schritt 2: Pickle-Baum Postorder- Linearisierung Schritt 3: Postorder-Linearisierung Pickle

22 Schritt 1 a b dc 0: a b -> 1 d 1: c -> 0 Datengraph Pickle-Baum

23 Schritt 2 0: a b -> 1 d 1: c -> 0 Knoten # Nachfolger 1:c -> 0 d -> 1 b 0:a - 1 - 0 2 2 Pickle-BaumPostorder-Linearisierung

24 Schritt 3 Knoten # Nachfolger -> 0 1:c -> 1 d b 0:a -1-022-1-022 Knoten # Nachfolger PROMISE 0 a c STORE 1 LOAD 1 d b FULFIL 0 21--02221--022 Postorder-LinearisierungBottom-up-Pickle

25 Top-Down-Pickles Präorder statt Postorder Top-Down Pickle Kein Promise/Fulfill nötig

26 Verschiedene Darstellungen eines Pickle-Bäume 0: a b -> 1 d 1: c -> 0 0: a b -> 1 d 1: c -> 0 =

27 Implementier-Details Depth First Search (Graph Pickle-Baum Pickle) Bestimmung der maximalen Stack-Höhe

28 Realisierung in JAVA und Alice

29 JAVA-Objekt-Modell Klassen Objekte Felder Methoden...

30 Pickling in Java Objekte können serialisiert werden Top-Down-Mechanismus Pruning

31 Bsp. für Pickling in Java import java.io.Serializable; public class A implements Serializable { public int i; public string s; }

32 Bsp. für Pickling in Java 10 public class FlattenA 20 { 30 public static void main(String [] args) 40 { 50 A a = new A(); 60 FileOutputStream fos = new FileOutputStream(aa.ser"); 70 ObjectOutputStream out = new ObjectOutputStream(fos); 80 out.writeObject(a); 90 out.close(); 100 } 110 }

33 Bsp. für Pickling in Java 10 public class InflateA 20 { 30 public static void main(String [] args) 40 { 50 A a = null; 60 FileInputStream fis = null; 70 ObjectInputStream in = null; 80 try 90 { 100 fis = new FileInputStream(aa.ser"); 110 in = new ObjectInputStream(fis); 120 a = (A)in.readObject(); 130 in.close(); 140 } 150 catch(IOException ex) { ERROR!!!} 160 catch(ClassNotFoundException ex) { ERROR!!! } 170 } 180 }

34 Pruning der Programmierer kann selbst entscheiden, welcher Teil gepickelt werden soll und welcher nicht. Die nicht zu Pickelndeln Teile müssen markiert werden

35 Bsp. für Pickling in Java import java.io.Serializable; public class A implements Serializable { transient public int i; public string s; }

36 Pickling in Alice Pickling beliebiger Daten Typsicherheit Anwendung: z.B. Komponentensystem / Compiler

37 Bsp. für Pickling in Alice signature NUM = sig type t fun fromInt : int -> t fun toInt : t -> int fun add : t * t -> t end structure Num :> NUM = struct type t = int fun toInt n = n fun fromInt n = n val add = op+ end

38 Bsp. für Pickling in Alice Pickling: Pickle.save: string * package -> unit Pickle.save ("Num." ^ Pickle.extension, pack Num :> NUM) Unpickling: Pickle.load: string -> package structure Num' = unpack Pickle.load ("Num." ^ Pickle.extension) : NUM

39 Bsp. für Pickling in Alice Achtung! Num'.add (Num.fromInt 4, Num.fromInt 5) 1.0-1.39: argument type mismatch: t * t does not match argument type Num'.t * Num'.t because type Num.t does not unify with Num'.t

40 Literaturverzeichnis Guido Tack, Linearisation, Minimisation and Transformation of Data Graphs with Transients. Diplomarbeit, Saarbrücken, Mai 2003 Roger Riggs, Jim Waldo, Ann Wollrath Sun Microsystems, Inc., Pickling State in the Java System, Toronto, Ontario, Canada, June 1996 Java Object Serialization Specification. Available from http://java.sun.com/j2se/1.4/docs/guide/serialization/, 2001. The Alice Project. Available from http://www.ps.uni- sb.de/alice, 2003. Homepage at the Programming Systems Lab, Universität des Saarlandes, Saarbrücken.


Herunterladen ppt "Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer."

Ähnliche Präsentationen


Google-Anzeigen