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.
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));
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.