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.

98 KAPITEL 6: VERBESSERUNGSMÖGLICHKEITEN• asSet(value)Erstellt eine Menge, die nur das Element value enthält: M = {value}Dieser Operator ist besonders dann nützlich, wenn Mengen verwendet werden müssen, dieauf keinem anderen Weg deklariert werden können; beispielsweise kann eine Stringmenge{”str1”,”str2”} über den Ausdruckunion( asSet(”str1”), asSet(”str2”) )erhalten werden. Eine näherliegende Deklaration{ s:String | s = ”str1” or s = ”str2” }ist nicht zulässig, da über die Werte des unendlichen Typs String nicht iteriert werden kann(<strong>und</strong> auch, wenn dies möglich wäre, so wäre diese Deklaration u.U. sehr ineffizient).• unite( var:type, expression( var ) )Punktweise Auswertung eines Ausdrucks: für alle Belegungen von var wird der Ausdruckexpression ausgewertet <strong>und</strong> alle Ergebnisse zu einer Menge vereinigt:unite(var:type,expression(var)) =⋃var∈typeexpression( var )Wie der Operator asSet ist dieser Operator nützlich, um Mengen zu deklarieren, die nichtüber die Restriktion eines Datentyps erhalten werden können. Beispielsweise kann man demBenutzer alle Komponentennamen zur Auswahl anbieten:context compName: unite( c:Component, asSet( c.Name ) ).trueDie Abfragecontext compName:{ s:String |exists c:Component. c.Name = s}. trueüber die Restriktion des Typs String sieht auf den ersten Blick äquivalent aus, hat aber eineganz andere Wirkung: anstatt die Namen aller Komponenten in einer Liste zur Auswahlanzubieten, wird im Eingabedialog für diese Abfrage lediglich ein Eingabefeld für den Strings angezeigt – die Eingabe kann hier nur dann abgeschlossen werden, wenn der eingegebeneString gleich dem Namen einer existierenden Komponente ist.Die Operatoren union, intersection <strong>und</strong> difference sind mit geringem bis mittlerem Aufwandimplementierbar. Der Operator asSet ist sehr einfach zu implementieren. Die Implementierungvon unite ist von mittlerer Schwierigkeit.6.1.3 Dynamische Informationen in context-AbfragedialogenIn context-Abfragen kann in der aktuellen Version ein fest vorgegebener Hinweistext angezeigtwerden. Eine Verbesserungsmöglichkeit würde die Anzeige dynamischer Informationen darstellen,die von den aktuellen Variablenbelegungen abhängen, beispielsweise würde im Eingabedialog für dieAbfragecontext [ Hint=”Hinweistext” Info=”Anzahl der ausgewähltenPorts:”: size( portSet )] portSet:set Port. trueneben dem statischen Hinweistext auch die Größe der Portmenge angezeigt, die sich während derEingabe dynamisch ändern kann.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!