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.

5.4 ENTWURF OPTIMIERTER <strong>ODL</strong>-ABFRAGEN 95wertige Relation Ports zwischen Komponenten <strong>und</strong> Ports durch die einwertige Relation Componentzwischen Ports <strong>und</strong> Komponenten ersetzen: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( ports.p1.Component = c1 and ports.p2.Component = c2 ) )Die Auswertung dauert nun 48 Sek<strong>und</strong>en. Als nächstes bringen wir einen Teil des Quantorterms alsRestriktionsbedingung in den Produkttyp ein, der dadurch zu einem eingeschränkten Typ wird:componentsConnected( c1:Component, c2:Component ) :=exists ch:Channel.( exists ports:{ p:(p1:Port, p2:Port) |is Ports( c1, p.p1 ) and is Ports( c2, p.p2 ) }.(( is SourcePort( ch, ports.p1 ) andis DestinationPort( ch, ports.p2 ) ) or( is SourcePort( ch, ports.p2 ) andis DestinationPort( ch, ports.p1 ) ) ) )Die sich ergebende Auswertungszeit von 24 Sek<strong>und</strong>en lässt sich nun durch die Aufspaltung des Restriktionstermserheblich senken:componentsConnected( c1:Component, c2:Component ) :=exists ch:Channel.( exists ports:(p1:{ port:Port | is Ports( c1, port ) },p2:{ port:Port | is Ports( c2, port ) } ).(( is SourcePort( ch, ports.p1 ) andis DestinationPort( ch, ports.p2 ) ) or( is SourcePort( ch, ports.p2 ) andis DestinationPort( ch, ports.p1 ) ) ) )Durch diese Optimierung fällt die Auswertungszeit auf 2.7 Sek<strong>und</strong>en. Jetzt ersetzen wir die Restriktionsbedingungdurch den direkten Zugriff auf die Relation Ports zwischen Komponenten <strong>und</strong> Ports:componentsConnected( c1:Component, c2:Component ) :=exists ch:Channel.( exists ports:(p1:element (c1.Ports), p2:element (c2.Ports) ).(( is SourcePort( ch, ports.p1 ) andis DestinationPort( ch, ports.p2 ) ) or( is SourcePort( ch, ports.p2 ) andis DestinationPort( ch, ports.p1 ) ) ) )Die Auswertungszeit verbessert sich jetzt auf 0.4 Sek<strong>und</strong>en. Als Letztes ersetzen wir die auf den Kanalbezogenen Bedingungen im Quantorterm durch den direkten Zugriff auf die Relationen InChannel<strong>und</strong> OutChannels:componentsConnected( c1:Component, c2:Component ) :=exists ports:( p1:element (c1.Ports), p2:element (c2.Ports) ).(( exists ch1:element (ports.p1.OutChannels).ch1 = ports.p2.InChannel ) or( exists ch2:element (ports.p2.OutChannels).ch2 = ports.p1.InChannel ) )Die nun erreichte Laufzeit beträgt gerade einmal 0.05 Sek<strong>und</strong>en, was gegenüber der Ausgangsformu-

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!