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.

3.2 ERSTE IMPLEMENTIERUNG DES <strong>ODL</strong>-INTERPRETERS 19• KonstantenFür die Gr<strong>und</strong>typen Boolean, Int <strong>und</strong> String konnte jeder zulässige Wert als Konstanteeingegeben <strong>und</strong> in <strong>ODL</strong>-Abfragen verwendet werden. Beispiel:(10 = 10 and ”ABC” = ”ABC”) equiv trueDie Eingabe einer Entität als Konstante ist nicht möglich, da im Allgemeinen nicht bekannt ist,aus welchen Werten eine Entität besteht <strong>und</strong> auf welche Weise sie eindeutig identifiziert werdenkann (der Name <strong>und</strong> Typ genügen als Identifikation oft nicht). Entitätskonstanten sind auchnicht notwendig, da zur Erstellung neuer Entitäten der new-Quantor dient <strong>und</strong> der Zugriff aufeine existierende Entität mit der Quantifikation exists var:EntityType. Conditionerfolgt, wobei Condition eine Bedingung definieren soll, die die gesuchte Entität eindeutigidentifiziert.• GleichheitstestZwei Werte vom gleichen Typ können auf Gleichheit getestet werden. Für die Gr<strong>und</strong>typenBoolean, Int <strong>und</strong> String wird dabei einfach auf Wertegleichheit getestet. Zwei Entitätsvariablendagegen werden nur dann als gleich angesehen, wenn sie ein <strong>und</strong> dieselbe Entitätreferenzieren – zwei verschiedene Entitäten, die den gleichen Namen tragen <strong>und</strong> die gleichenRelationen aufweisen, werden als ungleich betrachtet. Nehmen wir zwei <strong>ODL</strong>-Abfragen alsBeispiele:Test auf Wertgleichheit:exists b:Boolean. b = trueUngleichheit von Entitäten bei gleichem Namen:exists p1:Port. exists p2:Port.(is Name(p1, ”out”) and is Name(p2, ”out”) and neg p1 = p2 )• RelationstestMit einem Term der Form is SomeRelation( entity, object ) kann getestet werden,ob die Relation SomeRelation zwischen der spezifizierten Entitäten <strong>und</strong> dem spezifiziertenObjekt besteht. Dabei ist object eine andere Entität (wenn SomeRelation eineAssoziation ist) oder ein Wert (wenn SomeRelation ein Attribut ist). Betrachten wir Beispielefür verschiedene Relationen:Relation ist ein Attribut:exists c:Component. is Name( c, ”Centrale” )Relation ist eine Assoziation:exists comp:Component. exists subComp:Component.is SubComponents( comp, subComp )Wie wir sehen, wird in beiden Fällen wird dieselbe Syntax verwendet.An dieser Stelle muss darauf hingewiesen werden, dass in der ersten <strong>ODL</strong>-Implementierung Relationenin der Form isSomeRelation( entity, object ) notiert wurden. Im Laufeder Erweiterung des <strong>ODL</strong>-Auswertungssystems wurde die Notation verändert, sodass nun is<strong>und</strong> (für Relationsmodifikationen) has selbständige Schlüsselwörter sind, die durch ein Leerzeichenvom Namen der Relation getrennt werden. Folgende <strong>ODL</strong>-Abfragen stellen Beispielefür die früher benutzte Notation <strong>und</strong> die aktuelle Notation dar:Frühere Notation: exists c:Component. isName( c, ”Centrale” )Aktuelle Notation: exists c:Component. is Name( c, ”Centrale” )• RelationsmodifikationenNeben der Möglichkeit zu überprüfen, ob eine Relation zwischen zwei Entitäten bzw. einerEntität <strong>und</strong> einem Wert besteht, wurde die Möglichkeit implementiert, Relationen zu modifizieren.Hierbei muss zwischen der Erstellung einer Relation <strong>und</strong> dem Löschen einer Relationunterschieden werden – die entsprechenden <strong>ODL</strong>-Terme lauten:

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!