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

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

Collections-14


TestLists LinearLists PrintableCollections PrintableIntegers Collections PrintableObjects Integers

Diese Version ist eine Abwandlung des letzten Beispiels mit PrintableObjects, wobei jetzt PrintableObjects nicht mehr von LinearLists und TestLists (für ganze Zahlen) unterstützt wird, sondern durch die Diensteanbieter PrintableCollections und PrintableIntegers.

Collections
Hier kam die Unterstützung von Services hinzu (siehe auch §5.6 im Skript):
VAR type: Services.Type; (* globale private Variable *)
(* ... *)
(* im Initialisierungsteil von Collections *)
Services.CreateType(type, "Collections.Collection", "");

Im übrigen wird bei Collections.Init geprüft, ob Services.Init ordnungsgemäß aufgerufen worden ist:

VAR ctype: Services.Type; (* lokale Variable von Collections.Init *)
(* ... *)
Services.GetType(collection, ctype);
ASSERT((ctype # NIL) & Services.IsExtensionOf(ctype, type));

Integers
Während früher dieser Typ innerhalb von TestLists integriert war, ist es jetzt sinnvoller, ihn herauszugliedern, damit auch der zugehörige Diensteanbieter für PrintableObjects separat existieren kann.

LinearLists
Genauso wie bei Collections kommt hier die Unterstützung für Services hinzu. Bei dem Konstruktor ist auf die korrekte Reihenfolge der Initialisierungen zu achten:
Services.Init(list, type); (* zuerst mit dem Typ und dann ... *)
Collections.Init(list, if, caps); (* ... mit der Schnittstelle verknuepfen *)

Im übrigen muß LinearLists keine Unterstützung mehr für PrintableObjects oder andere potentielle sekundäre Abstraktionen leisten. Das geschieht durch die Diensteanbieter, die später beliebig hinzukommen können.

PrintableCollections
Diensteanbieter des Dienstes ``PrintableObjects'' für Erweiterungen von Collections.Collection (einschließlich LinearLists.List).

PrintableIntegers
Diensteanbieter des Dienstes ``PrintableObjects'' für Erweiterungen von Integers.Integer.

PrintableObjects
Während früher PrintableObjects seine Schnittstelle direkt bei den Objekten anheftete, werden jetzt die zugehörigen Typobjekte verwendet, wobei es schon reicht, wenn ein Basistyp unterstützt wird. Entsprechend wird während der Initialisierung ein Dienst definiert (als Name wird per Konvention der Name des definierenden Moduls verwendet, also "PrintableObjects"). Diensteanbieter können dann die Prozedur PrintableObjects.Support verwenden, um ihre Implementierung für eine bestimmte Erweiterung von Services.Object zu registrieren.

TestLists
Im Vergleich zu früher wurde der Typ Integers.Integer ausgegliedert. Außerdem wird durch den Import von PrintableCollections und PrintableIntegers sichergestellt, daß die benötigten Diensteanbieter auch mit von der Partie sind.

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

Andreas Borchert, 11. Dezember 2000