Universität Ulm, Fakultät für Mathematik und Wirtschaftswissenschaften, SAI

WS 2000/01 || Entwicklung objekt-orientierter Bibliotheken || Beispiele

Collections-16


TestLists LinearLists PrintableCollections PrintableIntegers Collections PrintableObjects Integers

Dieses Beispiel ist gegenüber einem früheren Beispiel mit der Eigenschaft der Persistenz versehen worden:

Collections
Da es sich bei Collections um eine Abstraktion handelt, für die keine Komponenten zu sichern oder zu restaurieren sind, ist die Unterstützung der Persistenz reichlich einfach:

Statt

Services.CreateType(type, "Collections.Collection", "");
wird nun
PersistentObjects.RegisterType(type,
   "Collections.Collection", "PersistentDisciplines.Object", NIL);
im Initialisierungsteil des Moduls aufgerufen.

Integers
ist nun ein relativ einfaches Beispiel für einen persistenten Datentyp.

LinearLists
Bei LinearLists ist der Aufwand etwas größer:

  1. Im Initialisierungsteil wird statt
    Services.CreateType(type, "LinearLists.List", "Collections.Collection");
    
    nun ein Schnittstellen-Record PersistentObjects übergeben:
    PROCEDURE Init;
       VAR
          persif: PersistentObjects.Interface;
    BEGIN
       NEW(if);
       if.add := Add; if.first := First; if.next := Next; if.get := Get;
       if.remove := Remove;
       objectDiscID := Disciplines.Unique();
    
       NEW(persif);
       persif.create := CreateList;
       persif.read := ReadList;
       persif.write := WriteList;
       persif.createAndRead := NIL;
       PersistentObjects.RegisterType(type,
          "LinearLists.List", "Collections.Collection", persif);
    END Init;
    

  2. Bei dem Anlegen einer neuen Liste wird im Konstruktur statt
    Services.Init(list, type);
    
    nun
    PersistentObjects.Init(list, type);
    
    aufgerufen.

  3. Schließlich sind noch die Schnittstellenprozeduren zu implementieren.

PrintableCollections
wurde unverändert übernommen.

PrintableIntegers
wurde unverändert übernommen.

PrintableObjects
wurde unverändert übernommen.

TestLists
Das Testprogramm wurde um die Ausnutzung der Persistenz erweitert. So sieht die neue Eingabesyntax aus:
Expression = Integer |
	     List |
	     "$" Integer |
	     Op2 Expression Expression |
	     "write" FileName Expression |
	     "read" FileName .
List =       "(" [ Expression { "," Expression } ] ")" .

Op2 =        "add" |              (* Collections.Add *)
	     "get" |              (* Collections.Get *)
	     "remove" .           (* Collections.Remove *)

FileName =   '"' {AnyCharExceptQuote} '"' .

Die Quellen stehen als Shell-Archiv zur Verfügung.
WS 2000/01 || Entwicklung objekt-orientierter Bibliotheken || Beispiele

Andreas Borchert, 18. Dezember 2000