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

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

94 KAPITEL 5: IMPLEMENTIERUNGis Ports( var.c1, var.p ) or is Ports( var.c2, var.p ) oris Ports( var.c3, var.p ) ) )Hier wird für den Port p festgestellt, ob er zu einer der paarweise verschiedenen Komponentenc1, c2 oder c3 gehört, indem die mehrwertige Relation Ports zwischen Komponenten <strong>und</strong>Ports benutzt wird. Die mehrwertige Relation Ports zwischen Komponenten <strong>und</strong> Ports kanndurch die einwertige Relation Component zwischen Ports <strong>und</strong> Komponenten ersetzt werden:exists var:( c1:Component, c2:Component,c3:Component, p:Port ).(neg var.c1 = var.c2 and neg var.c1 = var.c3 andneg var.c2 = var.c3 and (var.p.Component = var.c1 or var.p.Component = var.c2 orvar.p.Component = var.c3 ) )In diesem Beispiel sinkt die Auswertungszeit von 38 auf 32 Sek<strong>und</strong>en. Der Beschleunigungseffektwird dadurch erreicht, dass bei der Überprüfung des Bestehens einer einwertigen Relationlediglich ein Vergleich ausgeführt werden muss, während bei der Überprüfung einer mehrwertigenRelation alle assoziierten Entitäten mit der getesteten Entität verglichen werden müssen.Wir haben verschiedene Techniken zum Entwurf optimierter Abfragen betrachtet. Nun wollen wirein praktisches Beispiel geben, in dem alle besprochenen Techniken Anwendung finden. Wir entwerfenein benamtes PrädikatcomponentsConnected( c1:Component, c2:Component )der für zwei Komponenten feststellt, ob sie durch einen Kanal verb<strong>und</strong>en sind. Die Effizienz verschiedenerVersionen dieses benamten Prädikats testen wir mit der Abfrageexists comps:{ c:( c1:Component, c2:Component ) |c.c1.Name = ”Till1” and c.c2.Name = ”Connection1” }.call componentsConnected( comps.c1, comps.c2 )die das Prädikat genau einmal ausführt. Anschließend stellen wir verschiedene Formulierungen desbenamten Prädikats vor, wobei in jeder nächsten Version die Änderungen gegenüber der vorherigendurch Unterstreichung hervorgehoben werden.Die erste unoptimierte Version des Prädikats istcomponentsConnected( c1:Component, c2:Component ) :=exists ch:Channel. exists p1:Port. exists p2:Port.(( ( is SourcePort( ch, p1 ) andis DestinationPort( ch, p2 ) ) or( is SourcePort( ch, p2 ) andis DestinationPort( ch, p1 ) ) ) and( is Ports( c1, p1 ) and is Ports( c2, p2 ) ) )Seine Ausführung dauert 68 Sek<strong>und</strong>en. Als erste Optimierung ersetzen wir die Quantorliste durcheinen Produkttyp, wobei die vom ersten exists-Quantor geb<strong>und</strong>ene Variable nicht in den Produkttypeingebracht wird:componentsConnected( c1:Component, c2:Component ) :=exists ch:Channel. exists ports:( p1:Port, p2:Port ).(( ( is SourcePort( ch, ports.p1 ) andis DestinationPort( ch, ports.p2 ) ) or( is SourcePort( ch, ports.p2 ) andis DestinationPort( ch, ports.p1 ) ) ) and( is Ports( c1, ports.p1 ) and is Ports( c2, ports.p2 ) ) )Die Auswertungszeit sinkt dadurch auf 52 Sek<strong>und</strong>en. Als nächste Optimierung wollen wir die mehr-

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!