40
Serialisierun g Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Embed Size (px)

Citation preview

Page 1: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Serialisierung

Proseminar Programmiersysteme

Betreuer: Guido Tack

Benedict Fehringer

Page 2: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Übersicht

• Einführung

• Datengraphen und abstrakter Speicher

• Pickles (Unpickling, Pickling)

• Bsp. in Java und Alice

Page 3: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Einführung

Page 4: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

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.

Page 5: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Wozu benötigt man Serialisierung?

• Speichern

• Transferieren

• Compilieren

Page 6: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

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

Page 7: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Datengraphen und abstrakter

Speicher

Page 8: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

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;

Page 9: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Bsp. für einen Datengraph

Inhalt LabelAdresse

0

1

2

3

4

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“

Page 10: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Datengraph (formal)

Ein Datengraph ist eine endliche Funktion g, so dass gilt:

Ran(g) Lab x (Str Dom(g)*)

Page 11: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Abstrakter Speicher

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

Page 12: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Pickles

Page 13: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Definitionen

Pickle:

- linear - external - „Platform-unabhängige“

Pickling

- Umwandlung eines Datengraphen in einen Pickle

Unpickling

- Umkehrvorgang zum Pickling

Page 14: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Konstruktion/Unpickling von Datengraphen

• Baum

• azyklischer Graph

• zyklischer Graph

Page 15: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Baum

a

bc

dc

Instruktion # Nachfolger

d

c

b

a 2

c

0

0

0

2

Page 16: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Baum

a

bc

dc

Instruktion # Nachfolger

d

c

b

a 2

c

0

0

0

2

Page 17: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Azyklischer Graph

Instruktion

a

b

dc

# Nachfolger

c

0

0

2

2

-

-

b

a

d

STORE 0

LOAD 0

Page 18: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Azyklischer Graph

Instruktion

a

b

dc

# Nachfolger

c

0

0

2

2

-

-

b

a

d

STORE 0

LOAD 0

Page 19: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Zyklischer Graph

Instruktion a

b

dc

# Nachfolger

PROMISE 0 a

STORE 1

c 1

-

LOAD 1

2

FULFIL 0

-

2

0

b

d

2

Page 20: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Zyklischer Graph

Instruktion a

b

dc

# Nachfolger

PROMISE 0 a

STORE 1

c 1

-

LOAD 1

2

FULFIL 0

-

2

0

b

d

2

Page 21: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Pickling

• Schritt 1: Datengraph Pickle-Baum

• Schritt 2: Pickle-Baum Postorder-Linearisierung

• Schritt 3: Postorder-Linearisierung Pickle

Page 22: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Schritt 1

a

b

dc

0: a

b

-> 1 d

1: c

-> 0

Datengraph Pickle-Baum

Page 23: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

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-Baum Postorder-Linearisierung

Page 24: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Schritt 3

Knoten # Nachfolger

-> 0

1:c

-> 1

d

b

0:a

-

1

-

0

2

2

Knoten # Nachfolger

PROMISE 0 a

c

STORE 1

LOAD 1

d

b

FULFIL 0

2

1

-

-

0

2

2

Postorder-Linearisierung Bottom-up-Pickle

Page 25: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Top-Down-Pickles

• Präorder statt Postorder Top-Down Pickle

• Kein Promise/Fulfill nötig

Page 26: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Verschiedene Darstellungen eines Pickle-Bäume

0: a

b

-> 1d

1: c

-> 0

0: a

b-> 1

d1: c

-> 0

=

Page 27: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Implementier-Details

• Depth First Search (Graph Pickle-Baum Pickle)

• Bestimmung der maximalen Stack-Höhe

Page 28: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Realisierung in JAVA und Alice

Page 29: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

JAVA-Objekt-Modell

• Klassen

• Objekte

• Felder

• Methoden

• ...

Page 30: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Pickling in Java

• Objekte können serialisiert werden

• Top-Down-Mechanismus

• Pruning

Page 31: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Bsp. für Pickling in Java

import java.io.Serializable;public class A implements Serializable{public int i;public string s; }

Page 32: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Bsp. für Pickling in Java

10 public class FlattenA20 {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 }

Page 33: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Bsp. für Pickling in Java10 public class InflateA20 {30 public static void main(String [] args)40 {50 A a = null;60 FileInputStream fis = null;70 ObjectInputStream in = null;80 try90 {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 }

Page 34: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Pruning

• der Programmierer kann selbst entscheiden, welcher Teil gepickelt werden soll und welcher nicht.

• Die nicht zu Pickelndeln Teile müssen markiert werden

Page 35: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Bsp. für Pickling in Java

import java.io.Serializable;public class A implements Serializable{transient public int i;public string s; }

Page 36: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Pickling in Alice

• Pickling beliebiger Daten

• Typsicherheit

• Anwendung: z.B. Komponentensystem / Compiler

Page 37: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

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

Page 38: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

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

Page 39: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

Bsp. für Pickling in Alice

Achtung!

Num'.add (Num.fromInt 4, Num.fromInt 5)1.0-1.39: argument type mismatch: t * tdoes not match argument type Num'.t * Num'.tbecause type Num.tdoes not unify with Num'.t

Page 40: Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer

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.