11.07.2015 Aufrufe

ODL-Sprachkonstrukte und interaktive Benutzerschnittstelle - TUM

ODL-Sprachkonstrukte und interaktive Benutzerschnittstelle - TUM

ODL-Sprachkonstrukte und interaktive Benutzerschnittstelle - TUM

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

56 KAPITEL 5: IMPLEMENTIERUNG– PowersetIteratorIteriert über die Potenzmenge einer spezifizierten Kollektion. Für die Kollektion(A,B,C)würde ein PowersetIterator beispielsweise folgende Mengen in Form von java.util.LinkedList-Instanzen liefern:({}, {A}, {B}, {A,B}, {C}, {A,C}, {B,C}, {A,B,C}).Die Parameterkollektion wird, wie auch bei anderen Iteratoren aus diesem Package, überihren Iterator spezifiziert.Ein ausführlicher Kommentar zu den Klassen im Package quest.util.collections befindetsich im Quellcode <strong>und</strong> in [<strong>ODL</strong>API]. Ein Klassendiagramm des Packages wird im AnhangA auf der Abbildung A.7 gezeigt.Da die oben beschriebenen Klassen im Zuge der Implementierung von MetaType-Unterklassenfür die neuen <strong>ODL</strong>-Datentypen erstellt wurden, wollen wir angeben, welche Datentypenvon welchen Iteratoren Gebrauch machen, um in ihrer instances-Methode einen Iteratorüber die Werte des jeweiligen Typs zu konstruieren:<strong>ODL</strong>-Datentyp Klasse Benutzte Klassen ausquest.util.collectionsProdukttyp MetaProductType CompositeIterator,ResettableIteratorEingeschränkter Typ MetaRestrictedType ConditionedIteratorConditionedIterator.ConditionResettableIteratorMengentyp MetaSetType PowersetIteratorResettableIteratorAn dieser Stelle ist ein Hinweis zur Gestaltung effizienter <strong>ODL</strong>-Abfragen notwendig: die (indirekte)Benutzung der Klasse CachedIterator bei der Iteration durch Tupel eines Produkttyps(indem MetaProductType auf die Klasse CompositeIterator zurückgreift, dieihrerseits CachedIterator benutzt) hat den Vorteil zur Folge, dass eine Abfrage der Formexists var:( p1:Port, p2:Port, c:Component ).(var.p1.Component = var.c and var.p2.Component = var.c )durch das Caching zum Teil erheblich schneller ausgewertet wird, als die Abfrageexists p1:Port. exists p2:Port. exists c:Component.(p1.Component = c and p2.Component = c ).Dies sollte beim Entwurf <strong>und</strong> Optimierung von <strong>ODL</strong>-Abfragen berücksichtigt werden. MehrInformationen zum Entwurf effizienter Abfragen gibt es im Abschnitt 5.4.• Benamte PrädikateFür die benamten Prädikate waren zwei Anwendungsfälle zu implementieren:1) Deklaration eines benamten Prädikats. Beispiel:compHasSubComps( comp:Component ) :=size( comp.SubComponents ) > 02) Aufruf eines zuvor deklarierten benamten Prädikats. Beispiel:exists c:Component. call compHasSubComps( c )Wir beschreiben nun die Implementierung beider Anwendungsfälle.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!