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.

5.4 ENTWURF OPTIMIERTER <strong>ODL</strong>-ABFRAGEN 93sollten möglichst einfache Teilbedingungen aus dem Quantorterm in den Variablentyp eingebrachtwerden, sodass die verbliebenen komplizierteren Bedingungen nicht für alle Typinstanzenausgewertet werden müssen, sondern nur für diejenigen, die die einfachen Teilbedingungenerfüllen. Der Effekt dieser Optimierung hängt damit von der geschickten Aufteilung des Quantortermsin schnell auszuwertende <strong>und</strong> langsam auszuwertende Teilbedingungen ab.• Aufspaltung der Restriktionsbedingung bei eingeschränkten TypenBei der Aufspaltung der Restriktionsbedingungen eingeschränkter Typen handelt es sich umeine Optimierung, die auch im Abschnitt 6.2.2 besprochen wird. Solange sie nicht vom <strong>ODL</strong>-Interpreter automatisch durchgeführt werden kann, sollte sie vom Benutzer selbst vorgenommenwerden.Wir wollen die Optimierung am folgenden Beispiel erläutern. In der Abfrageexists connection:{ var:( ch:Channel, p1:Port, p2:Port ) |var.ch.Name = ”Slot1” andvar.p1.Name = ”Slot1” and var.p2.Name = ”Slot” andvar.ch.SourcePort = var.p1 andvar.ch.DestinationPort = var.p2 }. truewerden auf die Variablen ch, p1 <strong>und</strong> p2 aus dem Produkttyp var in der Restriktionsbedingungsowohl Restriktionen angewandt, die Abhängigkeiten zwischen den Variablen beschreiben, alsauch Restriktionen, die sich nur auf eine bestimmte Variable beziehen <strong>und</strong> von anderen Variablenunabhängig sind. Letztere können in die Produkttyp-Definition verschoben werden:exists connection:{ var:(ch:{ ch:Channel | ch.Name = ”Slot1” },p1:{ p1:Port | p1.Name = ”Slot1” },p2:{ p2:Port | p2.Name = ”Slot” }) |var.ch.SourcePort = var.p1 andvar.ch.DestinationPort = var.p2 }. trueDamit sinkt die Anzahl der Produkttyp-Instanzen, über die iteriert wird <strong>und</strong> auf die die verbliebeneRestriktionsbedingungvar.ch.SourcePort = var.p1 and var.ch.DestinationPort = var.p2angewandt wird. In dem obigen Beispiel verbessert sich die Auswertungszeit von 36 auf 0,1Sek<strong>und</strong>en, was zwei Größenordnungen entspricht.• Verwendung einwertiger Relationen statt mehrwertiger RelationenFür viele Relationen zwischen Metamodell-Entitäten gilt, dass ein <strong>und</strong> dieselbe Beziehungdurch zwei symmetrische Relationen ausgedrückt wird. Zum Beispiel speichert eine Komponentein einer mehrwertigen Assoziation SubComponents all ihre Unterkomponenten, <strong>und</strong>gleichzeitig speichert jede Unterkomponente in der einwertigen Assoziation SuperComponenteine Referenz auf ihre Oberkomponente. Es gilt also:forall comp:Component. forall subComp:Component.(is SubComponents( comp, subComp ) equivsubComp.SuperComponent = comp )Ausgehend von dieser Feststellung sollte man in den Fällen, wo eine Beziehung zwischen Entitätenmithilfe von verschiedenen Relationen ausgedrückt werden kann, von denen mindestenseine einwertig ist, stets die einwertige Relation verwenden. Betrachten wir die Abfrage: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 (

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!