Führen Sie die entsprechenden Änderungen an dem Beispiel Collections-3 durch und kreieren Sie eine Implementierung für Collections die alle Operationen, die eine Änderung bewirken, aufsammelt und verfügbar hält:
DEFINITION Logfiles; IMPORT Collections; TYPE Logfile = POINTER TO LogfileRec; LogfileRec = RECORD (Collections.CollectionRec) END; PROCEDURE Create(VAR logfile: Logfile); (* create a logfile which looks like a normal collection but logs all modifying operations; note that `logfile' as collection remains empty *) PROCEDURE GetOps(logfile: Logfile; VAR loggedOperations: Collections.Collection); (* returns the list of logged operations in `loggedOperations' *) PROCEDURE Apply(logfile: Logfile; on: Collections.Collection); (* apply all logged operations of `logfile' on `on' *) END Logfiles.
Nun können Sie in einem Testszenario vor einer beliebigen Kollektion mit Hilfe von DribbleCollections einerseits die Original-Kollektion als primary erreichen und über secondary ein Logfile von Logfiles unterhalten. Dann besteht später die Möglichkeit, die aufgezeichneten Operationen auf einer anderen Kollektion loszulassen (via Apply) oder anzuschauen (via GetOps). Schreiben Sie ein Testprogramm, das ein entsprechendes Testszenario aufbaut und die aufgezeichneten Operationen später auf einer anderen Kollektion losläßt.
Fragen zu den Übungen oder zur Vorlesungen können Sie jederzeit per E-Mail stellen oder dazu (ggf. nach kurzer telefonischer Absprache) zu einem Besuch bei mir vorbeikommen.
Schicken Sie Ihre Lösung bis zum Abgabetermin am Dienstag, dem 14. November 2000, 17.00 Uhr mit folgendem Kommando:
abgabe oolib *.od *.om Makefile
Weitere Hinweise zur Vorlesung und zu den Übungen finden Sie im WWW unter "http://www.mathematik.uni-ulm.de/sai/ws00/oolib/".