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

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

Collections-13


TestLists LinearLists Collections PrintableObjects

Das gesamte Beispiel basiert auf einer früheren Version. Es wurde nur eine geeignete Fehlerbehandlung auf Basis von Events, RelatedEvents und Conclusions hinzugefügt.

Die Fehlerbehandlung basiert hier auf objektbezogenen Ereignissen, d.h. wenn ein Fehler in Zusammenhang mit einem Objekt (hier betrifft es nur Kollektionen) auftritt, wird ein Ereignis erzeugt, das den Fehler beschreibt, und in Bezug zu diesem Objekt setzt. D.h. die Fehlerbehandlung hängt direkt von diesem Objekt ab. Dieser Mechanismus wird in allgemeiner und sehr flexibler Form von RelatedEvents angeboten.

Collections
Zunächst wurde die Schnittstelle für implementierende Module geändert (betraf Collections.RemoveProc) oder besser klargelegt (betraf Collections.GetProc), um von Collections aus festzustellen, ob bei Collections.Remove und Collections.Get ein Fehler vorliegt oder nicht.

In der Schnittstelle neu hinzugekommen sind

Prinzipiell wäre es auch möglich gewesen, weniger (oder im Extremfall garnichts) bezüglich der Fehlerbehandlung zu exportieren. Dieser Umfang ist jedoch sinnvoll, um den Nutzer dieses Moduls alle Freiheiten offenzulassen, wozu insbesondere die volle Auswertung eines Fehlers gehört.

In der Implementierung von Collections sind die Prozeduren InitErrorHandling und Error hinzugekommen. InitErrorHandling kreiert zur Initialisierungszeit den Ereignistyp Collections.error und füllt das Feld mit den Fehlermeldungen. Error generiert ein Fehlerereignis und füllt die entsprechenden Komponenten, um es dann als objektbezogenes Ereignis an RelatedEvents weiterzugeben. Bei Collections.Remove und Collections.Get erfolgen dann entsprechende Fehlertests und Aufrufe von Error.

LinearLists
Wurde nur an die veränderte Schnittstelle von Collections angepaßt. Bezüglich der Fehlerbehandlung geschah hier nichts, obwohl es durchaus denkbar wäre, daß auch LinearLists eigene Fehlerereignisse generiert. Eine Implementierung von Collections, die eine begrenzte Speicherkapazität hätte, könnte z.B. bei Collections.Add ein Fehlerereignis bei fehlendem Speicherplatz erzeugen.

PrintableObjects
Wurde unverändert gelassen.

TestLists
Hier wurde die Auswertung möglicher Fehler hinzugefügt. Da unzählige Listen benutzt werden, erweist es sich hier als sehr vorteilhaft, daß objektbezogene Ereignisse auf Basis von RelatedEvents.Forward weitergeleitet werden können. Konkret gibt es hier die globale Variable errors, die als Sammeltopf für alle Fehlerereignisse genutzt wird. Bei jeder frisch kreierten Liste (siehe CreateList) erfolgt dann eine Umleitung der objektbezogenen Ereignisse zu errors.

Die Hauptschleife in Cmds stellt dann nach jedem Aufruf von ReadExpression fest, ob irgendwelche Fehler vorliegen und gibt sie dann mit Hilfe von Conclusions aus.

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

Andreas Borchert, 27. November 2000