Diese Version ist eine Abwandlung des letzten Beispiels mit PrintableObjects, wobei jetzt PrintableObjects nicht mehr von Lists 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 benötigt Lists keine Unterstützung mehr für PrintableObjects oder andere potentielle sekundäre Abstraktionen zu offerieren. Das geschieht durch die Diensteanbieter, die später beliebig hinzukommen können.