Home
ODL-Sprachkonstrukte und interaktive Benutzerschnittstelle
Contents
1. 2D 22 ssoerp jsonb PIOA IPLOS UO 115 190125 1opeuuoq3utngo Li 9fqo 84110481350 129 90198 Laef zuauodwo gpu 21571 8 4 qune 4 58 A A Z lt sums 25 ploa Summspusddyps 3115 4 14198 pioA Surns pusdaigios Sue ous dal uns 31135 841150 112 40 uonvuuo murnsoT12efqoinejeqa2 Sue Zuumepuadde 31115 Sug 4 14 KELLER RETTEN EREECHEN T V 0 Su141S 8u141S0 112240 AO1DUL10 150 122 QqQ s42 ui0 f s1242pu23 22880 D1p152nb WAU IJEWO ASUS A od 1198 Surngojemdoson ea 5 LIQnVdHd A 1504 ormatters model cellRenderers odl evaluation Package quest Abbildung A 12 Cellrenderer Klassen und ObjectToStringFormatter Hierarchie ANHANG A KLASSENDIAGRAMME 137 NavigationBar OTHER_ACTION_EVENT int PREVIOUS_BUTTON_PRESSED int NEXT_BUTTON_PRESSED int CANCEL_BUTTON_PRESSED int FINISH_BUTTON_PRESSED int separateFinishButton bo
2. 53 8 SUNSHOVSSAN 5 1 UIN 5 958559 10 4 uondoox7qpeA92ruopoouejsug uondooxqod amp pyonpoagqpipeAug Uondooxquone osunso N uondooxgquone osuongoN uondooxqgofgelie uondooxgo qerr Apunoqun uondeoxq10129 9Suon SO N undo xy qene Apunoquy UOHAIIXFI0IRPSYPNSON UONIIXAPPONUOHENTEAA 32 40 4012 81115 8 11 0 Isrpayur Jordung jsrqpoxurTo duirs sonnugoN193 Surpurg sjuourugiSs y1e S193 PIOA s USUUSISSWIESIos 125 A19S NSOYULOL NSI YUI L NSOYULOL 32 40 91012 Surns urnSol 10 819 10 0191 ysr 6 98 AST 3srTpe ur Tordung urojnsrTasv WANSTTISIJ Isr poyu 1 o qO uo 5 ueo ooq spenbo4 Surng
3. 4 AranQ oo qynejoq ionpod pionpoiqpueqonsoduo KranQpoogyneyaq 1 1 1 T T T Kai I I I I i I I I TOS ATUL ROOT DOERR amp i2n d an pAI2S 421 195 amp i2n q 4 12240 amp tongan amp uan go3ajug 41 SIP Alas 4 agATanb 5 one Ajonpoiuq ed amp yoalqg ad4 Qnuq QnuqKi nb 3115 1 15 8 8 ueooo g oogronb4 118 409 1 ueSeuvjAd1onQ opji lur T nJDA19S G nO1 2s angadi 112 419101004 oov I Package quest odl evaluat Abbildung A 9 134 ANHANG KLASSENDIAGRAMME setInputValues void setInput
4. 8 namdan pzu Toppen n epa LPS MEPA Que qindupkrengjarear rayon qjouvqm du aon Jod X po1314 82 994I8qV T Tous indup ion BEIER EE EE EST EE RSR qidu Gong od DEE Kop poueqinduprong3uu DEET eich zog faueginduy 00 Ted mis opt LENA TODA pog m EE E 70 371 uD I mdu KAISER DEE actory model query on 138 ounqunduras ERUN pungin DEE EE Elei oosponur T4037 T1220 WIR SIR NITE KU EE UE BEIER Komm DES EL awepo LEES FTD qun qgmdu OAN Top ogm ang npo eque
5. jag s2onporgjauegnduy AianQyad 1196198 Aoonpoagjoueqindu amp ienQyeirsoduro 2onporg jauegnduy AianQad 12npoaqio84 1eonpoigqpoueqindu AranQuonsajag 2onporgjaueginduyAranQad4 deonporgaueginduy AranQuorsajag Au sdeonpolgjaueg mdu Land oonpoag oueqandu 8 1135128 Joonposgjoueg nduyArangd 2onporg jaurginduyArongyasaqupos Aoonpoagqpoueqindu Arend aonposgjaueginduyAanQjoogyes 8 8 oueqondu 8 model query factory on Package quest odl evaluat Idung A 15 i QueryInputPanelProducer Hierarchie Abb KLASSENDIAGRAMME ANHANG A 140 eLA Avjdsiqanyr 1952122494 Kersan EASIST TOES Keyds gganpe AS Ku dsiq nieA19S lp n Aejdsiqonge AJSISUT Kore Ke dstq one 61934 p ox am uuos EELER yA oroegAr dsigange A19S EE amp 10J9D 1 125 opus Aimdupod amp g popmsoy DEE od porounsagmio pad paoms yeu
6. Call expressions call expression identifier 1 par args par named predicate call call call expression args arglist arglist arg arglist tail arglist tail comma arg arg expression Expressions non constant expression fct functional_expression sel selector_expression var defined_variable expression non_constant non_constant_expression arithmetic arithmetic_expression constant constant_expression constant_expression bool bool_constant_expr string string_constant_expr bool_constant_expr bool_constant int_constant_expr sign int_constant string_constant_expr string_constant sign ANHANG ODL GRAMMATIK IN DER SABLECC NOTATION 149 unary_plus plus unary_minus minus functional_expression call_expression selector_expression defined_variable dot selection selection selector selection_tail selection_tail dot selector selector identifier defined_variable variable variable identifier equal expression l_expr expression equal r_expr expression Arithmetic expressions arithmetic_expression factor factor plus arithmetic_expression plus factor minus arithmetic_expression minus factor factor arithmetic_term arithmetic_term mult factor mult arithmetic term arithmetic term constant int_constant_expr expression l par arithmetic expression
7. c issaud xq Amugpge ias uone ow uone 9s1234 1119 1101722 Furmg Fumgo ojenpeAa PC 5 81503 Sue 81503 ed ruioj od amp 1128 OTGELIE A 128 Zug 81603 uorssoudxgpenbg Suug suujgon oyenqeA2 suotssardxquossig 81503 1 Didde uorsso1dxg uorsso1dxgpo84 a 801015 801150 5 81503 3psoyuro SUTHSTEUTHSOIT WHO add 8 ernuopnueuns1y1934 juno GIE SurnS umN198 BUER Surng oureu uorsso1dxq uorsso1dxzngo T1o34 uorsso1dxquostveduio 4 uar ooejiajur THIS UNS 055 SurnS ureN leoIp iq198 uorssa
8. 425 pioazuoyounsiqospo4 pioazuorpunfuo aspo4 pioazaoua pambg2spa4 10A uu2 5 10082552 pios 250 DIE EN IO EE DAT aous analysis model LON Package quest odl evaluat Abbildung A 8 EvalTreeVisitor Hierarchie und EvalTreeNode 133 KLASSENDIAGRAMME ANHANG A Ki nOSuunsinej q 329190 12 151 39 40 1 1 KronQyed amp mepa LPPE PA Aanugimejeq 4 BuG anos 4121031419 122140 44 2141594 12240 amp 19n paro1418244 ON OAK T P2 914 S2 gt ki 399140 A1onpoiq Aron d4 1 00 4 5 Jasaquy Ant 39 40 Ayonporg AtonOd anpe 4 1 5 0 15 122100 1 0
9. DNIALS UNS AN ONDLLS SSEID SSV1D Ad AL SONVLLSNI ATTAIN 30958 Tosa Ue TOEP AY 2 d Lia adi 1 qO Ki nb 1 qO Ki nb ueo oog juopuedoqs ueo oog juopuedoqsr BUSERT 1 1 pd amp Tv12jy piowasumsun2d unajoog juapuadag up looq lu pu d q 5501 5 0 EEGEN DEIER 21004 ad maw a 0 d pioA A dde4 Ueo ooq ureuro ToTurTsra 1 1 DE De EIER n eA ltsoduuoO uu su d e10duro 212154 JOLINA JENISI OVINA LNAI s sooutsun JOjtJoj sooug sun palgo A onb 32 0 1 142 1215128 lut x puli tJnu pll 8 Suung roynueppueuro 1934 add piueuropqio34 8 sodA s qeuse seorpuprormueyg Surns siognueppiuourspo SSe SS VTO AdAL HONVISNI T DTSTNTT ueopooq Aje20Tiuepuedoqsu Suus suuso 3unsrTsodAu Suug Suuson add ad iueuropqie34 ad amp gonsoduio pjojyasqy I I I 81 1 8 adk 2d amp jjuout
10. Endlosschleife die verlassen wird wenn das Ergebnis der 5 2 INTERAKTIVE BENUTZERSCHNITTSTELLE 85 Auswertung zur ckzugeben ist oder wenn ein Navigationsereignis aufgetreten ist while true try Benutzerabfrage f r den Variablenwert durchf hren lassen Object value variableType query Lokale Kopie der Variablenbelegungen anlegen sollte der Benutzer sp ter mit einem R ckw rtsschritt zu diesem context Quantor zur ckkehren m ssen die urspr nglichen Variablenbelegungen verf gbar sein Assignment localFreeVariables Assignment freeVariables clone Vom Benutzer eingegebenen Variablenwert zu den Variablenbelegungen hinzuf gen localFreeVariables put variableldentifier value Den vom context Quantor gebundenen Term auswerten TermResult opResult TermResult operandTerm evaluate localFreeVariables wantedValue Das Ergebnis der Termauswertung zur ckgeben return opResult catch NavigationEventException navigationEvent Navigationsexception abgefangen die im Laufe der Benutzereingabe oder bei der Auswertungs des Quantorterms aufgetreten ist if navigationEvent getEventType NavigationEventException INPUT CANCELLED Bei einem Abbruch wird die UserBreakException abgesetzt Diese Exception wird nicht mehr von einem anderen context Quantor abgefangen sondern bis zum ODL Ed
11. exists ports pl Port p2 Port ports pl Type Text ports p2 Type Text liefert alle Portpaare die aus Ports gleichen Datentyps bestehen e Eingeschr nkte Typen Rest rictedType in Sch01 S 18 als Mengenkomprehension bezeichnet Oft ist es notwendig anstatt aller Instanzen eines Typs nur diejenigen zu betrachten die einer bestimmten Bedingung gen gen Zu diesem Zweck werden eingeschr nkte Typen eingef hrt Die Deklaration eines eingeschr nkten Typs ist an die mathematische Schreibwei se f r Teilmengen einer Basismenge angelehnt wobei hier Typen die Rolle von Mengen spielen var ident base_type restriction_term ber ident 4 3 Als Basistyp eines eingeschr nkten Typs darf jeder g ltige ODL Typ dienen Der Restrik tionsterm definiert welche Instanzen des Basistyps in dem eingeschr nkten Typ enthalten sind er darf die lokale Variable ident und andere im Namensraum bereits deklarierte Variablen verwenden Zudem darf der Restriktionsterm nur eine CCL Proposition sein d h dass Schl sselw rter result not result sowie Quantoren new und context nicht zugelassen sind damit wird sichergestellt dass ein Restriktionsterm keine nderungen am Modell vornehmen kann und keiner Benutzerinteraktionen bedarf Bespiele var p Port true Alle Ports var comp Component comp Name Compl Alle Komponenten mit dem Namen Comp1 Die semantisch quivalente Abfrage context c Component new p Por
12. 9 2 2 Query Klassen Ter Epp Rees eed 5 2 3 Dialogflusskontrolle 5 3 Vorbereitung weitergehender nderungen 5 4 Entwurf optimierter ODL Abfragen Ch Un 10 12 15 15 17 21 21 26 27 29 30 31 31 33 36 39 A INHALTSVERZEICHNIS 6 Verbesserungsm glichkeiten 97 6 1 Erweiterungen des Sprachumfangs 97 6 1 1 Teilmengen unendlicher Typen 0 97 6 1 2 _ 97 6 1 3 Dynamische Informationen in context Abfragedialogen 98 6 1 4 Arithmetische Division es 99 6 2 Optimierung der 101 6 2 1 Erweiterung der Skolem Optimierung f r context und new Quantoren 101 6 2 2 Optimierung eingeschr nkter Typen 105 6 3 Verbesserungen an der Benutzerschnittstelle 112 6 3 1 Konfiguration der Eingabedialoge w hrend der Eingabe 112 6 3 2 Verbesserungen bei der Eingabe eingeschr nkter Typen 112 6 4 Konzept einer flexiblen 1 5 119 7 Fazit 122 A Klassendiagramme 124 B ODL Grammatik 141 C ODL Grammatik in der SableCC Notation 144 Literatur 151 Kapitel 1 Einleitung 1 1 Aufgabenstellung Das AutoFocus Quest Application AQuA Framework stel
13. Express Package quest odl evaluation model Abbildung A 3 KLASSENDIAGRAMME ANHANG A 128 TES SUL GOI proA uoneogrpo uopippyuoneroy UNS Se NGI p fqo mquyy123 Surng oureNonqunyjos4 proa K dde Zurmg Sumgo 515 uonejoyoinqun v yeaowayuonejay ge Surng oumNoinqume WRC MUNG COWUNUSHSTNHN V SUIS UNS jsrT sonnugporerooss Amugporeroossy1934 DJ00Q UONEWOSSY ULWOLSI 8113 10012055 398 proA K ddea Suug suujgon up ooq slstx uong gruongroossy Surns ourNod Surg uonvroosse T I 2 Zurmg Sumgor SurnS 1x LlurH198 Unter proa daygpremyoegarquugas proA so qerm A amp ejdsiqnasa oyenpeAa uennuenQyxojuo sums mapu 1 5 A ua LUON Y THT SS LOOT ooupoyur DIOA Afdder Sumgs sumson jnsospuo ua p uonipp yuone oo Surng suujgon ojenpeAa yune
14. Formel context lt Variable gt lt Typ gt Formel 3 2 ERSTE IMPLEMENTIERUNG DES ODL INTERPRETERS 17 F r eine vom context Quantor gebundene Variable wird eine Benutzerabfrage gestartet in welcher der Benutzer einen Wert f r die Variable eingeben kann Wir wollen die Benutzerinteraktionen und die Modellmodifikationen am Beispiel einer ODL Abfrage veranschaulichen die f r eine vom Benutzer ausgew hlte Komponente eine Unterkompo nente erstellt und dieser einen vom Benutzer eingegebenen Namen zuweist context c Component Select a component context name String Enter a name for a new component new c2 Component Create a new component Assign the entered name to the new component result has Name c2 name and Register the new component as a subcomponent of the selected component result has SubComponents c c2 Die Erweiterung des CCL Sprachumfangs um die Sprachkonstrukte f r Modellmodifikationen und Benutzerinteraktionen ergibt den Sprachumfang von ODL Wie schon erw hnt operiert ODL auf endlichen Universen jedes Modell kann nur endlich viele Entit ten enthalten die endlich viele Re lationen besitzen und enth lt keine Sprachkonstrukte die eine Endlosschleife erm glichen w rden Damit ist garantiert dass eine ODL Abfrage nach endlicher Zeit terminiert und ein Ergebnis liefert An dieser Stelle wollen wir auf hnlichkeiten und Unterschiede zwischen ODL und OCL Objec
15. Ps x1 x2 pe xa p7 X1 xs wird zu var vi S ixi x1 x2 T T5 V4 x4 xs 5 p3 x1 pa x2 x3 ps X1 x2 A po xs x4 p7 x1 5 umgeformt wobei neue lokale Variablen sind Um die Typdeklaration bersichtlich zu halten k rzen wir einen Typ v x 7 p x mit vi Tipj ab b Jetzt verarbeiten wir die mehrstelligen Pr dikate aus und M3 M4 und Ms sind leer und m s sen nicht verarbeitet werden Wir geben f r jedes Pr dikat aus und die Typdeklaration nach der Umformung die dieses Pr dikat mit seinen Argumenten gruppiert pa xi x2 Die Elemente x und werden zu einem Elementtyp mit dem Restriktionsterm pax x2 gruppiert var via xo Te pa x1 T3 v4 Tapa xs Ts 4 2 ps x1 x2 po x3 4 p7 x1 X3 5 J pa xa Die Elemente x und m ssen zu einem Elementtyp mit dem Restriktionsterm pa x2 gruppiert werden Da x bereits fr her mit x gruppiert wurde ergibt sich ein neuer Elementtyp der x1 x2 und gruppiert var vios vi23 v12 Ti pio pas T3 pa x2 va Tapa xs Ts Ps X1 po x3 xa p7 x1 x5 Delta x4 Die Elemente und m ssen zu einem Elementtyp gruppiert werden Da X3 bereits in einem Elementtyp mit x und x zusammengef
16. diese Module ben tigen keine weiteren Kenntnisse ber das QUEST Tool und sind damit auch in zuk nftigen Weiterentwicklungen des AQuA Frameworks einsetzbar die das gleiche oder ein abw rtskompatibles Metamodell verwenden 2 2 METAMODELL VON AUTOFOCUS QUEST 11 Component Name String SubComponents Channels Port Channel 1 Name String Name String OutChannels SrcPort Direction Direction Type Type 0 InChannel Type Type 1 1 DestPort SSD Metamodel Automaton Name String State Input Output Expression Term Name String SuperState Pattern Term Predicate Term IsInitial boolean SubStates TransitionSegments 0 InterfacePoints TransitionSegment InterfacePoint jd 1 Name String InSegments DestPoint W al Name String IsOuter boolean Direction Direction OutSegments SrcPoint PostConditions PreCondition Condition 2598 Variable LocVariable Expression Term Value Term STD Metamodel Abbildung 2 4 Integriertes Metamodell f r Strukturdiagramme und Zustands bergangsdiagramme 12 KAPITEL 2 BERBLICK 2 3 Motivation Komplexe Transformationen an QUEST Modellen In diesem Abschnitt wollen wir die Motivation f r komplexe Transformationen an Produktmodel len und f r die Entwicklung von ODL besprec
17. reno GropvapounqindupGronpyes prox Amys ouv indu kond dA 12130402195 qundurGonQod Tomsoduro aorv spurgindurGaonQod Pron amp rojovaourequnduTronpod rosros pron roov qpouvqpndu Dental LPA Nsa AroyoegjourgindupArandadk ionpoaquas poonpomumas proa Gore qpouvqondu Kond nugnas paungindugs ang aunginduy Copan J ounqndu amp 4on apur oognas indu paonponuy Det HESE 107 3D242 ojongsounq ndupaongjodi Package quest odl evaluat QueryInputPanelFactory Hierarchie Abbildung A 14 139 KLASSENDIAGRAMME ANHANG A nea ueonpougjoueqindu YOO pioa o0 oupg taquia ploasjaquyndupas up2jooq mdu amp fi42a4 pioa mdujava 24 walqg indupas Toup qmdu ono joubqmdupos T 4 8 ploa sjaungimdup
18. true werden auf die Variablen ch p1 und p2 aus dem Produkttyp var in der Restriktionsbedingung sowohl Restriktionen angewandt die Abh ngigkeiten zwischen den Variablen beschreiben als auch Restriktionen die sich nur auf eine bestimmte Variable beziehen und von anderen Varia blen unabh ngig sind Letztere k nnen in die Produkttyp Definition verschoben werden exists connection var ch ch Channel ch Name 51051 1 pl Port pl Name Slot1 2 p2 Port et Name Slot Jy var ch SourcePort var pl and var ch DestinationPort var p2 true Damit sinkt die Anzahl der Produkttyp Instanzen ber die iteriert wird und auf die die verblie bene Restriktionsbedingung var ch SourcePort var pl and var ch DestinationPort var p2 angewandt wird In dem obigen Beispiel verbessert sich die Auswertungszeit von 36 auf 0 1 Sekunden was zwei Gr enordnungen entspricht Verwendung einwertiger Relationen statt mehrwertiger Relationen F r viele Relationen zwischen Metamodell Entit ten gilt dass ein und dieselbe Beziehung durch zwei symmetrische Relationen ausgedr ckt wird Zum Beispiel speichert eine Kompo nente in einer mehrwertigen Assoziation SubComponents all ihre Unterkomponenten und gleichzeitig speichert jede Unterkomponente in der einwertigen Assoziation SuperCompo nent eine Referenz auf ihre Oberkomponente Es gilt also forall comp Component forall subComp Component
19. In MetaBool liefert sie beispielsweise einen Iterator ber die Kollektion false true F r die Implementierung der instances Methode bei den Typen MetaProduct Type MetaRestrictedType und MetaSetType wurden Hilfsklassen im Package quest util collections erstellt die wir hier kurz beschreiben Resettablelterator Interface das zus tzlich zu den Methoden des Interfaces java util Iterator die Methode reset definiert die den Iterator auf den Beginn der iterierten Kollektion zu r cksetzt CachedIterator Implementierung von Resettablelterator Ein CachedIterator kapselt einen Iterator ber die Zielkollektion und leitet die Aufrufe der Methoden next und hasNext anfangs an diesen Iterator weiter Gleichzeitig speichert er alle zur ckgegebenen Werte in einer internen Liste Wird der CachedIterator mit einem reset Aufruf auf den An fang der Kollektion zur ckgesetzt so greift er auf die Cache Liste zu um bereits ausgele sene Werte wieder zur ckliefern zu k nnen Ein wesentlicher Vorteil dieser Klasse ist dass sie nur beim ersten Durchlauf durch die Kol lektion auf den Kollektionsiterator zugreifen muss der unter Umst nden wesentlich lang samer als ein einfacher Listeniterator sein kann Bei den nachfolgenden Durchl ufen durch die Kollektion kann der Zugriff auf ihre Elemente wesentlich schneller erfolgen weil sie nun lediglich aus der Cache Liste geholt werden m ssen Compositelterator Iteriert ber das karte
20. L sst alle Eingaben zu die ungleich null sind Wird f r die Eingabe von St ring Werten verwendet BoollnputVerifier berpr ft ob die Eingabe ein g ltiger boolescher Wert ist d h ob der String der von der Methode toString der Objekts geliefert wird welches die Eingabe repr sentiert gleich t rue oder false ist Wird in Eingabepanels f r Boolean Werte eingesetzt IntegerInputVerifier Stellt sicher dass die Eingabe eine g ltige ganze Zahl ist daf r muss der von der Me thode toString gelieferte String zu einer ganzen Zahl konvertierbar sein Wird in Eingabepanels f r Int Werte eingesetzt CompositePanellInputVerifier berpr ft f r einen zusammengesetzten Typ ob die eingegebenen Werte f r alle Elemente des Typs korrekt sind dies ist der Fall wenn alle InputVerifier der Elemente des Typs ihre jeweiligen Elementwerte akzeptieren Wird in Eingabepanels f r zusammengesetzte Typen verwendet Das Eingabepanel muss eine Instanz von CompositeQueryInputPanel sein RestrictedTypelInputVerifier Kontrolliert f r einen eingeschr nkten Typ dass der eingegebenen Wert die Restriktions bedingung des eingeschr nkten Typs erf llen Kann in allen Eingabepanels verwendet werden weil der eingeschr nkte Typ zur Ein gabe auf das Eingabepanel seines Basistyps zur ckgreift CombinedInputVerifier Kombiniert zwei InputVerifier Instanzen und akzeptiert eine Eingabe genau dann wenn beide
21. SQL Metamodell Entity Relationship Modell Produkt Modell Datenbankauspr gung Sowohl SQL als auch ODL sind Query Sprachen mit denen man keine Programme schreiben kann deren Abfragen aber immer terminieren da sie auf endlichen Universen operieren und keine Schleifen zulassen die potenziell endlos sein K nnten insbesondere keine WHILE Schleifen ODL ist nicht an ein konkretes Metamodell gebunden sondern kann mit jedem Metamodell verwendet wer den dass der oben dargelegten Formalisierung gen gt hnlich dazu ist SQL nicht an ein konkretes Datenbankschema gebunden sondern wird mit verschiedenen Schemata eingesetzt die f r SQL die Rolle des Metamodells einer Datenbank spielt 16 KAPITEL 3 GRUNDLAGEN VON ODL Als N chstes wollen wir auf den grundlegenden Aufbau von ODL eingehen Der ODL Sprach umfang l sst sich in drei Teilmengen unterteilen Consistency Constraint Language CCL Mithilfe der Consistency Constraint Language kann man hnlich zu OCL Konsistenzbedin gungen f r ein Modell definieren und auswerten ohne dass durch die Auswertung das Modell ver ndert werden kann CCL ist im Wesentlichen eine Notation f r die Pr dikatenlogik erster Stufe auf einem Me tamodell Nehmen wir als Beispiel die Konsistenzbedingung dass in QUEST Modellen jede Komponente entweder Unterkomponenten oder einen Automaten besitzen muss der ihr Ver halten beschreibt Die pr dikatenlogische Notation ist Vc Component
22. is SubComponents comp subComp equiv subComp SuperComponent comp Ausgehend von dieser Feststellung sollte man in den F llen wo eine Beziehung zwischen En tit ten mithilfe von verschiedenen Relationen ausgedr ckt werden kann von denen mindestens eine einwertig ist stets die einwertige Relation verwenden Betrachten wir die Abfrage exists var cl Component c2 Component c3 Component p Port neg var cl var c2 and neg var cl var c3 and neg var c2 var c3 and 94 KAPITEL 5 IMPLEMENTIERUNG is Ports var cl var p or is Ports var c2 var p or 3 Hier wird f r den Port p festgestellt ob er zu einer der paarweise verschiedenen Komponenten C1 c2 oder c3 geh rt indem die mehrwertige Relation Ports zwischen Komponenten und Ports benutzt wird Die mehrwertige Relation Ports zwischen Komponenten und Ports kann durch die einwertige Relation Component zwischen Ports und Komponenten ersetzt werden exists var cl Component c2 Component c3 Component p Port neg var cl var c2 and neg var cl var c3 and neg var c2 var c3 and var p Component var cl or var p Component var c2 or var p Component var c3 In diesem Beispiel sinkt die Auswertungszeit von 38 auf 32 Sekunden Der Beschleunigungsef fekt wird dadurch erreicht dass bei der berpr fung des Bestehens einer einwertigen Relation lediglich ein Vergleich ausgef hrt werden muss w hrend bei de
23. 4 2 INTERAKTIVE BENUTZERSCHNITTSTELLE 27 Quantor gebundene Variable s auch Sch01 S 5 Das Query System ist so konzipiert dass prin zipiell jeder Weg f r die Eingabe implementiert werden kann In der vorliegenden Implementie rung werden alle Benutzereingaben in Dialogfenstern durchgef hrt Es ist jedoch genauso m glich dass beispielsweise Modellelemente nicht aus einer Liste im Dialogfenster sondern im QUEST Projektbrowser oder in einem graphischen Editor ausgew hlt werden Die folgenden Unterabschnitte stellen ein Benutzerhandbuch f r die Eingabe von Variablenwerten w hrend einer ODL Abfrage dar Sie beschreiben die Bedienung von Eingabedialogen sowie allge meine Konfiguration des Query Systems 4 2 1 Eingabedialoge Alle Benutzereingaben finden innerhalb eines Eingabedialogs statt Betrachten wir als Beispiel den Eingabedialog der bei der Auswertung der ODL Abfrage context str String str abc angezeigt wird Abb 4 1 Der Eingabedialog besteht aus drei Teilen 1 Eingabepanel In dem Eingabebereich gibt der Benutzer den Variablenwert ein Der eingesetzte Eingabebereich h ngt vom Typ der abgefragten Variablen und von den Einstellungen f r Eingabedialoge ab auf die wir im Abschnitt 4 2 7 n her eingehen werden 2 Navigationsleiste Die Navigationsleiste stellt Navigationsbuttons zur Verf gung mit deren Hilfe der Benutzer zwi schen den Eingabedialogen f r verschiedene Variablen navigieren kann Folgend
24. Ausgangsport as as as as as as as annel Channel Name inChannel channel SourcePort Name and Type inChannel channel Type and SourcePort inChannel chPorts out and DestinationPort inChannel inPort and OutChannels chPorts out inChannel and InChannel inPort inChannel and Channels mainComponent inChannel and t in der Zwischekomponent rstellen 42 KAPITEL 4 ERWEITERUNG VON ODL new outPort Port result has Name outPort channel Name and result has Type outPort channel Type and result has Direction outPort chPorts out Direction and result has Ports midComp outPort and Kanal zwischen dem neuen Ausgangsport und dem Eingangsport des gel schten Kanals erstellen new outChannel Channel result has Name outChannel channel DestinationPort Name and result has Type outChannel channel Type and result has SourcePort outChannel outPort and result has DestinationPort outChannel chPorts in and result has OutChannels outPort outChannel and result has InChannel chPorts in outChannel and result has Channels mainComponent outChannel AbschlieBend wollen wir noch einige Beispiele vorstellen die mit der Verwendung des Fixpunkt operators m glich werden der kurz nach der Fertigstellung des Implementierungsteils der vorliegen den Arbeit von einem anderen Entwickler realisiert wurde e
25. DefaultIntegerQueryInputPanelFactory DefaultStringQueryInputPanelFactory DefaultIntroducedTypeQueryInputPanelFactory DefaultProductTypeQueryInputPanelFactory DefaultRestrictedTypeQueryInputPanelFactory DefaultSetTypeQueryInputPanelFactory CompositeTypeQueryInputPanelsFactory Interface DefaultCompositeTypeQueryInputPanelsFactory QueryFactoryManager Die aufgez hlten Fabrikklassen werden von Query Klassen Abschnitt 5 2 2 benutzt um ein Eingabepanel f r den abgefragten Datentyp zu erstellen und zu konfigurieren sodass die Be nutzereingabe korrekt durchgef hrt werden kann e ValuesDisplayComponent Produzenten Fabriken aus dieser Gruppe stellen Werteanzeige Komponenten die von der Klasse Default ValuesDisplay zur Anzeige von Variablenwerten benutzt werden Die Klassen sind ValuesDisplayComponentProducer Interface TextAreaValuesDisplayComponentProducer TableValuesDisplayComponentProducer ValuesDisplayComponentProducerManager Die Manager Klasse ValuesDisplayComponentProducerManager speichert f r je den ODL Datentyp au er dem eingeschr nkten Typ die Einstellung welche Werteanzeige Komponente in Eingabedialogen f r den jeweligen Datentyp verwendet werden soll Wenn wir zum Beispiel festlegen wollen dass bei der Eingabe von Entit ten eine Tabelle zur An zeige von bereits bekannten Variablenwerten benutzt werden soll m ssen wir folgenden Code verwenden
26. Ss nnusp letoossyut PIKO P NU paer oss Ut pro 0po os 2d 1 orsoduro ura 1159 Luonv ososto 2 522 Pioa oouspeambgasen 6 ploa uowsaudx quod Stgaseo pro uorssardxgpenbg oseo proA uorssedxgoneungyrry amp reurgsso201dg proa uorssaid xquoneo rd n n qose2 pioa uorssaadxquonsengngaseo proA uorsse1dxquonippy osva4 PIoA uoIssaldxgazigpgasen proxisoLiesAidurgoseo4 pIoA uonounfsiqosto PloaqueysuoQui ptox uon unfuo2 se proA uno iue suo oo gur 1912407 3utnso Luno J puoddvg puodde 191120073 ut So Luuo L puodde 8 Luno EIERE 1 1urxeorgourTise epua 10 ngSumg ynsor WEHLONAT ANIT PPUP EEA 1 1 PIOA WIO IS
27. ValuesDisplayComponentProducerManager getInstance setEntityValuesDisplayComponentProducer new TableValuesDisplayComponentProducer Mit der Methode getEntityValuesDisplayComponentProducer kann die einge stellte Fabrik Klasse von der Query Klasse f r Entit ten ausgelesen und zur Erstellung einer Werteanzeige Komponente genutzt werden Das Klassendiagramm f r Producer Klassen findet sich auf der Abbildung A 15 im Anhang A Ein Klassendiagramm der QueryInputPanel Fabrikklassen wird auf der Abbildung A 14 gezeigt Die 80 KAPITEL 5 IMPLEMENTIERUNG Abbildung A 16 zeigt Klassendiagramme f r die anderen Klassen aus dem Package quest odl evaluation model query factory 5 2 2 Query Klassen Die Klassen im Package quest odl evaluation model query bilden die Schnittstelle zwi schen dem ODL Auswertungssystem und dem ODL Query Subsystem Eine schematische Darstel lung dieser Beziehung ist auf der Abbildung 5 16 gegeben Rechtecke mit Auslassungspunkten anstatt der Namen sind eingef gt um zu zeigen dass nicht alle Systemkomponenten aufgef hrt werden ODL User Query Subsystem Execute Query query Se asses Manager Query Policies Use Use Context Query Query Quantifier Dialogs Input Panels Abbildung 5 16 Schnittstelle zwischen dem ODL Auswertungssystem und dem ODL Query Subsys tem Die Klasse QueryManager bildet
28. e einer Menge Ausgehend von der Syntax size setExpression wird die Produktionsregel f r den Ausdruck sowie die Deklaration des Tokens size in die ODL Grammatik eingef gt Tokens size size Productions arithmetic_term Fr here Ableitungen von arithmetic_term set size size l par expression r par Als N chstes wird eine Auswertungsklasse f r den neuen Ausdruck erstellt die das Interface quest odl evaluation model Expression implementiert und in der evaluate Methode die geforderte Auswertung durchf hrt public class SetSizeExpression implements Expression Ausdruck der auf der Basis der bergebenen Variablenbelegungen die Menge berechnet Expression setExpression public SetSizeExpression Expression setExpression throws IllegalArgumentException this setExpression setExpression 5 3 VORBEREITUNG WEITERGEHENDER NDERUNGEN 87 Die Menge aus den bergebenen Variablenbelegungen berechnen und ihre Gr e zur ckgeben public Object evaluate Assignment freeVariables SetValue set SetValue setExpression evaluate freeVariables return new Integer set getSize Methode aus dem Interface EvalTreeNode public void apply EvalTreeVisitor visitor visitor caseSetSizeExpression this Die Methode apply wird im Interface quest odl evaluation model analysis EvalTreeNode definiert die zu
29. ft wie beispielsweise die Typkom patibilit t des linken und rechten Operanden einer Gleichheit u Die Auswertung eines ODL Auswertungsbaums wird veranlasst indem die evaluate Methode der Wurzel des Auswertungsbaums aufgerufen wird die rekursiv die evaluate Methoden f r alle Kinderknoten aufruft und aus den zur ckgelieferten Teilergebnissen das Auswertungsergebnis be rechnet Eine kurze schematische Darstellung der Struktur von Auswertungsbaum Knoten wird auf der Abbildung 5 3 und in Pasch auf S 23 gegeben Ausf hrliche Klassendiagramme befinden sich im Anhang auf Abbildungen und A A Term Expression evaluate Object TermResult Selector ___ selector String Abbildung 5 3 Grundbausteine eines ODL Auswertungsbaums Expression und Term Die Grundbausteine des Auswertungsbaums sind alle Klassen die eines der Interfaces Term und Expression implementieren Alle Auswertungsbaum Knoten au er den Datentypen erben von einem dieser Interfaces Der grunds tzliche Unterschied zwischen einem Term und einer Expression besteht in Folgendem Eine Expression dient zur Berechnung eines Ausdrucks und liefert als Ergebnis einen einzelnen Wert beliebigen Typs Ein Term gibt als Ergebnis eine Instanz von TermResult zur ck die stets einen booleschen Wert als Ergebnis der Termauswertung und eventuelle weitere Daten enth lt wie die erf
30. setCancelButtonVisible void isCancelButtonVisible boolean setNextButtonVisible void isNextButtonVisible boolean setFinishButtonVisible void isFinishButtonVisible boolean attemptCancel void registerAsListenerAtButtons void interface NavigationBarListener previousButtonPressed void nextButtonPressed void finishButtonPressed void cancelButtonPressed void NavigationBarEvent NavigationBarEvent toString String NavigationButtonsMask separateFinishButton boolean nextlsFinishButton boolean previousButtonEnabled boolean cancelButtonEnabled boolean nextButtonEnabled boolean finishButtonEnabled boolean setNavigationButtonsEnabled void Abbildung A 13 Package quest dialogs navigationBar NavigationBar und benutzte Klassen KLASSENDIAGRAMME ANHANG A ronpad paioinsaynmejaq EIERE ES Tund ERUN Tounqmdupiaangjods jos Bopp anb L IREN ops pusqindu Aran XIX ouv indu ranged peonponum nejaqa iopsqpusqmdupusnD joe pouequndu Lionpoxginejaq EIERE Alopwgtaueginduyd sang Cusp
31. 2 Gliederung oe uu EIE A rn ERIS 13 berblick 2 1 Modellierungs und Validierungsframework AutoFocus QUEST 2 2 Metamodell von AutoFocus QUEST 2 3 Motivation Komplexe Transformationen an QUEST Modellen Grundlagen von ODL 3 Konzeption s x e bn es ive mue exa e elk 3 2 Erste Implementierung des ODL Interpreters Erweiterung von ODL 4 Erweiterung des Sprachumfangs 4 2 Interaktive Benutzerschnittstelle 424 BEimgabedialoge 2 204 ee MUS MU RS 4 2 Eingabeun rer Werte 2 oanp spa Q up e akana W yle w Qusa 4 2 3 Eingabe von Produktwerten 4 2 4 Eingabe von eingeschr nkten Typen 4 2 5 Eingabe von 4 2 6 Eingabe von eingef hrten Typen 427 Konfiguration der Eingabeschnittstelle 4 3 Beispiele von ODL Abfragen 2 22 nh Implementierung 5 1 Erweiterung des Sprachumfangs 5 1 1 nderung der ODL Grammatik 5 1 2 Implementierung erweiterter und neuer Sprachkonstrukte 5 1 3 Weitere Implementierungsaspekte 5 2 Interaktive Benutzerschnittstelle 3 2 1 GUI Klassen inuctor tk Pe EUR Tig
32. 3 Beispiele von ODL Abfragen Am Schluss dieses Kapitels m chten wir noch einige praktische Beispiele f r ODL Abfragen geben exists c Component is Name c compl Alle Komponenten mit dem Namen comp1 finden exists cl Component exists c2 Component is Name cl compl and is SubComponents cl c2 Alle Unterkomponenten der Komponente comp1 finden exists comps cl Component c2 Component is Name comps cl compl and is SubComponents comps cl comps c2 Umformulierung der vorherigen Abfrage mit Verwendung eines Produkttyps sie wird dadurch schneller ausgewertet wird context comps c cl Component c2 Component is SubComponents c cl c c2 true Eine Komponente und eine ihrer Unterkomponenten ausw hlen exists ports pl Port p2 Port neg ports pl ports p2 and ports pl Name ports p2 Name Alle Portpaare verschiedener Ports mit gleichem Namen finden exists port Port port Type Text Int Alle Ports mit dem Datentyp Int finden exists ports pl Port p2 Port neg ports pl ports p2 and ports pl Type Text ports p2 Type Text Alle Portpaare verschiedener Ports mit gleichem Datentyp finden context cl Component context name String new c2 Component result has Name c2 name and result has SubComponents cl c2 Eine Komponente und den Namen f r eine neue Unterkomponente eingeben es wird eine neue Komponente erstellt die den eingegebenen Namen
33. 3 Dynamische Informationen in context Abfragedialogen In context Abfragen kann in der aktuellen Version ein fest vorgegebener Hinweistext angezeigt werden Eine Verbesserungsm glichkeit w rde die Anzeige dynamischer Informationen darstellen die von den aktuellen Variablenbelegungen abh ngen beispielsweise w rde im Eingabedialog f r die Abfrage context Hint Hinweistext Info Anzahl der ausgew hlten Ports size portSet portSet set Port true neben dem statischen Hinweistext auch die Gr e der Portmenge angezeigt die sich w hrend der Eingabe dynamisch ndern kann 6 1 ERWEITERUNGEN DES SPRACHUMFANGS 99 6 1 4 Arithmetische Division Bei der Auswertung von ODL Abfragen ist es von essentieller Bedeutung dass alle ODL Terme ein definiertes Ergebnis zur ckgeben Insbesondere d rfen auch die arithmetischen Ausdr cke nur totale Operationen verwenden Genau aus diesem Grund unterst tzt ODL zurzeit nur die arithmetischen Operationen Addition Subtraktion und Multiplikation Da die Division auf reellen Zahlen nur partiell definiert ist wurde sie bis jetzt nicht in den ODL Sprachumfang aufgenommen Damit die Division in ODL verwendet werden kann muss sie totalisiert werden Hierf r muss der Fall der Division durch Null gesondert behandelt werden ein ODL Ausdr ck soll auch dann ausgewertet werden k nnen wenn im Laufe der Auswertung eine Division durch Null auftritt Um die Division zu totalisieren erweitern wir ih
34. Abfrage 6 5 exists tuple p x1 x1 Typel P x1 x2 Type2 1 p x2 fe true 6 6 Wir sehen also dass sich Techniken zur logischen Optimierung von SQL Abfragen auf die Optimie rung von ODL Abfragen bertragen lassen Weitere Informationen zur logischen Optimierung bei der Auswertung von SQL Abfragen finden sich in Kemper S 206 214 Betrachten wir nun ein konkretes Beispiel exists var v pl Port p2 Port ch Channel v pl Name Slotl or v pl Name S1ot2 1 and v p2 Name Slot Cond2 and 6 7 v ch SourcePort v pl and v ch DestinationPort v p2 Cond3 true Im Restriktionsterm sind alle Bedingungen mit dem logischen AND verkn pft sodass wir den Restrik tionsterm aufbrechen und Teilbedingungen auf einzelne Elemente des Basistyps anwenden d rfen Durch diese Umformulierung ergibt sich eine quivalente aber viel schnellere ODL Abfrage exists var v pl pl Port pl Name 51051 or pl Name 51052 Condl p2 p2 Port p2 Name Slot Cond2 6 8 ch Channel v ch SourcePort v pl and v ch DestinationPort v p2 Cond3 true 6 2 OPTIMIERUNG DER ABFRAGEAUSWERTUNG 107 Die Bedingungen Cond1 und Cond2 werden hier nur auf die Typelemente angewandt die zur Aus wertung ben tigt werden nur die Bedingung Cond3 die alle Typelemente referenziert verblieb im Restriktionsterm des u eren eingeschr nkten Typs
35. Algorithmus sind die folgenden e Ist die von einem verschiebbaren Quantor g gebundene Variable von keiner anderen Variablen abh ngig so befindet sich dieser Quantor unmittlerbar hinter seiner Verschiebungsgrenze Da bei d rfen sich zwischen q und seiner Verschiebungsgrenze weitere verschiebbare Quantoren befinden falls sie sich bereits in der urspr nglichen ODL Abfrage vor q befanden e Ist die von einem context Quantor 41 gebundene Variable von anderen Variablen abh ngig so befindet sich der context Quantor an derselben Stelle wie in der urspr nglichen ODL Abfrage e Die Reihenfolge von verschiebbaren Quantoren die im Laufe des Algorithmus verschoben wur den bleibt in Bezug aufeinander beibehalten 6 2 OPTIMIERUNG DER ABFRAGEAUSWERTUNG 103 Im Zuge der weiteren Entwicklung des ODL Interpreters Kann die Positionierung von verschieb baren Quantoren innerhalb einer ODL Abfrage so verfeinert werden dass folgende Nachbedingungen f r jeden verschiebbaren Quantor nach der Umformung der ODL Abfrage gelten e Die erste Nachbedingung stimmt mit der oben angegebenen ersten Nachbedingung des aktu ellen Algorithmus berein ein verschiebbarer Quantor dessen Variable von keiner anderen Variablen abh ngt befindet sich direkt hinter seiner Verschiebungsgrenze wobei sich weitere verschiebbare Quantoren zwischen ihm und seiner Verschiebungsgrenze befinden d rfen e Ist die von einem context Quantor 41 gebundene Variable von anderen
36. An dieser Stelle wird die Kontrolle an das Query Subsystem bergeben Die query Methode des QueryManager s benutzt die Query Klasse die als Strategie f r Benutzereingaben f r den abgefragten Datentyp eingestellt ist indem sie ihre quer y Methode aufruft Diese f hrt die Benutzereingabe aus und gibt das Eingabeergebnis zur ck Die Abbildung 5 17 zeigt den Ablauf einer Benutzereingabe f r einen booleschen Wert das Sequenzdiagramm wurde aus Gr nden der bersichtlichkeit um wenige Methodenaufrufe gek rzt die f r das Verst ndnis des Ab laufs keine wesentliche Rolle spielen Den Quellcode der query Methode der daf r vom QueryManager benutzten Query Klasse DefaultBoolQuery wollen wir im Folgenden kommentiert angeben public Boolean bQuery String variableName Assignment freeVariables Collection names Collection values boolean enableBackwardStep String hintText Instanz des Eingabedialogs holen der f r boolesche Werte benutzt werden soll QueryDialog queryDial getBoolQueryDialog log QueryDialogManager getInstance Eingabepanel Fabrik f r den booleschen Datentyp vom Eingabepanel Manager holen te BoolQueryInputPanelFactory inputPanelFactory QueryFactoryManager getInstance getBoolQueryInputPanelFactory Eingabepanel QueryInputPanel von der Eingabepanel Fabrik erzeugen lassen queryInputPanel inputPanelFactory createBoolQueryInputPanel variableN
37. Auswertungsklasse SetSizeExpression erstellen TypedExpression sizeExpression new TypedSetSizeExpression node getSize typedExpression setOut node sizeExpression Bei TypedSetSizeExpression handelt es sich um eine interne Klasse von SableCCGe nerator die zus tzlich zu den Informationen f r den Aufbau einer Set SizeExpression weitere Information enth lt die vom SableCCGenerator zur Kompilation einer ODL Ab frage ben tigt werden ihre Instanz wird im sp teren Verlauf der Kompilation der ODL Abfrage durch eine Instanz von Set SizeExpression ersetzt Nach der Durchf hrung aller oben beschriebenen Schritte ist die Einf hrung des neuen ODL Ausdrucks abgeschlossen er kann nun in ODL Abfragen verwendet werden Einf hrung eines neuen ODL Datentyps am Beispiel von MetaProductType Die ersten drei Schritte f r die Einf hrung eines neuen ODL Datentyps sind dieselben wie f r einen neuen ODL Ausdruck Einf gen der Produktionsregeln in die ODL Grammatik Er stellung einer entsprechenden ODL Auswertungsklasse die diesmal das Interface Met aType implementiert Anpassung von EvalTreeVisitor und seiner Unterklassen Erg nzung von SableCCGenerator um Methoden f r die Verarbeitung des neuen Typs Der n chste Schritt der bei einem neuen Datentyp hinzukommt ist die Implementierung der Benutzereingabe f r diesen Datentyp Ein Datentyp wendet sich an das ODL Query Subsys tem indem aus seiner query Method
38. Basistyp Elemente ver ndert werden sodass f r den Zugriff sowohl im Restriktions term als auch in Termen au erhalb des eingeschr nkten Typs das sind Terme welche die Variable benutzen deren Typ optimiert wurde angepasste Selektoren benutzt werden m ssten Ferner fiele auch die Darstellung der erf llenden Belegungen f r die Variable deren Typ optimiert wurde anders aus als der Benutzer sie gem der urspr nglichen Typdeklaration erwarten w rde Eine M glichkeit diesen Problemen aus dem Weg zu gehen besteht darin dass die Umformu lierung eines eingeschr nkten Type innerhalb der ODL Auswertungsklasse MetaRestricted Type gekapselt wird die den eingeschr nkten Typ darstellt s auch Abschnitt 5 1 2 Der optimier te eingeschr nkte Typ verhielte sich nach au en wie seine nicht optimierte Version insbesonde re k nnte auf die Basistyp Elemente mit denselben Selektoren wie bei der Ausgangsformulierung des Typs zugegriffen werden f r die Iteration ber die Typinstanzen w rde aber intern die opti mierte Formulierung verwendet Weiter k nnte die gekapselte optimierte Formulierung zur berpr 6 2 OPTIMIERUNG DER ABFRAGEAUSWERTUNG 111 fung eingesetzt werden ob ein Tupel bei dem einige der Elementwerte nicht festgelegt sind die Restriktionsbedingung verletzt die optimierte Version des obigen Beispieltyps k nnte f r ein Tupel x1 Wert1 x2 Wert2 x3 Wert3 feststellen ob es die Restriktionsbedingung verletzt da j
39. Eingabepanels f r diesen Datentyp herstellt Daf r sind die Me thoden get ODLType QueryInputPanelProducer und set ODLType QueryIn putPanelProducer zust ndig wobei _ODLType__ f r jedes der W rter Bool Integer String Entity IntroducedType ProductType und Set Type stehen kann Stellt der Benutzer im QueryConfigurationDialog beispielsweise f r den ODL Datentyp Boolean Liste als Eingabepanel ein so wird im QueryInputPanelPro ducerManager der ListQueryInputPanelProducer f r diesen Typ eingestellt Dies geschieht mit den Aufruf QueryInputPanelProducerManager getInstance setBoolQueryInputPanelProducer new BooleanTextFieldQueryInputPanelProducer 5 2 INTERAKTIVE BENUTZERSCHNITTSTELLE 77 Mit der Methode QueryInputPanelProducer getQueryInputPanelProducer MetaType type wird f r einen beliebigen Datentyp zun chst festgestellt um welchen ODL Datentyp es sich handelt und anschlie end der entsprechende QueryInputPanel Producer zur ckgegeben daf r benutzt QueryInputPanelProducerManager eine interne Unterklasse von EvalTreeVisitorAdapter InputVerifier Implementierungen Diese Gruppe enth lt Unterklassen von javax swing InputVerifier Sie werden von QueryInputPanel Fabriken zur Konfiguration von Eingabepanels verwendet ein Input Verifier berpr ft ob der in einem Eingabepanel eingegebene Werte f r den abgefragten ODL Datentyps zul ssig ist Die Klassen sind NotNullInputVerifier
40. GRAMMATIK 143 factor arithmetic_term quantor_proposition named_predicate_call named_predicate_ident variable_definition type product_type type_list basic_type restricted_type set_type introduced_type arithmetic_expression factor arithmetic_expression factor arithmetic term factor arithmetic term int constant arithmetic expression size expression forall variable definition proposition exists variable definition proposition context variable definition proposition new variable definition proposition named predicate ident arguments ident variable type product type restricted type set element introduced_type basic_type type list ident type type list ident type type ident ident type proposition set type expression Eine CCL Proposition entspricht einer ODL Proposition mit der Einschr nkung dass die Quanto ren context und new sowie die Schl sselw rter result und result not nicht verwendet werden d rfen Anhang ODL Grammatik in der SableCC Notation In diesem Anhang befindet sich die SableCC Grammatik f r den ODL Parser der durch das SableCC Tool aus der Grammatik automatisch erzeugt und von der SableCCGenerator Klasse bei der bersetzung von ODL Abfragen verwendet wird Package quest odl parser Grammar of CCL Extension ODL Q 1 2001 09 28 aut
41. Implication Expression ExistentialQuantifier EvaluationModelException Equivalence EqualExpression Entity Emptylterator Disjunction ContextQuantifier Constant Conjunction BoolConstantTerm Binding AttributeRelation MetaBool Assignment AssociationRelation Abbildung A 1 Package quest odl evaluation KLASSENDIAGRAMME ANHANG A 126 uondooxquorne espeurjopu uondooxquone oxpourpopur uondooxq1oseq 9015 1019 95 99 uondooxgesvs 10129 oSpi eA u 4 311 10199 95 NOW UHIS HOVSSHIA AOAAH IOPIPISPITBAUL 5 uondooxgodA puvsodQpryeauy uondooxqo qeue 1 SUNSAOVSSAN SO FUNSHOVSSIN MOT Uond xg qene A uond ox onnsuoop ltioddnsur uond x T mnsuo p roddnsurn uondooxgoreorparqpoure uondoox7q93e rpaqpoureNppouropur eV suondaoxq Alnsiquiy Dodra quy uondeoxquroxo T4 T 1lut soq198 8 tuondaoxqioye10uan jur sod A A A A yur ou uopio 7959848 283 108191
42. InputVerifier diese Eingabe akzeptieren Wird bei der Eingabe von eingeschr nkten Typen verwendet hierbei wird der In putVerifier des Basistyps mit dem Input Verifier f r die Restriktionsbedingung kombiniert weil der Wert eines eingeschr nkten Typs genau dann korrekt ist wenn er ein zul ssiger Wert des Basistyps ist der zus tzlich die Restriktionsbedingung erf llt e SetValueDisplay Fabriken Fabrikklassen aus dieser Gruppe sind f r die Herstellung von Mengenwert Anzeigen f r Men geneingabepanels zust ndig Folgende Klassen geh ren zu dieser Gruppe SetValueDisplayFactory Interface ListSetValueDisplayFactory TableSetValueDisplayFactory SetValueDisplayFactoryManager 78 KAPITEL 5 IMPLEMENTIERUNG Wie schon f r QueryInputPanelProducer Klassen gibt es f r jede konkrete Implemen tierung von SetValueDisplay eine entsprechende Fabrik Klasse so werden beispiels weise ListSetValueDisplay Instanzen von ListSetValueDisplayFactory her gestellt Die Manager Klasse SetValueDisplayFactoryManager speichert die Einstellung welche Komponente in Eingabepanels f r Mengenwerte zur Anzeige bereits in die Menge ein gef gter Werte benutzt werden soll Daf r wird die entsprechende Fabrikklasse an die Me thode setSetValueDisplayFactory SetValueDisplayFactory factory bergeben Diese Einstellung kann sp ter ber die Methode getSetValueDisplayFac tory ausgelesen werden und wird von der Fabrik
43. Modells im QUEST Werkzeug ein graphischer Editor implementiert wird wie er bereits in AutoFocus existiert In diesem Fall k nnen Auswahlmechanismen f r ODL Benutzereingaben auch auf den graphischen Editor erweitert werden bei der Eingabe eines Modell Elements k nnte der Benutzer das Modell Element direkt im graphischen Editor aus w hlen M glich ist auch die Kombination der aktuellen dialogbasierten Auswahlmechanischen mit graphischen Auswahlmechanismen sodass die Auswahl vom Modellelementen parallel im Eingabedialog und im graphischen Editor ablaufen k nnte Schlie lich ist auch die Darstellung von Ergebnissen einer ODL Abfrage in der QUEST Modellansicht denkbar indem Modellelemente die im Abfrageergebnis enthalten sind in der Modellansicht hervorgehoben werden Syntax Highlighting f r ODL Abfragen Um die Erstellung von Abfragen im ODL Editor zu erleichtern kann eine Syntaxhervorhebung eingef hrt werden wie sie in den meisten Entwicklungumgebungen f r Programmiersprachen blich ist Abschlie end kann gesagt werden das ODL auf dem aktuellen Entwicklungsstand ein flexibles und vielseitiges Werkzeug zur Validierung und Transformation von konzeptmodellbasierten Modellen dartellt das ein gro es Weiterentwicklungspotenzial bereith lt Anhang A Klassendiagramme In diesem Anhang werden Klassendiagramme des Pakets quest odl evaluation und ausge w hlte Klassendiagramme des Pakets quest dialogs aufgef hrt Folgen
44. Start outANamedPredicateDeclaration und caseANamedPredicateD claration zust ndig Eine NamedPredicate Instanz enth lt alle f r den Aufruf eines benamten Pr dikats notwendigen Angaben die Parameterliste des benamten Pr dikats und seinen Rumpf der durch einen ODL Term repr sentiert wird Diese Verarbeitungsweise hat den positiven Nebeneffekt dass benamte Pr dikate die im ODL Editor w hrend einer QUEST Sitzung deklariert wurden bis zum Ende dieser Sitzung verf gbar bleiben ohne erneut eingegeben werden zu m ssen Aufruf eines benamten Pr dikats Wir beschreiben nun die Implementierung des Aufrufs eines benamten Pr dikats Daf r wird die Klasse NamedPredicateTerm eingesetzt sie erf llt die Rolle eines Adapters s auch GammaEtAl S 171 185 der einer NamedP redicate Instanz die Schnittstelle eines Terms gibt Diese Trennung zwischen NamedPredicate und NamedPredica teTerm wird gemacht um die Auswertung eines benamten Pr dikats von der Berechnung seiner Parameter abzukoppeln die ja beliebige ODL Ausdr cke sein d rfen Die Auswer tung der Parameter wird von NamedPredicateTerm vorgenommen und die Ergebnisse werden als Parameterwerte an den NamedPredicate weitergegeben Im SableCCGenerator sind die Methoden outANamedPredicateUnaryPropo sition outANamedPredicateCclUnaryProposition und outANamedPre dicateCall f r die Erstellung des Aufrufs eines benamten Pr dikats zust ndig Die ers ten beiden dienen lediglich da
45. Sumo q0 u01 422npo441u2uoduio ugi lur 1 posi omasqy Tuuu og 1991 421000 1215 T1282102133 q3uuigo 4 2d 6T poI2HIS22002424 t llpuu0 J d Ionpo4g 217242 taupo EUO 19a qQ sauvusogads poonpoajupomo404 aanpunog Sunigo 0 JH 210242 dymu104 SUSO JIAJO AUVUUO 12 muu o 43 22140 4ojpuiao 84180 J22 q0 4210140 4 00 2102424 Ate 48415011290 421Dw0 42 72424 iqs nje A edsiqqsonge 18 ptoA 193npoidlu uoduio3Kuldsids nI8A dK istos prowzioonpoxqpuouoduro erdsiqsonge Tjonpoxqnos eedsiqsonge A dK Lpasnponupas Dier edsrqsanqeA Sungtos 5 1 dsiqqsengeA gnosa Jaan poigi uatiod wo Ke dsiqsanye npe 2441961984 asonpoxqnuouoduroo epdsic san eA Aejdsiqsane 441 1 8 129npoidhu uodtuoO Keldsic s n eA 1 nposdiu uodtuoeldstcIs nieA dK paonponupo 19 npoidyu uodttuoO amp e
46. TOIWAS OLVHdO UOISSIIdXJUOHIPPY 8 Surng Surng1oje1edQonourgre4 se1dx s quoneorpdnpnjg ums TOUNAS WOIssa1dxquUoy EIN 4282 u uoissa4dxqouaun 4yamno po Suiag Suugg40maad ouaunpnap4 uorsso1dxg uorsso4dxgpnus rspos4 uorssa1dx uorssoid xpo 98 2 4 1 suorssardxqonowupiry Areurg uorsso1dxg uorsso1dxgnoS 8 1 129 40 110155919 5971619 19 qO lenipAo uoj2o oS Aanugpoieroossy 1oj9 Ss nnuqp leioossy 1o qO olenIeA9 10129 o Sed L sodu 9 polqo aenyead DOE EES ADULT 10155914 9716195 IPSS Ap eposs y 1015325 10055 TOPPPSPMALINV OPSPSPAAL gt NSOAWO 4 SurnS 8urnSol 1o qO lenipA9 5 409 30835009 BEIUSIONER proA Apdde4 Suus 3urngoi joefqo erenpeA o4 qUe A IQ ELIPA 122 qQ 2 PIOA Apdde 10109 2 10109 25198 Adxg uorisso1dx qnos 4 SurnS urnSol 1Jo qO len e A9 11015 914 510193 2 3 3 1215 8 1150 10198195 umso 10139125 uoisso1dx 10 29 9S 1e ierarch H lon
47. Variablen abh ngig so befindet sich 4 an der fr hestm glichen Position hinter seiner Verschiebungsgrenze und allen Quantoren die Variablen binden von denen die von 1 gebundene Variable abh ngt Befand sich ein context Quantor q im urspr nglichen ODL Ausdruck hinter einem anderen context Quantor 42 so darf sich q in der umgeformten ODL Abfrage nur dann vor 42 be finden falls 42 hinter einem Quantor q steht von dessen Variablen die Variable von 42 abh ngig und die Variable von 41 unabh ngig ist q ist dabei kein 0ra11 Quantor Diese Bedingung gew hrleistet dass die urspr ngliche Reihenfolge der verschiebbaren Quan toren untereinander soweit wie m glich beibehalten wird Der wesentliche Unterschied zu dem jetzigen Algorithmus besteht also darin dass ein context Quantor 41 dessen Variable von anderen Variablen abh ngt nicht mehr zwingend an seiner Stellen bleiben muss sondern bis zu einer fr heren Position vorgezogen werden kann die sich hinter allen Quantoren befindet von deren Variablen die Variable von q abh ngt Der Algorithmus 1 nimmt die Umformung einer ODL Abfrage bez glich der Positionen ver schiebbarer Quantoren vor sodass die oben aufgez hlten Nachbedingungen nach der Ausf hrung des Algorithmus gelten Algorithmusidee Verschiebbare Quantoren k nnen nur zwischen zwei Verschiebungsgrenzen bewegt werden weil kein verschiebbarer Quantor ber eine Verschiebungsgrenze hinweg bewegt werden kann Die
48. Werteanzeige Producer f r Boolean Abfragen von der Manager Klasse holen ValuesDisplayComponentProducer valuesDisplayComponentProducer do p ValuesDisplayComponentProducerManager getInstance getBoolValuesDispl ayComponentProducer Werteanzeig rstel len si Werteanzeige Komponente konfigurieren und an den Eingabedialog bergeben queryDialog setValuesDisplay new DefaultValuesDisplay valuesDisplayCompone createValuesDisplayComponentInstance Variablennamen und lassen queryDialog displayVal else ntProducer wert ues names values in der Werteanzeige darstellen Falls keine Variablenwerte anzuzeigen sind dann keine Werteanzeig ben berg queryDialog setValuesDisplay Festlegen ob ein R ckw rtssc null hritt m glich ist Dies mit der vom Producer erzeugten ist der Fall wenn vor der aktuell einzugebenden Variablen bereits andere eingegeben wurden dann kann der Benutzer zur Eingabe der vorherigen Variablen zur ckkehren queryDialog setBackwardStepEnabled enableBackwardStep Den eventuell bergebenen Hinweistext im Eingabedialog anzeigen lassen queryDialog setHintText hintText Benutzereingabe starten Diese Methode wird erst dann beendet wenn der Benutzer die Eingabe abgeschlossen hat wird die Eingabe vom Benutzer abgebro
49. areas Query dialog with resizable areas Query dialog with resizable areas Use shared dialog instance vj Use shared dialog instance vj Use shared dialog instance OR Cancel Abbildung 4 14 Konfiguration der Eingabedialoge f r Boolean String und Int Das Konfigurationspanel f r die Eingabe von Entity Werten gleicht dem Konfigurationspanel f r IntroducedType und wird daher nicht gesondert besprochen Auf der Abbildung 4 15 werden die Konfigurationspanels f r die Eingabe von Datentypen IntroducedType und ProductType gezeigt Sie unterscheiden sich von den Konfigurations panels auf der Abbildung 4 14 nur in der angebotenen Auswahl der Eingabepanels F r Intro ducedType stehen als Eingabepanels eine Liste und Radiobuttons zur Verf gung F r die Eingabe von ProductType steht nur ein Eingabepanel zur Verf gung das f r einen einzugebenden Pro ductType Wert die Eingabepanels f r die einzelnen Produkttyp Elemente nebeneinander anzeigt 38 KAPITEL 4 ERWEITERUNG VON ODL s Abschnitt 4 2 3 und Abbildung 4 7 Das Konfigurationspanel f r die Eingabe von SetType Werten auf der Abbildung 4 16 zeigt einen zus tzlichen Konfigurationsbereich Variable value in dem festgelegt wird wie die in der einge gebenen Mengenvariable enthaltenen Basistyp Werte angezeigt werden sollen Daf r kann eine Liste oder eine Tabelle verwendet werden Wie bereits f r Product Type steht f r die Eingabe von Set Type Werten nur ein Eingabepanel z
50. auf Wertgleichheit exists b Boolean b true Ungleichheit von Entit ten bei gleichem Namen exists pl Port exists p2 Port is Name pl out and is Name p2 out and neg pl p2 e Relationstest Mit einem Term der Form is SomeRelation entity object kann getestet wer den ob die Relation SomeRelation zwischen der spezifizierten Entit ten und dem spezi fizierten Objekt besteht Dabei ist object eine andere Entit t wenn SomeRelation eine Assoziation ist oder ein Wert wenn SomeRelation ein Attribut 150 Betrachten wir Bei spiele f 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 ODL Implementierung Re lationen in der Form isSomeRelation entity object notiert wurden Im Laufe der Erweiterung des ODL Auswertungssystems wurde die Notation ver ndert sodass nun is und f r Relationsmodifikationen has selbst ndige Schl sselw rter sind die durch ein Leer zeichen vom Namen der Relation getrennt werden Folgende ODL Abfragen stellen Beispiele f r die fr her benutzte Notation und die aktuelle Notation dar Fr here Notation exists c Component isName c Centrale Aktuelle Notation exists c Component is Name
51. b ndel gel scht und anschlie end neue Kan le erstellt die Ports des Kanalb ndels mit den Ports der eingef gten Komponente verbinden Die Abbildung 2 5 zeigt wie das Ergebnis der Anwendung dieser Transformation aus QUEST in AutoFocus importiert aussehen k nnte channelt int channel2 float Q channel3 String newInputChannelt lnt newOutputChannel 1 Int newlnputChannel 2 Float A newOutputChannel 2 Float A newinputChannel 3 String newOutputChannel 3 String C2 CH Abbildung 2 5 Komplexe Transformation in QUEST Kanalb ndelauftrennung Diese beschriebene komplexe Transformation wurde als QUEST Modul in Java implementiert wobei nur die Metamodell Schnittstelle f r den Zugriff auf Modelle benutzt wurde Die Implemen tierungszeit Einarbeitung und Entwicklerhandbuch nicht mitgerechnet betrug circa einen Monat Damit sehen wir bereits ein Problem bei der Realisierung komplexer Transformationen durch dedi zierte Programmmodule die Realisierung eines neuen Programmmodul erfordert Java Programmier kenntnisse sowie Kenntnis der QUEST Metamodell Schnittstelle kann mehrere Wochen in Anspruch nehmen und wird nur f r die eine implementierte komplexe Transformation einsetzbar sein Dies war die Motivation f r die Erstellung einer Query Sprache die auf dem QUEST Metamodell operiert und die Beschreibung komplexer Transformationen erm glicht Eine solche Query Sprache bietet mehrere Vorteile e Schnelle Programmier
52. c Component isSubComponents c c2 V a Automaton isAutomaton c a Diese Konsistenzbedingung l sst sich direkt in eine CCL Abfrage bersetzen forall c Component exists c2 Component is SubComponents c c2 or exists a Automaton is Automaton c a Die CCL Grammatik kann vereinfacht wie folgt beschrieben werden Formel not lt Formel gt lt Formel gt Formel Formel n lt Formel gt and lt Formel gt lt Formel gt n lt Formel gt or lt Formel gt lt Formel gt lt Formel gt implies lt Formel gt lt Formel gt us lt Formel gt equiv lt Formel gt lt Formel gt us forall lt Variable gt lt Typ gt lt Formel gt lt Formel gt exists lt Variable gt lt Typ gt Formel Modellmodifikationen Um nderungen am Modell durchf hren zu k nnen ben tigen wir Sprachkonstrukte zum Er stellen von Modellelementen sowie zur Modifikation von Relationen zwischen Modellelemen ten Daf r werden drei Sprachkonstrukte eingef hrt Formel jm new Variable Typ Formel Formel result lt Formel gt lt Formel gt result not lt Formel gt Der new Quantor erstellt ein neues Modellelement ein result Term f gt eine Entit t in eine Relation hinzu oder setzt ein Attribut ein result not Term entfernt eine Entit t aus einer Relation Benutzerinteraktionen Zur Durchf hrung von Benutzereingaben wurde der context Quantor eingef hrt
53. c Centrale e Relationsmodifikationen Neben der M glichkeit zu berpr fen ob eine Relation zwischen zwei bzw einer Entit t und einem Wert besteht wurde die M glichkeit implementiert Relationen zu modifi zieren Hierbei muss zwischen der Erstellung einer Relation und dem L schen einer Relation unterschieden werden die entsprechenden ODL Terme lauten 20 KAPITEL 3 GRUNDLAGEN VON ODL result has SomeRelation entity object f r die Erstellung oder Ver nderung einer Relation result not has SomeRelation entity object f r das L schen einer Relation Die Ver nderung bzw das L schen einer Relation hat abh ngig von der Art der Relation fol gende Auswirkungen F r eine einwertige Assoziationen d h eine Assoziation zu h chstens einer anderen Enti t t wird die Entit t object zu der Entit t ent ity assoziiert bzw wird die Assoziation gel scht F r eine mehrwertige Assoziation wird die Entit t object in die Kollektion der zu entity assoziierten Entit ten eingetragen bzw aus dieser Kollektion entfernt Wenn SomeRelation ein Attribut ist so wird der Wert object als Attributwert f r SomeRelation gespeichert Das L schen eines Attributs hat keine Auswirkung der Attributwert bleibt unver ndert Zur Veranschaulichung wollen wir wir folgende Beispiele f r Relationsmodifikationen betrach ten Attributtest und Attributzuweisung exists p Port is Name p
54. der im Except ion Objekt enhaltenen Informationen ber das eingetretene Na vigationsereignis welche Aktionen auszuf hren sind Um den Navigationsmechanismus zu implementieren wurden die Klassen UserBreakEx ception Package quest odl evaluation und NavigationEventException Packa ge quest odl evaluation model query dialog erstellt sowie Modifikationen an den Klassen ContextQuantifier und AbstractQueryDialog vorgenommen Au erdem wurde der ODL Editor Klasse quest odl editor gui EditorDialog so angepasst dass eine im Laufe der ODL Abfrageauswertung aufgetretene UserBreakException abgefangen und die mit ihr bergebene Meldung in der Statuszeile des ODL Editors angezeigt wird Wir wollen die nderungen bei bestehenden Klassen und die Aufgaben der neuen Klassen erl u tern NavigationEventException Wird von einem Eingabedialog erzeugt wenn der Benutzer den Previous Button oder den Cancel Button bet tigt AbstractQueryDialog Wurde so erweitert dass beim Bet tigen des Previous Buttons und des Cancel Buttons eine Na vigationEventException erzeugt wird die die Information dar ber enth lt ob der Be nutzer einen R ckw rtsschritt ausf hren oder die Auswertung abbrechen will In beiden F llen wird der Eingabedialog geschlossen und die erzeugte Exception abgesetzt diese wird vom ContextQuantifier abgefangen UserBreakException Wird von einem ContextQuantifier abgesetzt wenn ereineNavigationEventEx
55. die Implementierung der oben aufgef hrten Klassengruppen im Detail e Eingabedialog Das Interface QueryDialog definiert die Methoden die alle Dialogfenster f r Benutzerein gaben im ODL Query Subsystem implementieren m ssen diese Methoden dienen zumeist der Konfiguration der drei Bereiche eines Eingabedialogs Abb 5 4 Die Methode user Input startet die Benutzereingabe und wird erst dann verlassen wenn der Benutzer die Eingabe been det durch Best tigung oder Abbruch Die abstrakte Klasse AbstractQueryDialog implementiert die meisten der in Query Dialog definierten Methoden und erweitert gleichzeitig die Klasse javax swing JDialog dadurch wird festgelegt dass ein Eingabedialog eine Unterklasse von JDialog ist und damit alle Funktionalit ten dieses Standarddialogs zur Verf gung stellt Um eine konkrete Klasse f r ein Dialogfenster zu implementieren gen gt es von AbstractQueryDialog zu erben und das gew nschte Aussehen des Dialogfensters im Konstruktor festzulegen Auf genau diese Weise wurden die beiden konkreten Implementierungen des Eingabedialogs er stellt DefaultQueryDialog ist ein einfacher Eingabedialog Abb 4 1 auf S 28 bei dem die Gr en der drei Bereiche von einer java awt GridBagLayout Instanz automatisch angepasst werden Die Klasse SplitPanelQueryDialog implementiert einen Eingabe dialog bei dem die Gr e der drei Bereiche mithilfe von Splittingpanels javax swing JSplitPane vom Benutzer ver ndert
56. ei ter ne leere Implementierung DepthFirstEvalTreeVi F r jede ODL Auswertungsklasse Foo werden die Methoden sitorAdapter inFoo und outFoo definiert die aus der Methode caseFoo aufgerufen werden Der ODL Auswertungsbaum wird in der DepthFirst Reihenfolge traversiert Hier muss angemerkt werden dass das Package quest odl evaluation model 5 1 ERWEITERUNG DES SPRACHUMFANGS 63 analysis im Unterschied zu quest odl parser analysis nicht automatisch er zeugt sondern von Hand programmiert wurde Bei nderungen an ODL Auswertungsklassen m ssen die ggf notwendigen nderungen an den Interfaces Eval TreeVisitor und Eval TreeNode sowie an ihren Unterklassen von Hand durchgef hrt werden Im Package quest odl evaluation model analysis sind zwei weitere konkrete Implementierungen von EvalTreeVisitor enthalten Klasse Aufgabe TermToStringConverter Erzeugt f r einen ODL Auswertungsbaum seine String Dar stellung hierbei handelt es sich um eine ODL Abfrage de ren Kompilation den analysierten ODL Term ergeben w rde die aber nicht notwendigerweise dem urspr nglichen ODL Ab frage String gleich ist denn unterschiedlich formulierte ODL Abfragen k nnen den gleichen ODL Auswertungsbaum erge ben TermVariableFinder Findet alle innerhalb eines gegebenen ODL Terms verwendeten und alle in ihm deklarierten Variablen Viele Implementierungen von EvalTreeVisitor sind interne Klassen in a
57. ein Ausgangsport kann mehrere ausgehende Kan le haben e Kanal Kan le verbinden Ports miteinander und erm glichen damit f r Komponenten zu denen die verbundenen Ports geh ren die Kommunikation untereinander Ein Kanal verbindet zwei Ports von denen einer ein Ausgangsport und der andere ein Eingangsport sein muss Wie schon bei Ports ist bei jedem Kanal der Typ der bertragenen Daten festgelegt dieser muss mit dem Datentyp der verbundenen Ports bereinstimmen Automat Ein Automat beschreibt das Verhalten einer Komponente Der Automat wird in einem STD erstellt und einer Komponente zugeordnet e Zustand Zust nde sind Bestandteile eines Automaten und beschreiben seine Struktur und sein Verhal ten Wie Komponenten k nnen Zust nde hierarchisch aufgebaut sein d h jeder Zustand kann beliebig viele Unterzust nde haben die sein Verhalten bestimmen Alle oben aufgef hrten Metamodellelemente besitzen das Attribut Name Dies erm glicht es Model lelemente unterschiedlich zu benennen wobei der Name nicht zwingend eindeutig sein muss Weiterf hrenden Informationen zum QUEST Metamodell gibt es in BLSO1 QuestDev und in 00 Das Vorhandensein eines gemeinsamen Metamodells erm glicht es AutoFocus und QUEST delle untereinander ohne Konvertierungsverluste auszutauschen Des Weiteren k nnen neue Module in QUEST integriert werden die die Metamodell Schnittstelle f r den Zugriff auf Produktmodellen benutzen
58. erh lt und als Unterkomponente der ausge w hlten Komponente ins Modell eingef gt wird context comp Component context names set String forall name element names new c Component result has Name c name and result has SubComponents comp c Eine Komponente ausw hlen und anschlie end eine Menge von Namen eingeben f r jeden Namen aus der eingegebenen Menge wird bei der ausgew hlten Komponente eine Unterkom ponente mit diesem Namen erstellt context portSet set Port forall port element portSet context name String result has Name port name Eine Portmenge ausw hlen und anschlie end f r jeden Port aus der Menge einen neuen Namen spezifizieren 40 KAPITEL 4 ERWEITERUNG VON ODL e context comp Component result not has SubComponents comp SuperComponent comp Entfernt die ausgew hlte Komponente aus dem Modell indem sie aus der Liste der Unterkom ponenten seiner Oberkomponente entfernt wird e portsBelongToChannel ch Channel pl Port p2 Port is SourcePort ch pl and is DestinationPort ch p2 or is SourcePort ch p2 and is DestinationPort ch pl Dieses benamte Pr dikat berpr ft ob die als Parameter bergebenen Ports gerade die Eingangs und Ausgangsports des bergebenen Kanals sind e componentsConnected cl Component c2 Component exists ports pl element cl Ports p2 element c2 Ports exists chl element ports pl OutChannels chl p
59. geiSelectedIndices int seiSelectedIndex void setSelectedIndices void setObjectToSiringFormatter yoid Abbildung A 10 Package quest odl evaluation model query dialog QueryInputPanel Hierarchie ANHANG KLASSENDIAGRAMME 135 QueryConfigurationDialog QUERY CONFIG COUNT int QueryInputEvent _ zqueryInputPanel Producers Class queryInputPanelProducerDescriptions String queryInputPanelProducerNumbers Hashtable valuesDisplayComponentProducers C l valuesDisplayComponentProducerDescriptions Strin zvaluesDisplayComponentProducerNumbers Hashtable queryDialogs Class queryDialogDescriptions String queryDialogNumbers Hashtable setValueDisplayFactories Classl INPUT_CHANGED_EVENTint QueryDialogManager interface zsetValueDisplayFactoryDescriptions String QueryDialogManager QueryDialog zsetValueDispla Factory Numbers Hashtable an Sn boolQueryInputPanelProducers Class geilnstance QueryDialogManager setAcceptInputEnabled void integerQueryInputPanelProducers Class getDefaultQueryDialogInstance DefaultQueryDialog getSplitPanelQueryDialoglnstance SplitPanelQueryDialog getQueryDialogSharedInstance QueryDialog configure void isAcceptInputEnabled boolean stringQueryInputPanelProduce displayValues entityQueryInputPanelProduce setValuesDi introducedTypeQueryInputPanel
60. getInput die den vom Benutzer eingegebenen Wert liefert Die meisten anderen Methoden sind f r das Aus sehen des Eingabepanels zust ndig Eine weitere Methode zusammen mit den Klassen QueryInputEvent und Query InputListener implementiert das Beobachter Entwurfsmuster GammaEtAl S 287 300 das im Event Modell von AWT und Swing breite Anwendung findet Die Metho de addQueryInputListener QueryInputListener listener meldet einen Beobachter f r Benutzereingabe Ereignisse bei dem Eingabepanel an Ein Benutzereingabe Ereignis das entweder nderung der Eingabe z B Auswahl eines anderen Werts in der Aus wahlliste oder Best tigung der Eingabe z B durch Bet tigung des OK Buttons sein kann wird durch eine Instanz von QueryInputEvent repr sentiert 68 KAPITEL 5 IMPLEMENTIERUNG Die Klasse AbstractQueryInputPanel implementiert einige Methoden die in Query InputPanel definiert wurden Unter anderem realisiert sie die Verarbeitung von Benutzerer eignissen beim Auftreten eines Benutzerereignisses wird die Methode fireQueryInput Event QueryInputEvent evt aufgerufen die das Ereignis an alle angemeldeten Beobachter weitergibt Die Unterklassen von QueryInputPanel lassen sich in vier Gruppen unterteilen Panels mit textuellem Eingabefeld z B Text FieldQueryInputPanel Panels mit einer Auswahl z B ListQueryInputPanel Kompositum Panels die mehrere andere Eingabepanels enthalten k nnen D
61. hrt werden muss die Auswertung des aktuellen context Quantors wird unterbrochen und die Exception wird vom vorhergehenden context Quantor abgefangen private class BackwardStepException extends java lang RuntimeException Im Abschnitt 6 4 werden Ideen f r eine flexiblere Dialogflusskontrolle vorgestellt 5 3 Vorbereitung weitergehender nderungen Nachdem wir die Implementierung der neuen Sprachkonstrukte und der interaktiven Benutzerschnitt stelle f r das ODL System beschrieben haben wollen wir einige Hinweise f r Weiterentwicklungen geben Der allgemeine Aufbau des ODL Auswertungssystems und die Schritte die zur Implementierung einer nderung des ODL Sprachumfangs notwendig sind wurden am Beginn des Abschnitts 5 1 be reits besprochen sodass wir hier auf eine allgemeine Beschreibung verzichten und stattdessen einige Beispiele f r konkrete Implementierungen von ODL Sprachkonstrukten sowie von GUI Klassen f r die Benutzerschnittstelle vorstellen die im Rahmen dieser Arbeit erstellt wurden e Einf hrung eines neuen ODL Ausdrucks am Beispiel von SetSizeExpression Wir bereits im Abschnitt 5 1 beschrieben muss zur Einf hrung eines neuen ODL Sprachkon strukts die ODL Grammatik angepasst eine ODL Auswertungsklasse f r dieses Konstrukt er stellt und der SableCCGenerator um Methoden f r die Verarbeitung des Konstrukts erg nzt werden Wir zeigen diese Schritte anhand des ODL Ausdrucks f r Ermittlung der Gr
62. out and result has Name p outPort Hier werden alle Ports mit dem Namen out zu outPort umbenannt Test Erstellen und L schen einer Assoziation Mit der Abfrage context cl Component context c2 Component exists c Component is SubComponents cl c and result not has SubComponents cl c and result has SubComponents c2 c werden f r zwei vom Benutzer ausgew hlte Komponenten alle Unterkomponenten aus der ersten Komponente in die zweite verschoben Einf gen einer neuen Entit t ins Modell Um eine Entit t ins Modell einzuf gen muss sie mit dem new Quantor erstellt und an schlie end einer Eigent mer Komponente zugewiesen werden Betrachten wir als Bei spiel das Einf gen einer neuen Komponente context ownerComp Component context name String new comp Component result has Name comp name and result has SubComponents ownerComp comp Der Benutzer w hlt eine Komponente in welche die neue Komponente als Unterkom ponente eingef gt werden soll und gibt den Namen f r die neue Komponente ein An schlie end wird eine neue Komponente erstellt ihr wird der vom Benutzer eingegebene Name zugewiesen und schlie lich wird sie in die Kollektion der Unterkomponenten der spezifizierten Eigent mer Komponente eingef gt Weitere Details zur ersten Implementierung des ODL Interpreters finden sich in Pasch Kapitel 4 Erweiterung von ODL Zur Aufgabe der Diplomarbeit geh rte d
63. pao xa 108 KAPITEL 6 VERBESSERUNGSM GLICHKEITEN gruppiert man pi mit dem Typ x x Tz so l sst sich der entstehende Typ var via v2 T3 x2 pi x1 xa B 2 2 nicht weiter optimieren Analog verhielte es sich bei der Gruppierung von p mit x2 7 x3 T3 Die Konsequenz ist dass der Algorithmus bei solchen Konflikten sich f r eine der M g lichkeiten entscheiden muss Die optimale L sung hier w re die ungef hren Kosten f r alle M glichkeiten zu berechnen und anschlie end die g nstigste auszuw hlen dies setzt aller dings die Kenntnis der Gr en der einzelnen Elementtypen und der Komplexit t der Pr dikate voraus und erfordert dementsprechend die Entwicklung von Kostenmodellen f r die Auswer tung von ODL Termen was weit ber den Umfang der vorliegenden Arbeit hinausgeht Dieser L sungsansatz muss daher zuk nftigen Entwicklungen vorbehalten bleiben Wir werden an dieser Stelle einen einfacheren Weg gehen indem wir in solchen Konfliktsi tuationen dem zuerst verarbeiteten Term den Vorrang geben im obigen Beispiel w re es der Term pi xi x2 Dies ist ein Kompromiss zwischen dem Schwierigkeitgrad des Algorithmus und dem Optimierungsgrad des Ergebnisses Wir gehen nun wie folgt vor alle Pr dikate aus die nach der Verarbeitung der Pr dikate aus M verblieben sind werden nacheinander verarbeitet und zwar aufsteigend geordnet nac
64. pi L1 p2 L2 Pm Lm hat wobei L Listen der Basistyp Elemente sind die von den Pr dikaten p als Argumente verwendet werden d h L Xk Xk ki j 1 io Xki mit 4 Aufspaltung des Restriktionsterms in Teilterme die durch das logische AND verkn pft sind Diese Terme werden in Listen M M M gespeichert wobei die Liste M alle Terme enth lt die genau i Typelemente aus dem Basistyp verwendet P M gt L t 5 Verpacken von Teiltermen mit den von ihnen verwendeten Basistyp Elementen in separaten ein geschr nkten Typen die als Elementtypen des Basistyps dienen werden Dieser Schritt bildet den Hauptteil des Algorithmus a Bringe alle Pr dikate die nur ein Argument haben d h alle p Lj mit ihrem Argument in einem eingeschr nkten Elementtyp zusammen Sind beispielsweise pi x1 und p2 x3 solche Pr dikate so wird der Typ Jo D Xn Tn 1 1 p2 x3 IN Pm Lm f zu var x1 Ti pi 1 Ta vara T3 po x3 Th pa La ATE Pm Lm umgewandelt b Bringe Pr dikate mit mehreren Argumenten soweit m glich mit diesen Argumenten in einem eingeschr nkten Elementtyp zusammen Dieser Schritt ist schwieriger als Schritt 5a weil es in vielen Situationen keine eindeutige Auf teilung des Basistyps gibt Ein einfaches Beispiel daf r ist der Typ var x3 T3 pi xi x2
65. r par set size Size l par expression r par Variable definitions variable definition variable colon type model element variable definition variable colon model element type Type definitions type product product_type restricted restricted_type_definition set set_type_definition set_variable element defined_variable set expression element 1 par expression r par restricted type definition 1 brace variable colon type v line ccl proposition r brace set type definition set type 150 ANHANG ODL GRAMMATIK IN DER SABLECC NOTATION product_type unary unary_type list 1 par type list type_list identifier colon type type_list_tail type_list_tail comma identifier colon type unary_type basic basic_type model model_element_type basic_type boolean bool_type integer int_type string string_type model_element_type identifier Literaturverzeichnis BLS00 BLSO1 QuestUser QuestDev TACASO2 TACASO0 SableCC GammaEtA HS02 Kemper OCL Pasch Sch02 Sch01 P Braun H L tzbeyer O Slotosch Developing Embedded Systems with AutoFo cus Quest Institut f r Informatik Technische Universit t M nchen 2000 P Braun H L tzbeyer O Slotosch Project QUEST Integrated Metamodels for Au toFocus Institut f r Informatik Technische Universit t M nchen 200
66. sein start proposition n named predicate declaration named predicate declaration ident proposition proposition proposition and proposition proposition or proposition proposition implies proposition proposition equiv proposition neg proposition proposition basic proposition quantor proposition named predicate call basic proposition sm relation comparison expression set is empty bool constant relation n pre_relation post_relation 142 ANHANG ODL GRAMMATIK pre_relation relation_ident post_relation set_is_empty arguments argumentlist argument expression functional_expression function_ident selector_expression selection selector primitive_expression constant variable comparison_expression comparison_operator arithmetic_expression relation_ident arguments ident result relation_ident arguments result not relation_ident arguments isEmpty expression argumentlist lt empty gt argument argumentlist argument expression functional_expression selector_expression arithmetic_expression primitive_expression function_ident arguments ident variable selection selector selection selector ident constant variable bool_constant int_constant string_constant ident expression comparison_operator expression gt gt factor ANHANG ODL
67. setButtonStatus void addValueToSet void removeSelectedValuesFromSet void IntegerTextFieldQueryInputPanel getInput Object interface SetValueDisplay displayValues void displayValues void displayValues void getDisplayComponent Component isSelectionEmpty boolean getSelectedIndex int seiSelectedIndex void setSelectedIndices void geiSelectedIndices int clearSelection void addListSelectionListener void removeListSelectionListener removeallListSelectionListene 1 AbstractSetValueDisplay listSelectionListenersList LinkedList AbstractSetValueDisplay display Values void isSelectionEmpty boolean addListSelectionListener void removeListSelectionListener void removeAllListSelectionListeners void fireListSelectionEvent void calcNewSelection int TableSetValueDisplay valuesTable JTable tableModel SimpleTableModel TableSetValueDisplay TableSetValueDisplay listSelectionEventPerformed void display Values void getDisplayComponent Component clearSelection void getSelectedIndex int geiSelectedIndices int setSelectedIndex void setSelectedIndices void se1ObjectToSiringFormatters void ListSetValueDisplay valuesList JList listModel SimpleListModel ListSetValueDisplay listSelectionEventPerformed void display Values void getDisplayComponent Component clearSelection void getSelectedIndex int
68. sse oouejsunog Ljenba epojuseq A ROA 51 ueajooq srenba ane ARS ane ARS PFANUTSPOJUSEH 1571528 A195 ARE Ums Sumsor 9d Losegias 5 5 1 qO Ki nb JOjeloj sooue sur Sse O sse O 3ur suli 8 LIenb Jes use H seruepuedaqo qeue Aeq 4 proa Ajdde JeSuseg sorouspuedoqo qeue A 8 dA LPSERWN Suimg regnuopredA Leseg eso JesuseH sopuepuedeqepqenAseg EseO SSv ID ad AL SONVLSNI ddA LPO SCION adi gt ue ooq urptuocq lturIst Sse O sse O ue sun 8 Fumg Fumgot LIenb JOje1oj sooue sur joefqo Aionb Sst ssv oouvisuT o84 Zumg Fumgot JOje1oj sooue sur 1J qO Ki nb SSE O SSV IO HdALL HONV LSNI FSUID SSV IO HdAL SONVLSNI ST SSV IO Sd AL SONVLSNI I juvopoog A var v SANIVA NVITIOOS UROJOOG UMLWOCTSNULTSIH Sse O sse O 3ue sull 8 Suimns Suujgon LIenb JOjeloj sooue sur 1 qO Ki nb Joyerey soouvisujueo ooq ISIT LSIT SANTVA 4
69. vom Benutzer kofigurierbar sein dass er vor Beginn des Tests eine Regel f r die Erzeugung von Testf llen vorgibt In allen beschriebenen F llen m ssten andere ODL Auswertungsklassen nicht modifiziert werden weil alle Kontrollfunktionalit ten in der verwendeten Kontrollklasse gekapselt sind die nach au en eine defininierte Schnittstelle aufweist Eine weitere M glichkeit w rde durch die Anwendung des Strategie Entwurfsmusters auf Kon trollklassen er ffnet wie es bereits zur Konfiguration von Eingabedialogen benutzt wird Dann k nnte der Benutzer zur Laufzeit ber einen Konfigurationsdialog festlegen welche der zur Aus wahl stehenden Kontrollklassen verwendet werden soll beispielsweise k nnte zwischen einer Standard Kontrollklasse Benutzereingabe mit M glichkeit von R ckw rtsschritten und einer Test Kontrollklasse keine Eingabe durch den Benutzer sondern Erzeugung von Testwerten durch einen Testfall Generator gew hlt werden Die erste beschriebene L sung l sst sich mit mittlerem Aufwand implementieren bietet jedoch viele der M glichkeit der zweiten L sung nicht insbesondere ist sie nicht beliebig erweiterbar und kann zur Laufzeit nur mit Schwierigkeiten konfiguriert werden Die zweite L sung erfordert einen h heren Implementierungsaufwand ist aber wesentlich fle xibler und bietet zahlreiche Weiterentwicklungsm glichkeiten darunter die Konfiguration der Dia logflusskontrolle zur Laufzeit und das Hinzuf gen ne
70. werden Die Abfrage forall ch Channel exists pl Port exists p2 Port is SourcePort ch pl and is DestinationPort ch p2 kann damit zu einer quivalenten aber effizienteren Abfrage forall ch Channel exists ports pl Port p2 Port is SourcePort ch ports pl and is DestinationPort ch ports p2 umformuliert werden Auf dem Testsystem sank die Auswertungszeit um den Faktor 2 Ein noch drastischeres Beispiel liefert die Abfrage exists cl Component exists c2 Component exists c3 Component exists c4 Component exists c5 Component cl c2 and c2 and c4 and c4 5 deren optimierte Form exists comps cl Component c2 Component c3 Component c4 Component c5 Component comps cl comps c2 and comps c2 comps c3 and comps c3 comps c4 and comps c4 comps c5 lautet Die Auswertungszeit sinkt hierbei von 120 auf 5 Sekunden also um den Faktor 24 Dieser Effekt r hrt daher dass Produkttypen zur wiederholten Iteration ber die Typinstanzen der Elementtypen die zur Erzeugung der Produkttupel notwendig ist einen cachenden Iterator benutzen s auch Abschnitt 5 1 2 Der Abruf von Werten aus dem Cache ist meistens erheblich schneller als die Verwendung des Originaliterators eines Metamodelltyps wodurch sich der Geschwindigkeitsgewinn ergibt Bei dieser Optimierung muss noch darauf hingewiesen werden dass das Einbringen der Va 92 KAPITEL 5 IMPLEMENTIERUNG riablen die
71. 0 Die Struktur und Funktionsweise des ODL Query Subsystems im Packa ge quest odl evaluation model query wird ausf hrlich im Abschnitt 5 2 2 besprochen Vorher wollen wir die GUI Klassen beschreiben die f r den Aufbau von Benutzereingabedialogen erstellt wurden und von Query Klassen verwendet werden 5 2 1 GUI Klassen Die GUI Klassen f r das Query Subsystem belegen zwei Packages quest odl evaluation model query dialog Dieses Packages enth lt die GUI Klassen die in Eingabedialogen Verwendung finden quest odl evaluation model query factory In diesem Package befinden sich Fabrikklassen die f r die Herstellung von GUI Klassen aus quest odl evaluation model query dialog zust ndig sind sie implementie ren die Entwurfsmuster Abstrakte Fabrik Fabrikmethode und Erbauer GammaEtAl S 107 143 Eine weitere Fabrikklasse produziert Instanzen von Klassen aus den Packages quest 5 2 INTERAKTIVE BENUTZERSCHNITTSTELLE 65 dialogs cellRenderers formatters und quest odl evaluation model cellRenderers formatters Zus tzlich zu diesen Klassen wird in Eingabedialogen die Navigationsleiste aus dem Package quest dialogs navigationBar verwendet Schlie lich werden zur Anzeige von Werten verschiedener Datentypen Klassen aus den Packages quest dialogs cellRenderers quest dialogs cellRenderers formatters und aus quest odl evaluation model cellRenderers formatters Wir wollen nun alle verwendeten Klass
72. 1 P Braun H L tzbeyer O Slotosch Quest Users Guide Version 1 0 2003 P Braun H L tzbeyer O Slotosch QUEST Developers Guide 2003 P Braun F Huber B Sch tz A Wisspeintner Preserving Model Consistency in Software Development Institut f r Informatik Technische Universit t M nchen 2002 P Braun H L tzbeyer B Sch tz O Slotosch Consistent Integration of Formal Methods In Tools and Algorithms for the Construction and Analysis of Systems TACAS 2000 2000 Gagnon SableCC An Object Oriented Compiler Framework School of Compu ter Science McGill University Montreal 1998 E Gamma R Helm R Johnson J Vlissides Entwurfsmuster Elemente wiederver wendbarer objektorientierter Software Addison Wesley 1996 Huber B Schatz Integrated Development of Embedded Systems with AutoFocus Institut f r Informatik Technische Universit t M nchen 2002 A Kemper A Eickler Datenbanksysteme Eine Einf hrung R Oldenbourg Verlag M nchen Wien 1999 3 Auflage OMG Unified Modeling Language OCL version 2 0 ptc 03 08 08 Object Mana gement Group http www omg org 2003 D Pasch Konzeption und Implementierung eines ODL Interpreters f r das Auto Focus Quest CASE Werkzeug Bachelor Thesis Technische Universitit M nchen 2002 B Schatz Process Support within the AutoFocus Quest Application Framework AQuA Internal Draft Version Institut f r Informatik Technische Uni
73. 1dxg juoumz1y934 Didde Sue Suueot uut oyworpargpoure N Furmg Sumgo suoneorduy Ge K d 500 00 Kees a nae P TPO 50015 8 Ist Tpayur Jordung suonejagpay powIos 1srTpoxurTo duns sonnug oN1984 Surpurg sjuourus Iss y 126128 pioA sju uru8rssy1 eS13s up ooq n 8A198 1 5 proA Kpdded amsa Le Zumg Sumgo g nsogpuuo Liar ApnsoyuuoL ams suonesaN WES UOq3UpEA ONN MISST ie lerarch Term Hi model ion De De SurtnS urmsol uorounfsiqa De Furmg Fumgo ynsayuua ojenpeAa u eAmbrr 2 8160 EF 1191 1 4014874198 uuo puv1edoijo i934 uonoun 4 uogounf Package quest odl evaluat Abbildung A 4 129 KLASSENDIAGRAMME ANHANG A TRIS SUL SO IDOSSYOAOUIO ptox uonetoossyppe uu ooq uonutoossyst 1 T sonnugpeieroossy1o34 Amug Ainugporeroossy1934 proA emqrvpper 128 uve ooq emqrumvys juropo
74. 2 3128 adk 2d amp jjuaut2 3128 ada 5 mm 1 8 1 5 polqo uewagies 341 34107 14212 5198 1 Ti efqo senpeA 1ueuro o UNS Sunsr Ton eA Sureug SuLng Sunsryonyeag 8 1 2d amp 8 19fqoauouo gqies uvo ooq 1ognuopnueuro gsr 8 129128 1219198 BOCK EG 1e ierarch MetaType H Abbildung A 5 Package quest odl evaluation model KLASSENDIAGRAMME ANHANG A 130 uondooxqojonrsuo u2nSoN uondooxgiojonnsuo uongoN uLns 1ognuop 2s 4 uondooxg1ognuop o1eordnq uondeoxguegnuopreseordn qr uondooxg1ognuop o1eordnq urns 1erpuepr 094 4 uondoeoxgnueurerqropoJApouropur uondoox7p10 n jsuo S QUAOTQ UONdoox 1199 10 199 uondooxquonoe osr uondooxo uondooxquon opgox A PADI S92 uondooxg eAornopoouejsu ULIS 95U88 9 ALIO LIO uondooxjnsr
75. 9 258 Channels 9 Channel T1in Info Driver Tin gt Database T1in 9 Channel T1out Message Database T1out gt Driver Tout 9 Channel T2in Info Driver2 Tin gt Database T2in Channel T20ut Message Database T2out gt Driver2 Tout 9 Channel Inp1 Info Centrale inp1 Driver1 Inp 9 Channel Answer1 Message Driver Answer gt Centrale Answert 59 Channel C1Ack Signal Centrale C1Ack gt Driver1 CAck 9 Channel Inp2 Info Centrale inp2 gt Driver np 9 Channel Answer2 Message Driver2 Answer gt Centrale Answer2 9 Channel C2Ack Signal Centrale C2Ack gt Driver2 CAck 9 E Component Driver 9 CB Ports Port Tout Message DefaultBehaviour 0 MessageFlag 0 Port inp Info DefaultBehaviour 0 MessageFlag 0 Signal if DefaultBehaviour 0 i MessageFlag 0 Part Tin Info DefaultBehaviour 0 MessageFlag 0 Port Answer Message DefaultBehaviour 0 MessageFlag 0 52 Channels e i Automaton DriveEcconomicCable Component Driver 9 CB Ports Port Tout Message i DefaultBehaviour 0 MessageFlag 0 inp Info DefaultBehaviour 0 MessageFlag 0 Signal if DefaultBehaviour 0 MessageFlag 0 Port Tin Info DefaultBehaviour 0 f MessageFlag 0 Port Answer Message if DefaultBehaviour 0 ii MessageFlag 0 5 Channels e Automaton DriveEcconomicCable Component Database 9 CB rois PonTlin Info DefaultBehavio
76. 90 uri L TAO s ur Sun ojsrg IYA WUN suondooxg IMJ 55 41990 HL IAO uopuouoo1dsquo uouro 181971 1 uone iduroy roq N VINO proA uejs ppouonisodoig yIno proA uvjsipouonisododq y ur proA j Sino4 pioA3mgut W L 8 6 5111 10129 9 195 uondooxg1ojo espeurjopur 3115 10109 95 uone y uone ydeu uoneppy uonepydeum uonv os uone osdeumn juauropgpopo WPI oddenppon LsANnd Tur AND NON umeqxe u S 2O 9IqeS sne 3819718 00 OCS odden PPoNLSAND s jppouerpW LSAIND sep NUWA uuo 2popyuoinn pa T2102424 u umud L ppouryoW 9 1094997 Package quest odl evaluation generator Abbildung A 2 127 KLASSENDIAGRAMME ANHANG A 1odoju uorsso1dxgonourgirryore nopeo Jo3oju uoissodxgponeurnpuryereno eo4 8 815 8 uorsso1dxquonipp y 4 uoirssoudxquonoenqng 3utls IOSINAS AOLVAHdO SULMS
77. Assoziation zu anderen Entit ten Hier sind zwei F lle zu unterscheiden Zugriff auf eine Assoziation zu h chstens einer anderen Entit t Der zur ckgegebene Wert ist eine Entit t Beispiel Ausgangsport eines Kanals Zugriff auf eine Assoziation zu mehreren anderen Entit ten Der zur ckgegebene Wert ist eine Menge von Entit ten Beispiel Ports einer Komponente In allen vier F llen m ssen trotz gleicher ODL Syntax verschiedene Auswertungsmechanis men zum Einsatz kommen Daher gibt es vier verschiedene Selektorklassen jede von denen einen der Mechanismen implementiert Die nachfolgende Tabelle gibt die vier Selektorklassen Selektor Klasse Anwendung CompositeTypeSelector Zugriff auf ein Element eines zusammengesetzten Typs AttributeSelector Zugriff auf ein Attribut einer Entit t AssociatedEntitySelector Zugriff auf eine assoziierte Entit t AssociatedEntitiesSelector Zugriff auf meherere assoziierte Entit ten Jede Selektorklasse erbt von der abstrakten Klasse Selector Ein Selektor an sich ist kein selbst ndiger ODL Ausdruck er wird von SelectorExpression Instanzen benutzt Je der ODL Selektorausdruck wird durch eine Instanz der Klasse SelectorExpression dar gestellt Dabei braucht sie nicht zu wissen welcher Zugriffsmechanismus im Falle des kon kreten Selektorausdrucks anzuwenden ist weil der eigentliche Zugriff durch die Instanz einer Unterklasse von Selector realisiert wir
78. Aus dr cke fast nur innerhalb von Vergleichen und Gleichheiten Anwendung finden weil das ak tuelle QUEST Metamodell so gut wie keine ganzzahligen Attribute bei Entit ten aufweist die mit einer Zuweisung der Form result has SomeNumAttr entity 10 ver ndert werden k nnten Beispiele Ausdruck Ergebnis 3 5 8 true 3 10 5 gt 45 false Se Le e true 1 5 3 7 2 10 true Damit ODL Abfragen immer erfolgreich ausgewertet werden k nnen wurde die Division nicht eingef hrt weil hierbei eine Division durch Null und damit ein undefiniertes Ergebnis im Laufe der Auswertung eintreten kann Auf die M glichkeiten zur Einf hrung der Division in ODL wird noch einmal im Abschnitt 6 1 4 eingegangen Mengenoperationen Zurzeit sind zwei Operationen auf Mengen verf gbar Leerheitstest isEmpty setVar F r eine Mengenvariable set Var wird mit dem Ausdruck isEmpty setVar getestet ob die von der Variablen repr sentierte Menge leer ist Falls ja evaluiert der Ausdruck zu true sonstzu false Beispiel exists c Component neg isEmpty c Ports liefert alle Komponenten die mindestens einen Port haben Mengengr e size setVar F r eine Mengenvariable setVar gibt Ausdruck size setVar die Anzahl der Ele mente in der Menge zur ck Beispiel exists c Component size c SubComponents gt 3 liefert alle Komponenten die mindestens drei Unterkomponenten haben Vorschl ge f r weitere Mengenoper
79. ECC NOTATION 147 term ccl term quantifier ccl ccl quantifier context context context extension ccl quantifier forall forall exists exists new_quantifier new context extension l bracket hint extension r bracket hint extension hint equal string constant expr list string constant expr list string constant expr string constant expr list tail string constant expr list tail comma string constant expr term basic basic proposition par l_par proposition r_par ccl term basic ccl basic proposition par l par ccl proposition r par basic proposition relation relation bool bool_proposition ccl basic proposition relation ccl relation bool bool_proposition bool_proposition equal equal_expression bigger_smaller bigger_smaller_expression is_empty isempty l_par expression r_par constant bool_constant_expr Comparisons bigger smaller expression l expr expression comparison operator r expr expression comparison operator bigger bigger smaller smaller bigger or equal bigger or equal 148 ANHANG ODL GRAMMATIK IN DER SABLECC NOTATION smaller or equal smaller or equal Relations relation is pre relation mod post relation ccl relation is pre relation pre relation is call expression post relation add result has call expression del result not has call expression
80. Erweiterung des AQuA Systems ODL Sprachkonstrukte und interaktive Benutzerschnittstelle David Trachtenherz Technische Universit t M nchen Fakult t f r Informatik Diplomarbeit Erweiterung des AQuA Systems ODL Sprachkonstrukte und interaktive Benutzerschnittstelle Aufgabensteller Prof Dr Manfred Broy Betreuer Dr Bernhard Sch tz Bearbeiter David Trachtenherz Abgabedatum 14 11 2003 Selbst ndigkeitserkl rung Ich versichere dass ich diese Diplomarbeit selbst ndig verfasst und nur die angegebenen Quellen und Hilfsmittel verwendet habe M nchen den 14 11 2003 Zusammenfassung Die vorliegende Diplomarbeit befasst sich im Rahmen des AutoFocus Quest Application Frameworks mit der Erweiterung der Operation Definition Language ODL um neue Sprachkonstrukte und der Entwicklung einer interaktive Benutzerschnittstelle f r die Durchf hrung von Benutzereingaben bei der Auswertung von ODL Abfragen Nach der Vorstellung des Projektumfeldes und der konzeptionel len Grundlagen von ODL werden die realisierten Erweiterungen beschrieben und eine ausf hrliche Beschreibung der technischen Implementierung gegeben Ferner wird eine Reihe von Vorschl gen zur Weiterentwicklung des ODL Systems gemacht Abschlie end werden die Ergebnisse der Arbeit zusammengefasst und ein Ausblick auf zuk nftige Entwicklungsm glichkeiten gegeben Inhaltsverzeichnis Einleitung 1 1 Aufgabenstellung 1
81. F r ein neues Sprachkonstrukt muss eine Unterklasse von Term falls es sich um einen ODL Term handelt oder Expression falls es sich im einen ODL Ausdruck handelt im Package quest odl evaluation model erstellt werden die die geforderte Funktionalit t imple mentiert Handelt es sich bei dem neuen Sprachkonstrukt um einen Typ so muss die entsprechende Auswertungsklasse das Interface MetaType auf Abbildung 5 3 nicht gezeigt implementieren F r den Fall der nderung eines bestehenden Sprachkonstrukts muss die entsprechende Klasse ggf angepasst werden 3 In der Generator Klasse SableCCGenerator Package quest odl evaluation ge nerator m ssen Methoden implementiert bzw angepasst werden die aus den Syntaxbaum Knoten f r das betreffende Sprachkonstrukt einen ODL Term oder einen ODL Ausdruck erstellen Die folgenden Abschnitte beschreiben nun die Grammatik und die Programm nderungen die zur Realisierung der geforderten Erweiterung des Sprachumfangs notwendig waren 5 1 1 nderung der ODL Grammatik In diesem Abschnitt beschreiben wir die nderungen und Erweiterungen die an der SableCC Grammatik von ODL vorgenommen wurden Wir werden f r alle in 4 1 vorgestellten Sprachkonstruk te die entsprechenden Produktionsregeln angeben sowie die nderungen im Vergleich zur vorherigen Version der ODL Grammatik erkl ren Im Interesse der Lesbarkeit werden die Produktionen nicht immer streng nach den Regeln einer SableCC Grammatik notiert
82. F 0 is false un pe T2in Info TRANSACTION Answer2 Message d CARD C2Ack Signal T2out Message E SIGNAL EI 12 KJ Abbildung 2 1 AutoFocus Projektbrowser und Diagrammfenster e EET Extended Event Traces Neben den STD s k nnen auch EET s zur Verhaltensbeschreibung von Komponenten benutzt werden Sie stellen die kommunikationsorientierte Sicht auf das Verhalten von Komponenten dar indem sie dieses durch exemplarische Kommunikationsabl ufe zwischen Komponenten darstellen EET s hneln damit vom Konzept her den Sequenzdiagrammen in UML Eine Beschreibung der Architektur und Features von AutoFocus gibt es in HS02 QUEST stellt eine Erweiterung von AutoFocus dar welche die Validierung von Modellen mithilfe existierender formaler Methoden und Werkzeuge erm glicht um die Korrektheit kritischer Systemab schnitte zu sichern s auch BLS00 Das Tool bietet keinen graphischen Editor f r Modelle sondern eine Baumansicht f r die Modellstruktur die aber immer noch Bearbeitungsm glichkeiten zur Verf gung stellt Die Aufgabe von QUEST ist das Testen und die Validierung von Modellen durch den Einsatz von einbindbaren Programmmodulen Abbildung 2 2 die ber die Metamodell Schnittstelle auf Pro duktmodelle zugreifen Zus tzlich erm glicht QUEST die Generierung von Quellcode verschiedener Programmiersprachen wie C oder Java aus den Produktmodellen AutoFocus und QUEST verwenden dasselbe Metamodell u
83. Hauptschleife des Algorithmus ruft deshalb f r jede Verschiebungsgrenze in der Abfrage au er der letzten die entweder das Ende der Abfrage oder ein am Ende der Abfrage stehender forall Quantor ist eine innere Schleife auf die verschiebbare Quantoren innerhalb des Intervalls zwi schen der betrachteten und der nachfolgenden Verschiebungsgrenze neu positioniert Die innere Schleife betrachtet jeden verschiebbaren Quantor zwischen der aktuellen und der n chsten Verschiebungsgrenze zun chst wird der Quantor nach vorne verschoben bis er auf die Verschiebungsgrenze oder auf einen Quantor trifft von dessen Variablen er abh ngig ist Befindet sich nach dieser Stelle eine Gruppe verschiebbarer Quantoren so wird der betrachtete verschieb bare Quantor zur ck hinter diese Gruppe verschoben jedoch nicht weiter als an seine urspr ngli che Position Damit wird gew hrleistet dass die Reihenfolge verschiebbarer Quantoren in Bezug aufeinander soweit wie m glich erhalten bleibt Solange dieser Optimierungsvorschlag nicht implementiert ist kann seine Wirkung vom Benutzer durch gezielte Positionierung von context Quantoren nachgeahmt werden So w rde in der aktuellen Version des ODL bersetzers die Abfrage 6 1 nicht umgeformt und der Quantor context subComp nicht vor den Quantor exists port vorgezogen Dies f hrt dazu dass f r jeden Port der context Eingabedialog f r die Variable subComp gestartet wird obwohl dies nur f r jede Belegung vo
84. Joonpoagpoueqandu Aaon suogngorpewg Jour qund s uvisuppueqimndu A9nO9ro154 59 433npo4q oupq mdup amp 12n 3 I 0dut0 2DA SQY EES HSOTG0 D DUD ISU Arango eouvjsuj eueqimndu AT9nQ39189124 Sueqmndu ArenQ eo uvisujpueqindu A9n srear Les 1 Ee L anpor purddu AronQyuonsgjagpe nsqy REKT TEE EL 4 9npo1g upqImdulG n0uona2 9S153sqy WERDEN 107129155 ALON O99 OG 210242 429npoaqjoupq ndu amp ion juoyoajag 1 1 amp 1 2 oue qandu aonQyio84 1 1195195 proa s2onposgjaueginduy AranQyadA ploa s29nporgourginduyArangyad4 paonponupes Aynuges 10A 120npog PUR 4 AnD 81 6195 proA 1oonpoagroueqindugArongp 1e3ojupios Ploaz1aonposgjaurginduyAranQjoogyas
85. Klasse f r Mengen Eingabepanels be nutzt ObjectToStringFormatter Fabriken F r die Erzeugung von ObjectToStringFormatter Instanzen zur Darstellung von Wer ten verschiedener ODL Datentypen sind folgende Klassen zust ndig ObjectToStringFormatterFactory Interface AbstractObjectToStringFormatterFactory DefaultObjectToStringFormatterFactory ObjectToStringFormatterFactoryManager Das Inteface ObjectToStringFormatterFactory definiert f r jeden ODL Datentyp ei ne Methode die einen Formatierer herstellt der f r Werte dieses Datentyps String Repr senta tionen berechnet Die Klasse ObjectToStringFormatterFactoryManager speichert eine Object ToStringFormatter Fabrik die zur Herstellung von Formatierern f r verschiedene ODL Datentypen verwendet werden soll ObjectToStringFormatter Fabriken werden von QueryInputPanel Fabriken und von SetValueDisplay Fabriken genutzt Denkbar w re auch ein zuk nftiger Einsatz bei der Konfigurierung von Anzeigekomponenten ValuesDisplayComponent f r Wertean zeigen in Eingabedialogen QueryInputPanel Fabriken Die Klassen in dieser Gruppe stellen QueryInputPanel Instanzen her und konfigurie ren sie Im Unterschied zu den fr her beschriebenen Producer Klassen sind sie nicht ei ner QueryInputPanel Unterklasse sondern einem ODL Datentyp zugeordnet f r den sie Eingabepanels herstellen Dementsprechend hat ihre Fabrikmethode als Parameter unter Anderem den ODL Datentyp f r den das QueryIn
86. NG DES SPRACHUMFANGS 51 ecl_quantifier forall exists quantifier ccl quantifier context new quantifier new term basic proposition proposition basic proposition relation bool proposition relation pre relation post relation pre relation is call expression post relation result has call expression result not has call expression e Selektoren ecl_quantifier forall exists ccl term ccl basic proposition ccl proposition ccl basic proposition ccl relation bool proposition ccl relation pre relation pre relation is call expression Die Produktionsregeln f r Selektoren wurden bereits in der fr heren Grammatik eingef hrt sodass sie f r die nun vorgenommene Implementierung von Selektorausdr cken nicht mehr eingef gt sondern nur geringf gig angepasst werden mussten Da Selektorausdr cke jedoch nicht im Funktionsumfang der fr heren Version des ODL Interpreters enthalten waren erzeug te der SableCCGenerator eine UnsupportedConstructException wenn er auf einen Selektorausdruck im verarbeiteten ODL Syntaxbaum traf Die eigentliche Implementie rung der Selektorausdr cke fand also im SableCCGenerator statt und wird im Abschnitt 5 1 2 besprochen e Vergleiche In Analogie zum bereits vorhandenen Test auf Gleichheit f r zwei Ausdr cke equal expression expression expression wurden die Produktionen f r G
87. Nun wollen wir die allgemeine Idee des Algorithmus zur Durchf hrung der beschriebenen Op timierung vorstellen eine ausf hrliche Beschreibung w rde ber der Rahmen dieser Diplomarbeit hinausgehen Gegeben sei ein eingeschr nkter Typ der Form var x1 T1 x2 T2 xn Tn RestrictionTerm var xl var xn Der K rze halber werden wir bei der Algorithmusbeschreibung von der ODL Notation geringf gig abweichen und einfach var x1 Tj xo Th Tn Pnain X1 X2 Xn schreiben hier wird auf die in ODL Abfragen notwendige Verwendung von Selektoren verzichtet Der Algorithmus be steht aus folgenden Schritten 1 Umwandlung von quivalenzen und Implikationen in Terme die nur das logische AND OR und NEG verwenden 2 Anwendung von DeMorgans Gesetz auf Disjunktionen alle Terme der Form V p2 werden Zu p p umgewandelt 3 berpr fung ob ungeklammerte OR Verkn pfungen im Restriktionsterm vorkommen d h ob der Term die Form pi pa pi A hat Wenn so ist eine Optimierung nicht m glich und der Algorithmus bricht ab Hier ist darauf zu achten dass nur ungeklammerte OR Verkn pfungen kritisch sind der Opti mierung eines Term der Form p p2 V steht nichts im Wege da die OR Verkn pfung sich innerhalb eines Teilterms und nicht im Hauptterm befindet Falls der Algorithmus nach diesem Schritt fortgesetzt wird so ist sichergestellt dass der Restrik tionsterm die Form
88. O Luone ownno PION UA ISO uonv ogut Pos ms Luo nv oosto PIONU pA ouroguone ospno PIONU LRAOU YUO NLI YSL ptox uri Luontppyuonel gur PIOA UND uonmp VUNE NSV PIOA UONEFONINO ptox uone8 Nur ptox uone8 N ses Prox uorssaudxquonvondnnwino proA uorsso1d xquoneo dn p ur proA uoisso1dxquonvordnin posto pion vorssardxquonoenqngino PIoA uo saldxquonsengngum Proa uorssaudxquonse ngngase gt proa uorssadxquonippyino proa uorsso1dxquontppy ur pro uoisso1dxguonipp yoseo pIoA uorssa1dxgozigtogino 22161 5 pI0A uotsso1dxgozigiogosto4 pioAziso Lies durgino ies dun ut Pioaso 19 idurgosvo4 PIOA ULO PIOAUIO L lp3Ip idp tueN spa pioA uonvogdumno proA uoneorduioseo4 proa ragnuengprenuoisrxgnno ptox 1 unuenOlenu lsixqur proA oouo eAmbzgnno Proa oouapearnbgyun pioA oouo pAmbgposvo4 proA uorsso1dygro eurgymo PIoA uoissoidxguo etigosto proA uorsso1dyg1o331gnno4 pron uorssoudx quossigur ptox uorssaidxs 88rg su proa uorssoudx gpenbgnno4 Proa uor
89. ODL Abfrage oder eine Ableitung f r ein benamtes Pr dikat erzeugt odl start proposition named predicate declaration Hierbei ist proposition das fr here Startsymbol aus dem jede ODL Abfrage abgeleitet werden kann die kein benamtes Pr dikat definiert Ein benamtes Pr dikat wird durch die folgende Produktionsregel definiert named predicate declaration identifier type list ccl proposition 50 KAPITEL 5 IMPLEMENTIERUNG Damit ein fr her definiertes benamtes Pr dikat aus einer ODL Abfrage heraus aufgerufen wer den kann wurde in die Produktion unary_proposition folgende Regel eingef gt unary proposition named predicate call S E named_predicate_call call call_expression wobei call ein neues Schl sselwort ist und die Produktion call_expression die bereits fr her in der Grammatik vorhanden war einen Funktionsaufruf der Form ident argument List definiert e CCL Propositionen Wie bereits fr her angesprochen wird in der neuen Grammatik an einigen Stellen wie bei spielsweise bei der Definition eingeschr nkter Typen nur die Verwendung von CCL Proposi tionen zugelassen die im Vergleich zu ODL Propositionen folgende Einschr nkungen aufwei sen Es d rfen nur die Quantoren exists und forall verwendet werden Die Quantoren context und new sind nicht zul ssig Das Schl sselwort result darf nicht verwendet werden Dadurch wird ausgeschlossen dass Attribute o
90. PaneDividerLocation void elementTypePanelEvent void createElementTypelnputPanelBorder Border interface metaSetType MetaSetType panelAddedToContainer boolean topPanel javax swing JPanel inputPanelContainer javax swing JPanel setValuesScrollPane javax swing JScrollPane inputScrollPane javax swing JScrollPane inputLabel javax swing JLabel setValuesButtonPanel javax swing JPanel clearButton javax swing JButton splitPane javax swing JSplitPane inputButtonPanel javax swing JPanel addButton javax swing JButton bottomPanel javax swing IPanel removeButton javax swing JButton inputPanelContainerPreferredSize Dimension inputPanelContainerMinimumSize Dimension setValuesList LinkedList setValuesHashSet HashSet set ValueDisplaySelectionListenerListSelectionListener DefaultSetTypeQueryInputPanel DefaultSetTypeQueryInputPanel initComponents void removeButtonActionPerformed void addButtonActionPerformed void clearButtonActionPerformed void resetInput void clearlnput void getSetT ypelnput SetValue getInputLabel String setInputLabel void setInputPanel And ValueDisplay void setSetValueDisplay void getSetValueDisplay SetValueDisplay redisplaySet ValueDisplay void getBaseTypelnputPanel QueryInputPanel doLayout void addNotify void setOptimalSplitPaneDividerLocation void baseTypePanelEvent void setValueDisplaySelectionEvent void createBaseTypelnputPanelBorder Border
91. Producers Class getValuesDisplay ValuesDisplay produetTypeQueryInputPanelProducers Class getBoolQueryDialog QueryDialog setQueryInputPanel void setTypeQueryInputPanelProducers Class Dialog QueryDiglog getQueryInputPanel QueryInputPane queryConfigPanels QueryConfigurationPanell getStringQueryDialog QueryDialog userlnput void BOOLEAN_QUERY_CONFIG_NUMBER i getEntityQueryDialog QueryDialog Dm setBackwardStepEnabled void J INTEGER QUERY CONFIG NUMBER int geilntroducedTypeQueryDialog QueryDialog tea NTEGER OLERY_CONEIGN STRING QUERY CONFIG NUMBE getProductTypeQueryDialog QueryDialog getSetT ypeQuery Dialog QueryDialog z setBoolQueryDialog void setlntegerQueryDialog void setStringQueryDialog void setEntityQueryDialog void INTRODUCED_TYPE_QUERY_CONFIG_NUMBER int PRODUCT_TYPE_QUERY_CONFIG_NUMBER int SET_TYPE_QUERY_CONFIG_NUMBER i okButton javax swing JButton RA h configurationScrollPane javax swing JScrollPa setIntroducedTypeQueryDialog void 4 ee gt javax swing JButton setProductTypeQueryDialog void 1 setSetTypeQueryDialog void 1 SCH ie GE d configurationPanel javax swing JPanel QueryConfigurationDialog initComponents void f 1 cancelButtonActionPerformed void d 1 okButtonActionPerformed void 7 I closeDialog vo
92. Punkts und des Selektors an die Variable var selector 4 2 Betrachten wir Beispiele f r den Zugriff auf Elemente eines Produkttyps exists ports pl Port p2 Port ports pl ports p2 liefert alle Paare gleicher Ports 22 KAPITEL 4 ERWEITERUNG VON ODL exists var ch Channel ports in Port out Port is SourcePort var ch var ports out and is DestinationPort var ch var ports in liefert alle Tupel aus einem Kanal und einem Portpaar bei denen das Portpaar aus dem Eingangsport und dem Ausgangsport des Kanals besteht Und nun einige Beispiel f r den Zugriff auf Attribute und Assoziationen von Modellelementen exists c Component c Name Compl liefert alle Komponenten mit dem Namen Comp1 diese Abfrage ist quivalent zur Ab frageexists c Component is Name c Compl context c Component new p Port result has Name p c Name and result has Ports C p l sst den Benutzer eine Komponente ausw hlen und f gt bei ihr einen neuen Port hinzu dessen Name gleich dem Komponentennamen ist Im Unterschied zur vorherigen Abfrage kann diese nicht mehr in eine g ltige quivalente Abfrage umformuliert werden die keinen Gebrauch vom Attributzugriff ber Selektoren macht exists p Port p Type Text Int findet alle Ports mit dem Datentyp Int Das n chste Beispiel zeigt den Zugriff auf Produkttyp Elemente und Modellelement Attribute innerhalb ein und desselben Selektorausdrucks
93. Rekursives Finden aller Komponenten die im Strukturbaum einer vom Benutzer ausgew hlten Komponente vorkommen d h f r die ausgew hlten Komponente werden alle Unterkomponen ten dann alle Unterkomponenten der Unterkomponenten usw in einer Menge gesammelt context mainComp Component exists subStructure lfp subComps set c Component with c mainComp or exists superComp element subComps is SubComponents superComp c true e Konsistentes Umbenennen einer Kette von Kan len gibt es zwischen Komponenten c1 c Kan le chi chn die alle denselben Namen haben so k nnen alle Kan le aus dieser Kette umbenannt werden indem der Benutzer einen Kanal c ausw hlt den neuen Namen eingibt und anschlie end die anderen Kan le aus der Kette mithilfe des Fixpunktoperators gefunden und umbenannt werden context p channel Channel newName String exists channelSet lfp chSet set ch Channel with ch p channel or exists ch2 element chSet ch2 Name ch Name and Check for all input ports of channel s source component whether they are connected to the channel exists pIn element ch2 SourcePort Component Ports ch DestinationPort pIn or Check for all output ports of channel s destination component whether they are connected to the channel exists pOut element ch2 DestinationPort Component Ports ch SourcePort pOut forall channel element channelSet result has Name chann
94. Relationsterms Ein vollst ndiges Klassendiagramm der Term Hierarchie wird im Anhang A auf der Abbildung A 4 gezeigt e Package quest odl evaluation model analysis F r den ODL Syntaxbaum der vom SableCC Parser erstellt wird generiert SableCC im Packa ge quest odl parser analysis das Interface Analysis und einige leere Implemen tierungen dieses Interfaces die das Visitor Entwurfsmuster f r die Syntaxbaum Knoten imple mentieren Dies wurde am Anfang des Abschnitts 5 1 erl utert Nach dem gleichen Schema wird das Visitor Entwurfsmuster f r ODL Auswertungsb ume im Package quest odl evaluation model analysis realisiert Folgende Klassen bil den das Grundger st Klasse Aufgabe EvalTreeNode Interface das von jedem ODL Auswertungsbaum Knoten zu implementieren ist Dies wird bewerktstelligt indem die In terfaces Expression Term und MetaType im Packa gequest odl evaluation model von diesem Interface erben Da jede ODL Auswertungsklasse eines dieser Interfa ces implementiert implementiert sie auch das Interface Eval TreeNode EvalTreeVisitor Inteface eines Besuchers f r ODL Auswertungsb ume hier wird f r jede ODL Auswertungsklasse Foo die Methode caseFoo Foo node definiert In Anlehnung an die Struktur von quest odl parser analysis hat das Interface EvalTreeVisitor zwei leere Implementierungen Klasse Aufgabe EvalTreeVisitorAdap Liefert f r jede in EvalTreeVisitor definierte Methode
95. SizeExpression expression expression getExpression apply this outSetSizeExpression expression public void inSetSizeExpression SetSizeExpression expression defaultIn expression public void outSetSizeExpression SetSizeExpression expression defaultOut expression 88 KAPITEL 5 IMPLEMENTIERUNG Weitere Visitor Klassen f r ODL Auswertungsb ume beispielsweise TermToString Converter sollten ebenfalls um Methoden f r die neue Auswertungsklasse erg nzt werden Der letzte Schritt ist die Erstellung von Methoden im SableCCGenerator die f r die Kom pilation des neuen Sprachkonstrukts zust ndig sind Diese Methoden m ssen wenn sie in einem vom SableCC Parser erstellten ODL Syntaxbaum einer ODL Abfrage auf das neue Sprachkon strukt treffen eine Instanz der entsprechenden ODI Auswertungsklasse in den ODL Auswer tungsbaum einf gen public void outASetSizeArithmeticTerm ASetSizeArithmeticTerm node TypedExpression typedExpression TypedExpression getOut node getExpression berpr fen ob der Typ des Ausdrucks auf den SetSizeExpression angewandt wird ein Mengentyp ist if typedExpression getType getInstanceMetaType instanceof MetaSetType throw new InvalidArgumentsException Argument must be a set typedExpression getToken getLine typedExpression getToken getPos Interne Repr sentation f r die
96. Surgoi 1 Surpurg sso1o4 Surpurg uorun4 Surpurg UISj ST T Jer TISV uiojnsrTasrTeo urojnsrT oo1 1se ulojpsrT1srToon Surpurq 1005 TermResult und Excepti Package quest odl evaluation model Abbildung A 6 ANHANG A KLASSENDIAGRAMME 131 interface lt lt compiled gt gt java util Iterator hasNext boolean next java lang Object remove void interface Resettablelterator reset void Powersetlterator INIT_ARRAY_SIZE int baseSetElements Object baseSetElementsRead int currentSubsetLength int currentS ubsetA vailable boolean Powersetlterator ensureBaseSetArrayCapacity void constructS ubset LinkedList hasNext boolean next Object nextSubset LinkedL ist resetCurrentElement void remove void reset void SimpleBitSet ADDRESS_BITS_PER_UNIT int BITS_PER_UNIT int BIT INDEX MASK int WORD MASK long recalculateUnitsInUse void SimpleBitSet SimpleBitSet ensureCapacity void flip void set void set void clear void clear void get boolean getBits long length int bitLen int isEmpty boolean intersects boolean and void or void xor void andNot void hashCode int size int equals boolean clone Object toString String numericInc void Cachedlterator currentIndex int Cachedl
97. V aluesCollection Collection 1 1 I Default ValuesDisplay DefaultValuesDisplay SplitPanelQueryDialog splitPanel JSplitPane DefaultQueryDial ceplitPane2 ISplitPame DefaultQueryDialo SplitPanelQueryDialog DefaultQueryDialog SplitPanelQueryDialog DefaultQueryDialog SplitPanelQueryDialog inilComponentstvoid initComponents void closeDialoe void closeDialog void DefaultValuesDisplay displayValuesImpl void getDisplayComponent Component setValuesDisplayComponent void getV al uesDisplayComponent ValuesDisplayComponent interface ValuesDisplayComponent displayValues void getDisplayComponent Componeni QueryInputPanel NavigationEventException DEFAULT_PREFERRED_WIDHT int BACKWARD_STEP int INPUT_CANCELLED int ceventTypezint interface i QueryInputListener 1 I FquerylnputEventDispatched void L TableValuesDisplayComponent TextA reaValuesDisplayComponent SEPARATOR String textArea javax swing JTextArea display ValuesScroller javax swing JScrollPane clearInput void verifyInput boolean NavigationEventException getEventType int Message Strin play ValuesTable javax swing JTable displayValuesScroller javax swing JScrollPane Table ValuesDisplayComponent initComponents void display Values void append Variable Value void getDisplayComponent Component getInputLabel String setInp
98. Values void seilnputValues void setSelectedIndex void serOb setlnput Values void setlnputValues void SelectionQueryInputPanel setSelectedValue void AbstractSelectionQueryInputPanel QueryInputEvent 4INPUT CHANGED EVENT int INPUT CONFIRMED EVENT int DEFAULT PREFERRED WIDHT int eventType int QueryInputEven getEventType int Coi jectToStringFormatter void ListQueryInputPanel RadioButtonsQueryInputPanel inputScrollPane javax swing JScrollPane inputLabel javax swing JLabel nputList javax swing JList ListQueryInputPanel initComponents void inputListMouseClicked void inputListKeyTyped void inputListValueChanged void getInput Object clearlnput void setInputValues void getInputLabel String setInputLabel void setlnputListCellRenderer void getInputListCellRenderer ListCellRendere setSelectedIndex void setSelectedValue void setObjectToStringFormatter void radioButtonsPanel javax swing JPanel inputLabel javax swing JLabel buttonsScrollPane javax swing JScrollPane radioButtonsGroup javax swing ButtonGroup values Object radioButtons JRadioButton objecrToStingFormatter ObjectToStiingFormatter RadioButtonsQueryInputPanel initComponents void getInput Object clearInput void getInputLabel String setInputLabel void setlnput Values void radioButtonltemStateChanged voi
99. aCom positeType und dient als Oberklasse f r alle Klassen die einen zusammengesetzten Typ implementieren zurzeit ist MetaProduct Type ihre einzige Unterklasse Die vollst ndige Met aT ype Hierarchie ist auf der Abbildung A 5 im Anhang A dargestellt Wir beschreiben nun die Erweiterungen im Detail In der fr heren Version waren das Interface MetaType sowie die Typ Klassen MetaBool MetaInteger MetaString und Meta Entity bereits vorhanden ebenso wie die Werte Klasse Entity die einzelne Metamodell Elemente repr sentiert F r die neuen Datentypen ProductType RestrictedType SetType und IntroducedType mussten neue Typ Klassen und teilweise auch Werte Klassen erstellt werden Die folgende Tabelle gibt f r jeden neuen Datentyp die daf r erstellten Klassen in der Me taType Hierarchie sowie die implementierten Methoden im SableCCGenerator an Ein ausf hrlicher Kommentar zu diesen Klassen und Methoden findet sich im Java Quellcode der entsprechenden Klassen und Methoden sowie in ODLAPI Datentyp Typ Klassen Methoden im SableCCGenerator ProductType MetaCompositeType outAProductType Produkttyp AbstractMetaCompo outAListProductType siteType constructMetaProductType MetaProduct Type outATypeList CompositeValue ProductValue SetType MetaSetType outASetType Mengentyp SetValue outASetTypeDefinition RestrictedTyp MetaRestrictedType outARestrictedType Eingeschr nkter inARestrictedTypeDefinit
100. able unabh ngig do posQuantor quantorList previousBefore posQuantor end while nextPosQuantor quantorList nextAfter posQuantor co Wenn nach posQuantor eine Gruppe verschiebbarer Quantoren folgt muss quantor ans Ende dieser Gruppe verschoben werden damit die Reihenfolge verschiebbarer Quantoren untereinander erhalten bleibt jedoch nicht weiter als an seine urspr ngliche Position oc while nextPosQuantor ist ein verschiebbarer Quantor and nextPosQuantor quantor do nextPosQuantor quantorList nextAfter nextPosQuantor end while co nextPosQuantor gibt nun den Quantor an vor den quantor verschoben werden muss oc if nextPosQuantor Z quantor then quantorList remove quantor quantorList insertBefore nextPosQuantor quantor co quantor vor nextPosQuantor in die Liste ein f gen oc end if quantor quantorList nextAfter quantor end while if Nicht orall Quantoren hinter rightLimit in quantorList vorhanden then firstQuantor Erster Nicht ora11 Quantor hinter rightLimit leftLimit quantorList previousBefore firstQuantor else firstQuantor null end if end while co listQuantor enth lt nun die optimierte Reihenfolge der Quantoren in der ODL Abfrage oc 6 2 OPTIMIERUNG DER ABFRAGEAUSWERTUNG 105 Durch geeignete Formulierung von ODL Abfragen kann also erreicht werden dass der beschrie bene verfeinerte Algorithmus keine weiteren Optimierungen gegen ber dem aktuell implementierten Algorithm
101. alb des Eingabebereichs ein Slider javax swing JSlider angezeigt auf dem die geeignete Skalierung gew hlt werden kann Die M glichkeit den Slider zu ver stecken wenn er nicht mehr gebraucht wird Abb 5 9 wird realisiert indem der Slider und 70 KAPITEL 5 IMPLEMENTIERUNG der Eingabebereich in einem Splittingpanel javax swing JSplitPane untergebracht werden Zwischen CompositeQueryInputPanel und CompositeType s Abschnitt 5 1 2 be steht folgende Verbindung QueryInputPanel Instanzen geben als Eingabe Object Instanzen zur ck CompositeQueryInputPanel Instanzen liefern CompositeValue Instanzen als Ergebnis der Eingabe zur ck das Kompositum der QueryInputPanel Hierarchie liefert als Benutzereingabe somit Instanzen des Kompositums der Werteklassen Hierarchie Hier tritt also noch einmal die Parallelit t zwischen dem Aufbau des ODL Typsystems und des ODL Query Subsystems zu Tage Product type variable ports Select a Port for 1 Select a Port for 2 ort Slot1 Card ort Slot1 ort Slot2 Card ort Slot2 Card ort Keypad1 Keys ort Keypad1 Keys ort Keypad Keys ort Keypad Keys ort RadiTime1 Date ort RadiTime1 Date ort RadioTime2 Date ort RadioTime2 Date Width zoom E naa naa ZEIT 25 50 75 100 125 150 175 200 Abbildung 5 8 DefaultCompositeQueryInputPanel roduct type variable ports Select a Port for 1 ort 51041 Ca
102. alogs f r diesen Datentyp individuell Die Abbildung 4 14 zeigt einen Ausschnitt des Konfigurationsdialogs mit den Konfigurationspa nels f r die Datentypen Boolean Int und String Als Eingabepanel Bereich Value input kann eines der aufgelisteten Panels ausgew hlt werden wobei die Auswahl je nach Datentyp variieren kann Als Werteanzeigekomponente Bereich Display known variables in wird stets ein Textbereich und eine Tabelle angeboten Als Dialogfester f r die Eingabe Bereich Query dialog kann ein einfaches Dialogfenster Abb 4 1 oder ein Dialogfenster mit ver nderbaren Bereichsgr en Abb 4 4 aus gew hlt werden Die Einstellung Use shared dialog instance f r den auf auf der Abbildung 4 14 gezeigten Fall bewirkt zusammen mit der Auswahl des gleichen Dialogfenstertyps f r alle Datenty pen dass f r die Datentypen Boolean Int und String dieselbe Eingabedialog Instanz benutzt wird amp Query options Boolean query Integer query String query Yalue input Yalue input Yalue input Text field Text field Text field C List Radio buttons Display known variables in Display known variables in Display known variables in Text area e Text area Text area Table Table Table Query dialog Query dialog Query dialog e Default query dialog e Default query dialog e Default query dialog Query dialog with resizable
103. ame Das erzeugte Eingabepanel an den Eingabedialog bergeben queryDialog setQueryInputPanel queryInputPanel Wenn Variablenwerte bergeben wurden die dem Benutzer anzuzeigen sind dann ine Werteanzeig bergeben rstellen und an den Eingabedialog KAPITEL 5 IMPLEMENTIERUNG 82 ONEA pT Josfqo ndupo pee e EE ONLA ET Mau 6 puegindugAronb mat 01 ZI Aran joue ginduyAranQayeaio 8 10121 i ginduyAtanO poq joue qindu Aron oog198 9 Zomm 6 gt 4 Zomm fouegindupA1onG Tozeur WAIKI n Aron 008133 4 6 nea umo 9 ueepoog oog Aronb z ONEA L 1 0 009 Todeur Anand 1004 T rJnuenO1x luoo D Abbildung 5 17 Sequenzdiagramm einer Benutzereingabe f r den Typ Boolean 5 2 INTERAKTIVE BENUTZERSCHNITTSTELLE 83 if names null amp amp va lues null
104. amen f r die neue Zwischenkomponen t midCompName String t mainComponent Channels te eingeben rstellen Zwischenkomponente in der Hauptkomponent new midComp Component has Name midComp midCompName and resul result All durch forall is Destinat has SubComponents mainComponent e Kan le aus dem ausgew hlten Kanalb ndel auftrennen und die Zwischenkomponente durchleiten channel element channelBundle Eingangs und Ausgangsport des Kanals merken exists chPorts in p element channel DestinationPort Component Ports tionPort channel p midComp and 5 out p element channel SourcePort Component Ports is SourcePort channel p Kanal l schen result not has Channels mainComponent channel and result not has OutChannels chPorts out channel and result not has InChannel chPorts in channel and Eingangsport in der Zwischekomponent new inPort has Name inPort has Type inPort has Direction inPort chPorts in has Ports midComp resul result result resul t t Port inPort and rstellen channel Name and channel Type and Direction and Kanal zwischen dem Ausgangsport des gel schten Kanals und dem neuen Eingangsport erstellen new inCh result h result h result h result h result h result h result h
105. and forall port element comps src Ports result not has Ports comps src port and result has Ports comps dest port and forall locVar element comps src LocVariables result not has LocVariables comps src locVar and result has LocVariables comps dest locVar Diese Abfrage dient zur Zusammenf hrung zweier Komponenten nachdem der Benutzer eine 4 3 BEISPIELE VON ODL ABFRAGEN 41 Quellkomponente und eine Zielkomponente ausw hlt werden alle Unterkomponenten Kan le Ports und lokale Variablen der Zielkomponente in die Quellkomponente verschoben Diese Formulierung ist nur auf Quellkomponenten anwendbar die Unterkomponenten und kei nen Automaten besitzen nach den Regeln des QUEST Metamodells darf eine Komponente entweder Unterkomponenten zur Beschreibung der Struktur oder einen Automaten zur Be schreibung des Verhaltens besitzen Nun wollen wir noch ein komplexeres Beispiel pr sentieren Die folgende ODL Abfrage erstellt eine neue Zwischenkomponente und f gt sie in das vom Benutzer ausgew hlte Kanalb ndel ein wo bei jedes Kanal aus dem B ndel durch zwei neue Kan le ersetzt wird welche die Ports des ersetzten Kanals mit neuen Ports der eingef gten Komponente verbindet Hauptkomponente ausw hlen context mainComponen t Component Kanalb ndel aus der Hauptkomponenten ausw hlen context Den contex channelBun dle set elemen N
106. angezeigt werden k nnen Eingabedialoge nutzen zurzeit nur den Textbereich f r Hinweise Abbildung 5 15 Die Klasse NavigationBar erfuhr im Rahmen der vorliegenden Arbeit eine geringf gige Er weiterung die Navigationsbuttons und die Textbereiche k nnen jetzt einzeln versteckt und wieder angezeigt werden daf r sind neue Methoden zust ndig die das Wort Visible im Namen enthal ten beispielsweise wird mit der Methode setHintVisible boolean visible derHin weistext angezeigt bzw versteckt und die Methode boolean isHintVisible gibt an ob der Hinweistext sichtbar ist Ein Klassendiagramm des Packages quest dialogs navigationBar befindet sich im An hang A auf der Abbildung A 13 Abbildung 5 14 NavigationBar Enter an integer number Abbildung 5 15 NavigationBar mit Hinweistext Cellrenderer und Cellrenderer Formatierer Um Werte verschiedener Datentypen vor Allem jedoch Entit ten angemessen darstellen zu k nnen gen gt die von der Methode toString gelieferte String Repr sentation oft nicht Daher wurde f r Listen und Tabellen die M glichkeit genutzt eigene Cellrenderer zu spezifizieren s JavaAPI javax swing ListCellRenderer und javax swing table TableCellRenderer der f r die in Listen bzw Tabellen anzuzeigenden Objekte eine Stringrepr sentation erstellt Um f r ein und dieselbe Klasse deren Instanzen dargestellt werden sollen keine zwei Cellrenderer n mlich eine Implementierung vo
107. anschlie end nur die Unterkomponenten von c1 anzeigt Analog f hrt die Selektion einer Komponente f r c2 dazu dass die Liste f r c1 nur die Ober komponente von c2 falls vorhanden auff hrt Auf der in einem Graphikeditor nachbearbeiteten Abbildung 6 4 wird gezeigt wie der Eingabedialog f r die obige Abfrage aussehen k nnte nachdem eine Komponente f r c1 ausgew hlt wurde ru A stricted type variable comps Select a Component for c1 Select a Component for c2 Component BankingSystem finite version Component Driver 1 Component Centrale 27 omponent Driver2 Component Driver 1 omponent Database Component Driver2 Component Database Component Process 1 Component Process2 On lt lt Previous Cancel Next gt gt Abbildung 6 4 Filterung des letzten auszuw hlenden Basistyp Elements eines eingeschr nkten Typs Bei der Implementierung der Filterung ist darauf zu achten dass eine Liste in der bereits ein Wert ausgew hlt ist nicht mehr gefiltert werden soll wenn der Benutzer in einer anderen Liste einen Wert ausw hlt Wird beispielsweise in der obigen Abfrage eine Komponente f r c1 und anschlie end eine f r c2 ausgew hlt so darf die Liste f r c1 nicht mehr gefiltert werden weil ihre Auswahl vor der Auswahl in der zweiten Liste vorgenommen wurde und damit ihr gegen ber priorisiert ist Diese Priorit t wird aufgehoben wenn der Benutzer die Auswahl in der
108. apitel 5 wird die Implementierung der ODL Spracherweiterung und der interaktiven Benut zerschnittstelle ausf hrlich beschrieben Zus tzlich werden im Abschnitt 5 3 die Schritte kurz erl u tert die zur Implementierung weiterer nderungen durchzuf hren sind Der Abschnitt 5 4 gibt unter Ber cksichtigung der Implementierungsaspekte des ODL Auswertungssystems Hinweise zum Ent wurf effizienter ODL Abfragen Das Kapitel 6 befasst sich mit den Verbesserungs und Weiterentwicklungsm glichkeiten f r das ODL Auswertungssystem und f r die interaktive Benutzerschnittstelle Im letzten Kapitel wird eine kurze Zusammenfassung der Ergebnisse der Arbeit und ein Ausblick auf zuk nftige Entwicklungsm glichkeiten gegeben 1 3 Notation In der vorliegenden Arbeit werden verschiedene Textformatierungen und Diagramme verwendet um das Lesen zu erleichern Zun chst die Textformate e ODL Abfragen und Java Quellcode werden in Maschinenschrift gesetzt e W rter die vom laufenden Text abgehoben werden sollen sind kursiv gesetzt e berschriften der Einzelpunkte von Aufz hlungen werden meistens fett gesetzt Klassendiagramme und Sequenzdiagramme verwenden die UML Notation wie sie von TogetherJ in der Version 3 83 unterst tzt wird Kapitel 2 berblick In diesem Kapitel werden wir die CASE Tools AutoFocus und QUEST kurz vorstellen die das AQuA Framework bilden in dessen Rahmen die aktuelle Diplomarbeit durchgef hrt wurde Der Schwer punk
109. ariablen sein Variablentyp abh ngt konnte aufgrund ihrer Komplexit t nicht im Rahmen der vorliegenden Arbeit implementiert werden Sie wird jedoch ausf hrlich im Abschnitt 6 2 1 besprochen In der aktuellen Version des ODL Systems wird eine einfachere jedoch sichere L sung ein gesetzt Dabei wird f r einen cont ext Quantor zun chst ermittelt ob sein Variablentyp von einer anderen Variablen abh ngt Ist dies nicht der Fall so wird der Quantor wie schon fr her bis zum n chsten orall Quantor bzw an den Anfang der ODL Abfrage vorgezogen H ngt der Typ der vom context Quantor gebundenen Variablen von einer anderen Variablen ab wird der Quantor als unbeweglich markiert und an seiner Stelle belassen Dieser Algorith mus resultiert zwar h ufig in suboptimaler Positionierung von cont ext Quantoren er ist aber wesentlich einfacher als die optimale L sung und auch mit diesem Algorithmus kann der Be nutzer durch Umformulierung der ODL Abfrage eine optimale Positionierung von context Quantoren erreichen 5 2 Interaktive Benutzerschnittstelle Nachdem wir die ODL Auswertungsklassen besprochen haben wollen wir eine Beschreibung der im Rahmen dieser Arbeit entwickelten Benutzerschnittstelle f r die Eingabe von Variablenwerten geben In der fr heren ODL Version wurde der Grundstein f r das Query Subsystem gelegt das Be nutzereingaben erm glichen soll die bei der Auswertung von context Quantoren notwendig sind Pasch S 29 3
110. arser verwendet sie befinden sich in den Packages quest odl parser lexer bzw quest odl parser parser Der Parser liefert als Er gebnis einen Syntaxbaum in dem jedem Token aus der ODL Abfrage ein Knoten entspricht Alle m glichen Syntaxbaum Knoten die ebenfalls automatisch aus der ODL Grammatik generiert wer den befinden sich im Package quest odl parser node und erben von der abstrakten Klasse Node Eine ausf hrliche Beschreibung der Funktionsweise von SableCC findet sich in SableCC 5 1 ERWEITERUNG DES SPRACHUMFANGS 45 Neben dem Lexer Parser und den Syntaxbaum Knoten generiert SableCC das Package quest odl parser analysis hier befindet sich das Interface Analysis das zusam men mit den Syntaxbaum Knoten aus quest odl parser node das Visitor Entwurfsmuster implementiert GammaEtAl S 301 318 F r jeden Syntaxbaum Knoten Foo d h f r jede Un terklasse von quest odl parser node Node enth lt das Interface Analysis die Me thode caseFoo Foo node Jeder Syntaxbaum Knoten Foo besitzt seinerseits die Methode apply Analysis visitor dieden Aufruf visitor caseFoo this enth lt Das Interface Analysis wird von der Klasse AnalysisAdapter implementiert die f r je den Syntaxbaum Knoten Foo eine leere Implementierung der entsprechenden Methode caseFoo bereitstellt Die Unterklasse DepthFirstAdapter von AnalysisAdapter bildet die Vorstufe zur systematischen Analyse und Verarbeitung eines Syntaxbaums indem sie einen Syntaxbaum in de
111. asst wurde muss x4 jetzt mit diesem Elementtyp gruppiert werden 110 KAPITEL 6 VERBESSERUNGSM GLICHKEITEN var v1234 v1234 7123 T1p1T2p3T3pa xa p6 x3 xA xs T5 Ps x1 X2 paar x5 ps xi X2 xa Hier tritt der Fall ein wo alle Argumente des Pr dikats bereits in einem Elementtyp zusammengefasst sind und zwar im Elementtyp dessen Variable 123 hei t Deshalb wird ps zum Restriktionsterm von 123 mit einem logischen AND hinzugef gt var v1234 71234 Vi23 7123 712 Ti pi Tops T3 pa Q2 ps Qai x2 xa Ty po x3 x4 xs Ts 1 x5 J 1 Xa xs F r diesen Term kann keine Optimierung mehr vorgenommen werden da die Gruppierung von x1 und x5 zu einem Elementtyp die Zusammenfassung der verblie benen Typelemente var 234 und xs nach sich ziehen w rde das Ergebnis w re der Typ var 234 T p1T2 p3T3 papsTApeo 5 15 der schon jetzt der Basistyp des u eren einge schr nkten Typs ist Nachdem wir den Ablauf der Optimierung dargestellt haben wollen wir die optimierte Formulierung des als Beispiel verwendeten eingeschr nkten Typs angeben var v1234 71234 7123 v123 712 v12 Qi x1 pi x2 T2 ps Qi T3 Da xa ps X1 x2 Ta P6 x3 xa xs T5 p7 x1 5 Diese Formulierung bringt unter Umst nden erhebliche Ze
112. ationen finden sich im Abschnitt 6 1 2 Erweiterte Syntax des context Quantors Die Syntax des context Quantors wurde so erweitert dass der Benutzer ber einen op tionalen Parameter einen Texthinweis spezifizieren kann der im Eingabedialog f r die vom context Quantor gebundene Variable angezeigt werden kann 26 KAPITEL 4 ERWEITERUNG VON ODL context hint A hint message var type 4 8 Eine solche Abfrage ist semantisch quivalent zu der Abfrage context var type Der ein zige Unterschied besteht darin dass im Eingabedialog f r die Variable var der Text nint message angezeigt wird Soll ein mehrzeiliger Text angezeigt werden m ssen die Zeilen durch Kommata getrennt wer den context hint First line Second line var type Sowohl die Verwendung eines optionales Parameters als auch der Parameter selbst sind optio nal alle folgenden ODL Abfragen sind damit g ltig und semantisch quivalent context var Int true context var Int true context hint A message var Int true context hint Line 1 Line 2 var Int true Zusammenfassend f hren wir noch einmal alle Erweiterungen des Sprachumfangs von ODL in der Tabelle 4 1 auf Im Anhang B wird eine aktualisierte ODL Grammatik angegeben die durch die Erweiterung der Grammatik aus Sch01 um die neuen Sprachkonstrukte entstand Bezeichnung Erl uterung Produkttypen Typen bestehend aus mehreren Elementen anderer Typ
113. aufgebaut und bestehen aus folgenden Teilbereichen Abb 4 14 e Bereich Value input Auswahl des Eingabepanels in dem Werte des betreffenden Datentyps eingegeben werden sol len e Bereich Display known variable in Auswahl des Werteanzeigebereichs in dem bereits bekannte Variablen angezeigt werden e Bereich Query dialog Typ des Dialogfensters das als Eingabedialog f r den betreffenden Datentyp verwendet werden soll e Checkbox Use shared dialog instance ber diese Checkbox wird festgelegt ob gemeinsam mit anderen Datentypen dieselbe Ein gabedialog Instanz verwendet werden soll oder eine eigene Dialoginstanz f r diesen Datentyp erstellt und verwendet werden soll Die Auswirkung dieser Einstellung ist die folgende wird f r mehrere Datentypen derselbe Eingabedialogtyp eingestellt und die Checkbox Use shared dialog instance gesetzt so bilden sie eine Gruppe f r die eine gemeinsame Dialoginstanz 4 2 INTERAKTIVE BENUTZERSCHNITTSTELLE 37 verwendet wird Dialogfenster Einstellungen wie Fensterposition und gr e werden von al len Datentypen aus dieser Gruppe geteilt Einstellungen die w hrend der Eingabe eines Wert f r einen der Datentypen aus der Gruppe vorgenommen wurden werden automatisch f r alle Datentypen aus dieser Gruppe wirksam Wird f r einen Datentyp hingegen eine eigenst ndige Dialoginstanz verwendet Checkbox nicht gesetzt so sind auch alle fensterspezifischen Ein stellungen des Eingabedi
114. bei muss allerdings darauf geachtet werden dass ben amte Pr dikate zurzeit in Restriktionstermen eingeschr nkter Typen aufgerufen werden d rfen in denen ebenfalls nur Sprachkonstrukte aus der CCL Teilmenge zugelassen sind Sollte also der Sprachumfang bei benamten Pr dikaten erweitert werden so muss kontrolliert werden dass in Restriktionstermen eingeschr nkter Typen nur solche benamten Pr dikate aufgerufen werden d rfen die lediglich die CCL Teilmenge von ODL verwenden 5 4 Entwurf optimierter ODL Abfragen In diesem Abschnitt wollen wir einige Faustregeln zum Entwurf optimierter ODL Abfragen vorstel len Die Optimierungsregeln ber cksichtigen die technische Implementierung des ODL Auswertungs systems und k nnen die Auswertungszeiten f r ODL Abfragen zum Teil um eine bis mehrere Gr en ordnungen verk rzen Um dem Leser die Optimierungseffekte zu veranschaulichen werden f r einige Beispielabfragen die Auswertungszeiten f r eine nicht optimierte und eine optimierte Formulierung angeben als Testsystem wurde dabei der Rechner verwendet auf dem diese Diplomarbeit geschrie ben wurde und als Produktmodell wurde FM99Fin qml aus dem Projekt FM99 verwendet das sich im Verzeichnis Examples M99 einer QUEST Entwicklerinstallation befindet e Verwendung von Produkttypen statt Quantorlisten Wird eine Universal oder Existenzquantifizierung ber mehrere Variablen benutzt so sollten die Variablen in einem Produkttyp zusammengefasst
115. beschreiben nun die Eingabem glichkeiten f r un re Datentypen im Einzelnen e String String Werte werden in einem Textfeld eingegeben Abb 4 1 Dabei wird jede Eingabe akzeptiert e Int Ganzzahlige Werte werden ebenfalls in einem Textfeld eingegeben Abb 4 4 Es werden nur Eingaben akzeptiert die eine g ltige ganze Zahl darstellen 30 KAPITEL 4 ERWEITERUNG VON ODL e Boolean F r Boolean Werte stehen mehrere Eingabepanels zur Auswahl zus tzlich zu dem Textfeld dass die Eingaben true und false akzeptiert kann ein boolescher Wert mit einem Radiobutton Abb 4 5 oder aus einer Liste ausgew hlt werden e Metamodelltypen Im Unterschied zu den Grundtypen St ring Int und Boolean k nnen Instanzen von Me tamodelltypen d h Modellelemente nicht in einem Textfeld eingegeben werden da die Namen von Modellelementen im Allgemeinen nicht eindeutig sind ein g ltiges Modell darf beispiels weise zwei Kompontenten mit dem Namen Slot enthalten Die einzige Eingabem glichkeit besteht damit in der Auswahl des gew nschten Elements aus den vorhandenen Modellelemen ten Die Auswahl kann zurzeit in einer Liste oder einer Gruppe von Radiobuttons stattfinden Die Abbildung 4 6 zeigt den Eingabedialog f r die Variable comp2 der bei der Auswertung der ODL Abfrage context compl Component context comp2 Component compl comp2 gestartet wird Eine Liste im Dialog f hrt alle im Modell verf gbaren Komponenten auf von denen ein
116. besteht aus zwei Teilen Betrachten wir den Eingabedialog f r die ODL Abfrage context stringSet set String true auf der Abbildung 4 9 e Basistyp Eingabebereich im unteren Teil des Mengen Eingabepanels befindet sich ein Eingabepanel f r die Werte des Basistyps der Menge in unserem Beispiel ist es String sowie die Buttons Add und Clear Der Add Button f gt einen eingegebenen Basistyp Wert zur Menge hinzu falls er zul ssig ist und nicht bereits in der Menge enthalten ist Die Best tigung des Basistyp Werts durch das Dr cken der Eingabe Taste has dieselbe Funktion Der Clear Button l scht den aktuellen Wert im Basistyp Eingabepanel 32 KAPITEL 4 ERWEITERUNG VON ODL Input variable Product type variable Select a Component for c1 omponent BankingSystem finit omponent Centrale omponent Driver 1 omponent Driver2 omponent Database omponent Process 1 Width zoom Select a Component for c2 Enter boolean value omponent BankingSystem finiti omponent Centrale omponent Driver 1 omponent Driver2 omponent Database omponent Process 1 m 25 50 75 100 125 150 175 200 Abbildung 4 7 Eingabe eines Produkttyps Input variable Product type variable var Select a Component for c1 omponent BankingSystem finiti omponent Centrale omponent Driver1 omponent Process 1 omponent Process2 omponent Till1 omponent Conn
117. bt f r die F lle wo ein boolescher Term zu true oder false ausgewertet wird unver ndert Liefert ein Term als Ergebnis undef zur ck so h ngt die Vorgehensweise von dem aufrufenden Term ab 100 KAPITEL 6 VERBESSERUNGSM GLICHKEITEN NOT true false undef false true undef AND true false undef OR true false undef true true false undef true true true true false false false false false true false undef undef undef false undef undef true undef undef true false undef lt gt true false undef true true false undef true true false undef false true true true false false true undef undef true undef undef undef undef undef undef Tabelle 6 1 Wahrheitstabellen f r dreiwertige Logik e Logischer Operator Ist der aufrufende Term ein logischer Operator z B terml and term2 oder neg terml so wird zur Auswertung die dem Operator entsprechende Wahrheitstabelle aus der Tabelle 6 1 herangezogen Gleichheit Wird in einer Gleichheit expr2 genau einer der zu vergleichenden Ausdr cke zu undef ausgewertet so ist das Ergebnis der Gleichheit false weil das Ergebnis des jeweils anderen Ausdrucks ungleich undef und damit ungleich dem Ergebnis des ersten Ausdrucks ist Werden in einer Gleichheit beide Ausdr cke zu undef ausgewertet so ist auch das Ergebnis der Gleichheit undef weil f r zwei Ausdr cke mit undefinierten Er
118. cep tion abf ngt die erzeugt wurde als der Benutzer den Cancel Button im Eingabedialog bet tig te Eine UserBreakException bricht die Auswertung der ODL Abfrage ab und wird vom EditorDialog abgefangen der die Meldung aus dem Exception Objekt in der Statuszeile anzeigt ContextQuantifier BackwardStepException Interne Exception Klasse von ContextQuantifier Wenn der context Quantor eine NavigationEventException abf ngt die durch die Bet tigung des Previous Buttons im Eingabedialog abgesetzt wurde so wird eine BackwardStepException erzeugt die die Aus wertung des aktuellen context Quantors abbricht und vom vorherigen context Quantor ab gefangen wird auf diese Art wird ein R ckw rtsschritt ausgef hrt ContextQuantifier Die evaluate Methode wurde so erweitert dass Navigationsereignisse aus dem Eingabedialog verarbeitet werden k nnen Die NavigationEventException s werden abgefangen und in Abh ngigkeit davon ob es sich um einen Riickwartsschritt oder einen Abbruch handelt verschie dene Aktionen durchgef hrt Wir wollen uns nun die Implementierung der Dialogflusskontrolle in der ContextQuantifier Klasse n her ansehen Das folgende Code St ck enth lt eine kommentierte und um unwesentliche Details gek rzte evaluate Methode der ContextQuantifier Klasse public class ContextQuantifier extends Quantifier implements Term public TermResult evaluate Assignment freeVariables boolean wantedValue
119. chen so erzeugt dies eine Exception die die query Methode sofort queryDialog userInput Den Eingegebenen Wert aus dem und zur ckgeben return abbricht Eingabepanel auslesen Boolean queryDialog getQueryInputPanel getInput Wie man am Beispiel der oben aufgef hrten query Methode sehen kann spielen Query Klassen f r den Eingabedialog die Rolle des Erbauers GammaEtAl S 119 130 es ist die Aufgabe der query Methode einer Query Klasse alle Komponenten fiir den Eingabedialog zu erstellen und ihn fiir die Eingabe eines Werts des Datentyps zu konfigurieren fiir den die jeweilige Query Klasse zustandig ist Ein Klassendiagramm der Query Klassen befindet sich auf der Abbildung A 9 im Anhang A 5 2 3 Dialogflusskontrolle Wie bereits im Abschnitt 4 2 1 beschrieben kann der Benutzer zwischen den Eingabedialogen fiir verschiedene Variablen navigieren aus jedem Eingabedialog kann er durch Bet tigen des Previous Buttons zur Eingabe der vorherigen Variablen zur ckkehren und mit dem Cancel Button kann er die gesamte Auswertung einer ODL Abfrage abbrechen Die Dialogflusskontrolle wurde mithilfe des Except ion Mechanismus von Java implementiert 84 KAPITEL 5 IMPLEMENTIERUNG bei einem R ckw rtsschritt oder einem Abbruch im Eingabedialog wird eine Exception aus gel st die die aktuelle Eingabe unterbricht und die Kontrolle an den Aufrufer zur ckgibt Dieser entscheidet anhand
120. d radioButtonMouseClicked void radioButtonKeyTyped void setSelectedIndex void setSelected Value void setObject ToS ringFormatter void redisplay Values void ositei getCompositelnp setInputPanels getInputPanelsCount int 0 AbstractCompositeQueryInputPanel getInput Object tclearInput void QueryInputListener queryInputEventDispatched void getlnput Object clearInput void ifyInput boolean getlnputLabel String setInputLabel void addQueryInputListener void removeQueryInputListener void setMemberPanelLook void isMemberPanelLook boolean AbstractQueryInputPanel queryInputListenerList LinkedList queryInputPanelMemberLook boolean queryInputEventDispatchingEnabled boolcan AbstractQueryInputPanel addQueryInputListener void removeQueryInputListener void fireQueryInputEvent void setEnabledQueryInputEventDispatching void setMemberPanelLook void isMemberPanelLook boolean verifyInput boolean eryInputPanel Composite Value oid yInputPanel AbstractCompositeQueryInputPanel isEnabledQueryInputEventDispatching boolean SetTypeQueryInputPanel geiSetTypelnput SerValue setInputPanelAndValueDisplay void setSetValueDispl eerSerValueD isplay TextFieldQueryInputPanel TextFieldQueryInputPanel initComponents void inputFieldActionPerformed void getInput Object clearInput void
121. d In der aktuellen ODL Version findet dieser Aufruf im statischen Initialisierungsblock der Klasse quest odl editor gui EditorDialog statt QueryManager instance configure new DefaultBoolQuery 5 2 INTERAKTIVE BENUTZERSCHNITTSTELLE 81 ODL Datentyp query Methode im QueryManager Interface f r Query Klasse Boolean Boolean queryBool BoolQuery Integer Integer queryInteger IntegerQuery String String queryString StringQuery Entity Entity queryEntity EntityQuery IntroducedType Object queryIntroducedType IntroducedTypeQuery ProductType ProductValue queryProductType ProductTypeQuery RestrictedType Object queryRestrictedType RestrictedTypeQuery SetType SetValue querySetType SetTypeQuery Tabelle 5 13 quer y Methoden und Query Klassen f r verschiedene ODL Datentypen ew DefaultIntegerQuery ew DefaultStringQuery ew DefaultEntityQuery ty HE A ew DefaultIn troducedTypeQuery ew CompositePanelProductTypeOuery ew DefaultRestrictedTypeQuery ew DefaultSetTypeQuery Eine Benutzereingabe wird bei der Auswertungs eines cont ext Quantors angesto en Dieser ruft in der MetaType Instanz die den Datentyp des einzugebenden Werts beschreibt die Metho de query auf Diese Methode wendet sich ihrerseits an die dem Datentyp entsprechende query Methode in der Klasse QueryManager
122. d die der SelectorExpression Instanz mitge geben wird Das entsprechende Klassendiagramm findet sich auf der Abbildung A 3 im An hang F r die Kompilation von Selektorausdr cken sind im SableCCGenerator folgende Metho den zust ndig out ASelectorExpression outASelection outASelector Die Entscheidung welche der vier Selektorklassen in einem konkreten Fall zum Einsatz kommt wird in der Methoden out ASelectorExpression getroffen e Arithmetische Ausdr cke Im Zuge der Implementierung der arithmetischen Ausdr cke musste f r jede eingef hrte arith metische Operation eine Klasse erstellt werden die diese Operation ausf hrt Klasse Arithmetische Operation AdditionExpression Addition zweier ganzen Zahlen SubtractionExpression Subtraktion zweier ganzen Zahlen MultiplicationExpression Multiplikation zweier ganzen Zahlen Alle drei Operationen sind bin r sodass es nahelag eine gemeinsame abstrakte Oberklas se BinaryArithmeticExpression zu erstellen Sie erledigt alle Aufgaben einer allge meinen bin ren Operation darunter die Verwaltung der beiden Operanden und ruft in der evaluate Methode die das Ergebnis der Operation berechnen soll die abstrakte Metho de calculateArithmeticExpression auf Hier wird also das Entwurfsmuster Scha blonenmethode S 366 372 implementiert Um eine bin re arithmetische Ope 60 KAPITEL 5 IMPLEMENTIERUNG ration zu implementieren muss n
123. dass dem Benutzer eine M glichkeit zur Verf gung gestellt werden muss die Filterung zu deaktivieren beispielsweise durch eine Checkbox Filter last value die w hrend der Eingabe gesetzt oder gel scht werden kann Filterung aller Elemente eines eingeschr nkten Typs Eine Weiterentwicklung des Optimierungsvorschlags 3 besteht darin dass nicht nur der letzte sondern alle Elemente des Basistyps eines eingeschr nkten Typs vor und w hrend der Eingabe gefiltert werden Das Grundprinzip kann folgenderma en formuliert werden Ist ein Wert f r einen eingeschr nkten Typ einzugeben dessen Basistyp ein zusammen gesetzter Typ mit n Elementen ist so k nnen nach der Eingabe von n m Elementen lt die restlichen m Elemente so gefiltert werden dass nur Elemente zur Auswahl stehen die zusammen mit den bereits eingegebenen Werten f r die anderen n m Ele mente in mindestens einem Basistyp Tupel auftauchen das die Restriktionsbedingung erf llt Wir wollen die Idee f r einen Algorithmus beschreiben der diese Optimierung realisiert Vor dem ffnen des Eingabedialogs wird ber alle Instanzen des eingeschr nkten Typs ite riert F r jede solche Instanze d h f r jedes Basistyp Tupel das die Restriktionsbedingung erf llt werden die Elemente x x in Hashtabellen Hj H eingetragen wenn ein Element x bereits in der Tabelle H vorhanden ist muss es nicht erneut eingetragen werden Nach der Iterati
124. de Klassendiagramme sind enthalten Abbildung A 1 Abbildung A 2 Abbildung A 3 Abbildung A A Abbildung A 3 Abbildung Abbildung A 7 Abbildung A 8 Abbildung A 9 Abbildung A 10 Abbildung A 11 Abbildung A 12 Abbildung A 13 Abbildung A 14 Abbildung A 15 Abbildung A 16 Package ques t odl eval ua tio n Ausgangspackage f r Klassen zur Auswertung Package ques SableCCGenerator f r ODL Package ques Expression Package ques Package ques Package ques TermResult Package ques Kollektionen und Iteratoren Package ques Package ques Query Klassen Package ques QueryInput Package ques QueryDialo Package ques t odl eval Hierarchie t odl eval e t odl eval g Hierarchie t odl eval t odl eval Term Hierarchie t odl eval MetaType Hierarchie t odl eval t odl eval Lua ua ua ua Lua Lua ua t odl evalua Panel Hierarchie ua t odl eval ua tio tio tio tio tio tio tio tio tio ETO n m n n m n m und Exception Klassen Llections n m n m odel model odel odel von ODL Abfragen n generator Abfragen sowie von ihm benutzte Klassen odel analysis EvalTreeVisitor Hierarchie und das Interface EvalTreeNode n model query n model query dialog n model query dialog odel cellRenderers format
125. definedSelectorException UnsupportedConstructException UndefinedVariableException UndefinedT ypeException UndefinedRelationException SableCCGenerator QUESTModelMapper ParserException LexerException IncompatibleTypesException GeneratorException Generator AmbiguityException MultiplicationExpression SubtractionExpression Binary ArithmeticExpression AdditionExpression SmallerExpression BiggerExpression ComparisonExpression SetSizeExpression ProductValue CompositeValue EmptySetTest AssociatedEntitiesSelector AssociatedEntitySelector AttributeSelector CompositeTypeSelector MetaRestrictedType NamedPredicateTerm InvalidArgumentsListException NamedPredicate RelationTerm Quantifier Junction MetalntroducedType SetValue AbstractMetaCompositeType MetaSetType AbstractMetaType SelectorExpression NoSuchSelectorException DuplicateldentifierException MetaCompositeType InvalidProductTypeException MetaProductType Selector UniversalQuantifier UniversalExistentialQuantifier Variable UnboundVariableException TermResult Term SimpleLinkedList RelationTestTerm RelationRemovalTerm RelationRemoval RelationModification RelationAdditionTerm RelationAddition Relation NoSuchRelationException NoSuchConstructorException UndefinedModelElementException NewQuantifier Negation MetaType MetaString Metalnteger MetaEntity ReflectionException InstanceRetrievalException
126. den bergangspunkt zwischen dem ODL Auswertungssys tem und dem ODL Query Subsystem Das hei t insbesondere dass ODL Auswertungsklassen keine anderen Klassen aus dem Query Subsystem au er dem QueryManager benutzen Diese modula re Aufteilung erm glicht es beliebige nderungen am Query Subsystem vorzunehmen bis hin zur kompletten Ersetzung durch ein anderes Query Subsystem ohne das ODL Auswertungssystem mo difizieren zu m ssen Die einzige Bedingung dabei ist dass das Interface der QueryManager Klasse nicht ver ndert wird Der QueryManager ist Singleton Klasse die das Strategie Entwurfsmuster implementiert f r jeden ODL Datentyp stellt sie eine query Methode zur Verf gung welche die erforderliche Benutzereingabe von einer dem ODL Datentyp entsprechenden Query Klasse ausf hren l sst Die Tabelle 5 13 f hrt f r jeden ODL Datentyp die entsprechende quer y Methode der QueryMana ger Klasse und den Namen des Interfaces das von Query Klassen implementiert werden muss die Benutzereingaben f r diesen Datentyp realisieren diese Klassen dienen als Strategie Komponenten f r den QueryManager und werden von seinen quer y Methoden genutzt Die Parameterlisten der query Methoden wurden aufgrund ihrer L nge und hnlichkeit weggelassen Bei der Initialisierung wird der Quer yManager mit Query Klassen als Strategie Objekten konfigu riert indem die configure Methode mit den zu benutzenden Query Klassen als Parametern aufge rufen wir
127. den Dies kann f r gro e Basistypen insbesondere f r Produkttypen l n gere Zeit in Anspruch nehmen sodass der Benutzer warten muss bis der Eingabedialog erscheint e Wenn viele Basistypwerte die Restriktionsbedingung erf llen kann die Auflistung sehr lang werden mehrere Zehntausend Eintr ge sind durchaus denkbar Bereits die relativ einfache ODL Abfrage context ports p pl Port p2 Port neg p pl p p2 true bei der zwei verschiedene Ports ausgew hlt werden m ssen kann einige tausend Eintr ge in der Auflistung erzeugen Dies erschwert zum Einen die Suche nach dem gew nschten Eintrag und kann zum Anderen die Ressourcen des verwendeten Rechners berstrapazieren eine Abfrage bei der nicht eines sondern drei Paare verschiedener Ports auszuw hlen sind w rde eine Liste aus mehreren Milliarden Eintr gen erfordern deren Anzeige nicht m glich sein d rfte 6 3 VERBESSERUNGEN AN DER BENUTZERSCHNITTSTELLE 115 3 stricted type variable components Component Centrale Component Database Component Till1 Component Centrale Component Database Component Till2 Component Driver 1 Component Centrale Component Database Component Driver 1 Component Centrale Component Process1 Component Driver 1 Component Centrale Component Process Component Driver 1 Component Driver 1 Component Component Driver 1 Component Driver2 Component Component Driver 1 Compone
128. den sind in ODL Abfragen auch die Operatoren gr er gleich und kleiner gleich m glich Dies stellt kein Problem dar weil ein Vergleich a gt b quivalent zu lt b und a lt b quivalent zu gt b ist sodass die Auswertungsklassen SmallerExpressionundBig gerExpression kombiniert mit der Auswertungsklasse f r die Negation auch f r die Aus Trotz der etwas irref hrenden Bennenung ist EqualExpression eine Unterklasse von Term 5 1 ERWEITERUNG DES SPRACHUMFANGS 61 wertung der Operatoren gr er gleich und kleiner gleich eingesetzt werden k nnen Im SableCCGenerator sind folgende Methoden f r die Verarbeitung von Gleichheits und Vergleichstermen zust ndig Methode Aufgabe outAEqualExpression Erstellung eines Gleichheitsterms outABiggerSmallerExpression Erstellung eines Vergleichsterms outABiggerComparisonOperator Erkennung eines Gr er Operators outABiggerOrEqualComparison Erkennung eines Gr er Gleich Operators Operator outASmallerComparisonOperator Erkennung eines Kleiner Operators outASmallerOrEqualComparison Erkennung eines Kleiner Gleich Operators Operator Erweiterte Syntax des context Quantors F r die optionalen Parameter eines context Quantors zurzeit ist es nur der Hinweistext der im Eingabedialog angezeigt wird musste die ODL Auswertungsklasse ContextQuan tifier der SableCCGenerator und das Interface M
129. der Assoziationen von Entit ten modifiziert werden k nnen Diese Einschr nkungen m ssen in der Grammatik dadurch implementiert werden dass die Produktionen f r CCL Propositionen weitgehend parallel zu den Produktionen f r ODL Propositionen aufgebaut werden wobei sich die Einschr nkungen darin niederschlagen dass bestimmte Ableitungen im CCL Zweig nicht vorhanden sind Wir notieren die Produktionsregeln f r ODL Propositionen und CCL Propositionen in zwei Spalten nebeneinander damit die hnlichkeiten und die Unterschiede zwischen den beiden Zweigen leichter zu sehen sind Produktionen f r ODL Propositionen Produktionen f r CCL Propositionen proposition ccl proposition unary proposition ccl unary proposition proposition and ccl proposition and unary proposition ccl unary proposition proposition or ccl proposition or unary proposition ccl unary proposition proposition implies ccl proposition implies unary proposition ccl unary proposition proposition equiv ccl proposition equiv unary proposition ccl unary proposition unary proposition unary proposition neg unary proposition neg ccl unary proposition named predicate call named predicate call term ccl term quantifier ccl quantifier variable definition variable definition unary proposition ccl unary proposition new quantifier model element variable definition unary proposition 5 1 ERWEITERU
130. dies betrifft vor allem Sonderzeichen die in einer SableCC Grammatik in einem speziellen Abschnitt deklariert und sp ter durch die ihnen zugewiesenen Schl sselw rter ersetzt werden m ssen Beispielsweise werden wir die Produktion restricted_type_definition l_brace variable colon type v_line ccl_proposition r_brace in der leichter zu lesenden Form restricted_type_definition variable type ccl_proposition notieren Im Anhang C findet sich die vollst ndige ODL Grammatik in der SableCC Notation Nun wollen wir die Grammatik Erweiterungen im Einzelnen er rtern e Typsystem Die erste Erweiterung der ODL Grammatik stellt die Einf hrung neuer Datentypen dar dies sind ProductType RestrictedType SetType sowie der Sondertyp IntroducedType der den Zugriff auf Elemente einer Menge realisiert Die alten Produktionen f r Datentypen erzeugten die vier Typen Boolean Integer String und Entity in der Grammatik model element type bool type boolean int type ant string type String type basic type model element type 48 KAPITEL 5 IMPLEMENTIERUNG basic_type bool_type int_type string_type model_element_type identifier Die neuen Produktionen spiegeln das komplizierter gewordene Typensystem wider Als Erstes wird die Gruppe der un ren Typen herausgesondert die Grundtypen und Entit ten enth lt also die Typen deren Instanzen aus genau einem Wert bestehen unary_type bas
131. dsiqsonqeA z12onpoaqnuo uoduro ejds qsone AA numas 1 npoxd3u uoduio2 ed qson a 93npoid1u uoduuoOKeldstds nt2ABurnSi 8 aaonpoxqnuouoduro dsiqsanye 120npoaquiouoduro e dstqsonqe maen Lab amp roiovjproneunoj3 1 1501129 401934 aaonpoxgiuauoduro ejdsrqsen eA CejdsiqsanpeA oo gas EEGEN 8 EE EIERE U suns jq aov 8 410390 4 19 pmu J8u14 S0 12990 112 095 DE EELER EE ELE IE GAO EE Sa query factory model Package quest odl evaluation Abbildung A 16 Input Verifier ObjectToStringFormatterFactory und weitere Klassen Anhang ODL Grammatik In diesem Anhang befindet sich die formale ODL Grammatik Sie stellt eine Erweiterung der in Sch01 S 16 19 vorgestellten ODL Grammatik dar Bemerkungen e Terminale Symbole sind fett gedruckt e Terminale Symbole die von der lexikalischen Analyse zusammengefasst werden sind kursiv gedruckt z B ident bool constant e Alle anderen Symbole sind nicht terminal e Diese Grammatik wurde mit Hinblick auf die Lesbarkeit definiert F r eine technische Imple mentierung k nnten andere Produktionsregeln von Vorteil
132. dxguonvordninjyoseo4 Ploa uorssasdxquonsenqngaseo proa uorsso1dxzquorrpp y 529 pIoA UOISSoJdxqozISIogosto pioAsaLiesAdurgoseo4 proA uonounfsiqosea OU et ET PIOA UP SUO JASLI pios uonounfuogaseo proa uua juvisuoj oogasea PIOAINOIS 12 40110128 pros upas 1o qo un 8 pto opquiusvH oqqu ino lq 1useH qe Lu ptoa Qddp poN22411 DAST aoe um pioazad amp gpoonpouu pia 522 poa adk pagmayasva Ploa ads PION Aug pi2 pposp24 Poa jyospo pios BAUJA 255 pioaoogpiopyosva proa 502 pioszuoyjoy uou pioss yospa4 D104 40122 2 S S2HIWd2IDI205S V2SD24 205 50 40122 9 21H QHII 250 pioa 40122 agad amp oisoduto 255 pioa uorssaadvuonvorjdupnyospa 1 4 252 DioAzuoissoadxzquorpp yospa Dioazuoisso4dxg 221512 52502 4012212525524 DID A2SD24 loa Jupjsuo aspa Ion 15 21d 42 putgospa pioa uoissoadxg o8 81998094 pioa uorssaadvg pnbposp24 pioazisa piog amp idurqospa4 ploA uL42 21D21p2 4d PUD Nospa 1350 UOLiD 22SD2 pioazuua uorpp yuor ogosva Ptoa uoBp8 N sp
133. e des Tupel das die gesamte Restriktionsbedingung erf llt auch die Restriktionsbedingung von 123 erf llten m sste diese Funktionalit t w re f r Eingabedialoge f r eingeschr nkte Typen n tzlich da der Benutzer auf diese Weise fr her informiert werden k nnte wenn die von ihm eingegebenen Werte die Restriktionsbedingung nicht erf llen Zum Schluss wollen wir noch einige Weiterentwicklungsm glichkeiten f r die beschriebene Op timierung nennen e Anwendung eines Kostenmodells bei der Optimierung Wie bei der Beschreibung des Algorithmus im Schritt 5b auf der Seite 107 erw hnt kann f r Situationen in denen es mehrere M glichkeiten gibt Elemente des Basistyps des zu optimie renden eingeschr nkten Typs mit Pr dikaten aus dem Restriktionsterm zu gruppieren eine Be rechnung der Kosten f r die Auswertung jeder Gruppierungsm glichkeit vorgenommen werden und dann diejenige Optimierung durchgef hrt werden die zu den geringsten Auswertungskos ten f hrt e Optimierung von Quantortermen Die vorgestellte Optimierung kann auf von Quantoren gebundene Terme ausgedehnt werden indem der Typ der vom Quantor gebundenen Variablen zu einem eingeschr nkten Typ um gewandelt wird der als Restriktionsterm den Quantorenterm oder einige Teilterme aus ihm enth lt Anschlie end kann der Optimierungsalgorithmus auf den Restriktionsterm angewandt werden Betrachten wir die Beispielabfrage exists ports pl Port p2 Port port
134. e Ar gumente notieren weil diese keinen Einfluss auf die Umformungen haben pi AP2AP3 p4 1 p pa ps V in pa ps V ps V pe 6 2 OPTIMIERUNG DER ABFRAGEAUSWERTUNG 109 2 Eliminierung von Disjunktionen mithilfe von DeMorgans Gesetz m pa p3 V pa ps V aps V p pa p3 V ps pr Lin pa pa V ps pe pr m pa pa ps pe A pr P1 p24 p3 par ps po 3 Uberpriifung dass keine ungeklammerten OR Verkniipfungen vorkommen Im Term p2 A p3 p4 ps po gibt es keine OR Verkn pfungen sodass der Algorithmus fortgesetzt werden kann 4 Aufspaltung des Restriktionsterms in Teilterme Wir verteilen die durch das logische AND verkniipften Teilterme des Restriktionsterms auf die Mengen Mi Ms Mi pol p2 xa p3 1 2 2 xa Der 1 5 Ma leer da keine Pr dikate mit 4 Argumenten vorhanden Ms leer da keine Pr dikate mit 5 Argumenten vorhanden 5 Teilterme mit den von ihnen verwendeten Elementtypen zu neuen Elementtypen gruppieren a Zun chst werden die einstelligen Pr dikate p und p gt aus mit ihren Argumenten zusam mengef hrt var x1 x2 x3 x4 T4 xs T5 pi xi A p2 x4 p3 x1 pa xo
135. e Buttons werden verwendet e Previous Button falls vor der aktuellen Variablen bereits andere eingegeben wurden kann der Benutzer mithilfe dieses Buttons zur Eingabe der vorherigen Variablen zur ckkehren hierbei geht der Variablenwert aus dem aktuellen Eingabedialog verloren Wurden bisher keine anderen Variablen eingegeben so ist der Button deaktiviert e Cancel Button dieser Button bricht die Variableneingabe und damit die Auswertung der gesamten ODL Abfrage ab e Next Button mit diesem Button schlie t der Benutzer die Eingabe einer Variablen ab Falls weitere Variablen einzugeben sind so wird zu ihrer Eingabe bergegangen Dieser Button ist nur dann aktiviert wenn der Benutzer einen zul ssigen Wert f r die aktuelle Variable eingegeben hat Hierbei wird ein Wert als zul ssig betrachtet wenn er einen g ltigen Wert f r den abgefragten Datentyp darstellt bei eingeschr nkten Typen muss der eingegebene Wert auch die Restriktionsbedingung erf llen Optional wird in der Navigationsleiste ein Hinweistext angezeigt der als optionaler Parameter dem context Quantor bergeben werden kann Die Abfrage context hint Enter a string str String str ist quivalent zu der Abfrage context str String str abc zeigt aber zus tzlich den Hinweis Enter a string im Eingabedialog an Abb 4 2 m m abc 3 Werteanzeige Der Werteanzeige Bereich dient dazu die Belegungen bereits bekannter Variablen anzuzeig
136. e ausgew hlt werden muss Die Auswahl von Modellelementen anderer Metamodell typen z B Port Channel usw gestaltet sich analog input variabie _____ xi Enter boolean value for b Cancel Next gt gt Abbildung 4 5 Eingabe eines Boolean Werts ber Radiobuttons 4 2 3 Eingabe von Produktwerten F r die Eingabe eines Produktwerts werden im Eingabedialog die Eingabepanels f r alle Elemente des entsprechenden Produkttyps nebeneinander angezeigt Betrachten wir als Beispiel die Abfrage context var 1 c2 Component b Boolean true 4 9 Der von dieser Abfrage ge ffnete Eingabedialog Abb 4 7 enth lt im Eingabebereich je ein Einga bepanel f r jedes Element des Produkttyps Da ein Produkttyp beliebig viele Elemente enthalten darf kann auch der Eingabebereich bei einem Produkttyp beliebig breit werden Deshalb wird der Ein gabebereich mit Scrollbalken und mit einem Zoomslider ausgestatten ber den der Ma stab f r die Breite des Eingabebereichs festgelegt werden kann Wird der Zoomslider nicht mehr ben tigt kann er versteckt werden Abb 4 8 daf r muss der Benutzer den rechten Button der Splittinglinie zwischen dem Zoomslider und dem Eingabebereich bet tigen 4 2 INTERAKTIVE BENUTZERSCHNITTSTELLE 31 input variabie x Select a Component for comp2 omponent BankingSystem finite version DTDs of bank omponent Centrale omponent Driver 1 omponent Dr
137. e heraus die dem Datentyp entsprechende Methode der QueryManager Klasse aufgerufen wird f r den Produkttyp heift sie queryProduct Type und liefert als R ckgabewert eine ProductValue Instanz die den vom Benutzer ein gegebenen Wert enth lt Nachdem das ODL Query Subsystem ausf hrlich im Abschnitt 5 2 be schrieben wurde verzichten wir hier auf eine ausf hrliche Beschreibung der Implementierung von Benutzereingaben und geben nur die Klassen an die bei der Einf hrung von Produkttypen im ODL Query Subsystem erstellt werden mussten 5 3 VORBEREITUNG WEITERGEHENDER NDERUNGEN 89 ProductTypeQuery CompositePanelProductTypeQuery Interface und konkrete Implementierung einer Query Klasse f r Produkttypen die als Strategie Objekte vom QueryManager verwendet werden um Benutzereingaben aus zuf hren CompositeQueryInputPanel DefaultCompositeQueryInputPanel Interface und Implementierung eines Eingabepanels f r Produkttypen Die Erstellung neu er Eingabepanels f r einen Typ ist nur dann notwendig wenn keines der bereits vorhan denen Eingabepanels die Eingabe von Werten dieses Typs bernehmen kann f r Produkt typen ist das der Fall ProductTypeQueryInputPanelFactory DefaultProductTypeQueryInputPanelFactory Interface und Implementierung einer Fabrik f r die Erstellung und Konfiguration von Ein gabepanels f r die Eingabe von Produkttypen CompositeQueryInputPanelProducer Producer Klasse f r die Erstellung von Eingabepan
138. e von Benut zereingaben m glich sein sollen eine hnlich flexible Navigation ist dementsprechend schwieri ger zu implementieren In der aktuellen Version wird der Durchlauf durch einen ODL Auswertungsbaum ber Aufrufe von Methoden implementiert der Auswertungsbaum ist in gewissem Sinne im Java Callstack versteckt und f r den expliziten Zugriff nicht ohne Weiteres zug nglich die einzige Zugriffsm g lichkeit stellen Exceptions zum Abbruch einer momentan ausgef hrten Methode dar dieser Me chanismus wird in der aktuellen Implementierung f r die R ckkehr zu vorherigen Eingabedialogen benutzt Um die Steuerung des Dialogflusses durch Kontrollklassen zu erm glichen m sste die Steuerung 6 4 KONZEPT EINER FLEXIBLEN DIALOGFLUSSKONTROLLE 121 des Durchlaufs durch einen ODL Auswertungsbaum auf die Kontrollklasse bertragen werden zumindest f r die Auswertung von context Quantoren Der jetztige Auswertungsmechanismus der komplett ber den Java Callstack l uft und keine Eingriffspunkte w hrend der Auswertung bie tete m sste insofern aufgebrochen werden dass die evaluate Methode der ContextQuan tifier Klasse die Kontrolle nicht direkt an den Eingabedialog sondern an die Kontrollklasse bergibt Die Kontrollklasse f hrt die Eingabe aus indem sie den jeweiligen Eingabedialog startet und speichert den eingegebenen Wert in einer lokalen Hashtabelle zusammen mit einer Referenz auf den aufrufenden context Quantor ab Ansc
139. e2 Date Port Display1 InfoMsg Abbildung 5 6 ListQueryInputPanel Enter boolean value for boot Abbildung 5 7 RadioButtonsQueryInputPanel Zusammengesetzte Eingabepanels Die dritte Gruppe von QueryInputPanel Klassen ist die Gruppe der Kompositum Eingabepanels Die abstrakte Ausgangsklasse hier ist Compo siteQueryInputPanel sie definiert die Methoden die das Verhalten von Composite QueryInputPanel als Kompositum GammaEtAl S 239 253 f r die QueryInput Panel Hierarchie festlegen So wird ber die Methode set InputPanels QueryIn putPanel inputPanels MetaCompositeType compositeType spezifi ziert f r welchen zusammengesetzten Typ Werte einzugeben sind und in welchen Eingabe panels es erfolgen soll Die Methode CompositeValue getCompositeInput gibt den vom Benutzer eingegebenen Wert als CompositeValue Instanz zur ck sie ist die Ent sprechung zu der Methode Object getInput inQueryInputPanel Die abstrakte Klasse AbstractCompositeQueryInputPanel implementiert einige der Methoden von CompositeQueryInputPanel und stellt die Ausgangsklasse f r konkrete Implementierungen eines Eingabepanels f r zusammengesetzte Typen dar Die Klasse DefaultCompositeQueryInputPanel ist eine konkrete Implementierung die alle Eingabepanels f r die einzelnen Elemente des einzugebenden zusammengesetzten Typs nebeneinander anzeigt Abb 5 8 Damit der Benutzer die Breite des Eingabebereichs skalieren kann wird unterh
140. ection1 _ Enter boolean value for Select a Component for 2 omponent BankingSystem finit omponent Centrale Z omponent Driver1 omponent Process1 omponent Process2 omponent Till1 omponent Connection 1 8 Abbildung 4 8 Eingabe eines Produkttyps Zoomslider minimiert 4 2 INTERAKTIVE BENUTZERSCHNITTSTELLE 33 e Mengenelemente der obere Teil des Mengen Eingabepanels zeigt die bisher eingegebenen Mengenelemente und den Button Remove mit dem Mengenelemente aus der Menge wieder entfernt werden k nnen Neben der im Dialog auf der Abbildung 4 9 verwendeten Anzeige der Mengenelemente in ei ner Liste kann f r die Anzeige der Mengenelemente auch eine Tabelle benutzt werden Abb 4 10 Letztere ist insbesondere f r die Eingabe von Produkttyp Mengen von Vorteil da jedes Produkttyp Element in einer separaten Tabellenspalte angezeigt wird Die beiden Teile des Mengen Eingabebereichs werden durch eine Splittinglinie getrennt mit de ren Hilfe das Gr enverh ltnis zwischen den beiden Teilen jederzeit ver ndert werden kann oder auch einer der Teile zeitweise versteckt werden kann um eine bessere bersicht ber den jeweils anderen Teil zu bekommen 4 2 6 Eingabe von eingef hrten Typen Als eingef hrte Typen bezeichnen wir Ausdr cke die zwar keinen echten Typ darstellen wohl aber wie jeder echte Typ eine Iteration ber ihre Instanzen zulassen und in allen ODL Sprachkonstrukten au er dem
141. efault CompositeQueryInputPanel Panels f r die Eingabe von Mengen DefaultSetTypeQueryInputPanel Wir beschreiben jetzt den Aufbau und die Funktion jeder Gruppe Texteingabepanels Die Klasse TextFieldQueryInputPanel realisiert ein einfaches Eingabepanel bei dem der Variablenwert in einem Textfeld eingegeben werden kann Abbil dung 5 5 ber dem Textfeld befindet sich eine berschrift die ber die in QueryInputPa nel definierte Methode set InputLabel String label spezifiziert werden kann Enter string value for string Abbildung 5 5 Text FieldQueryInputPanel Des Weiteren geh ren zu dieser Gruppe die Klassen IntegerTextFieldQueryInput Panel und BooleanTextFieldQueryInputPanel die von der Klasse TextField QueryInputPanel erben und nur die Methode get Input berschreiben Der Unter schied zu zwischen diesen beiden Klassen und TextFieldQueryInputPanel besteht dar in dass die Methode get Input bei diesen Klassen die Eingabe nicht als St ring Instanz sondern als Integer bzw Boolean Instanz zur ckgibt daf r wird der eingegebene Text zu einer ganzen Zahl bzw zu einem booleschen Wert konvertiert Diese Eingabepanels erm g lichen es Int Werte und Boolean Werte in einem Textfeld einzugeben Auswahlpanels Die n chste Gruppe der Eingabepanels bilden SelectionQueryInput Panel und seine Unterklassen Sie dienen zur Eingabe von Werten die aus einer endlichen Wertekollektion ausgew hlt werden k n
142. el p newName Kapitel 5 Implementierung In diesem Kapitel wird technische Implementierung der Erweiterungen des ODL Systems beschrie ben die im Kapitel 4 vorgestellt wurden Wir beschreiben die Implementierung der Erweiterung des ODL Sprachumfangs im Abschnitt 5 1 und die Realisierung der interaktiven Schnittstelle f r Benut zerabfragen im Abschnitt 5 2 Zun chst wollen wir auf den allgemeinen Aufbau des ODL Systems eingehen der schematisch auf der Abbildung 5 1 gezeigt wird eine ausf hrliche Beschreibung der ODL Systemarchitektur fin det sich in Pasch S 15 40 Output result Read Modify access Map entities and Perform user querie QUEST relations to QUEST for context quan meta model tifiers Model x x Interf QUEST ODL ead access Model User Query Subsystem Abbildung 5 1 Schematische Darstellung des ODL Systems Die Komponenten ODL Costraint Editor ODL Costraint Generator und ODL Costraint Evaluator bilden den Hauptkreislauf des ODL Systems eine ODL Ab frage wird im Editor erstellt dann wird sie vom Generator zu einer internen Darstellung kompiliert danach ausgewertet und schlie lich wird das Ergebnis im Editor ausgegeben Der ODL Costraint Generator greift bei Bedarf auf den QUEST Model Mapper zu um Entit ten und Relationen in ODL auf Metamodell Elemente sowie ihre Attrib
143. els f r Produktypen die von De faultProductTypeQueryInputPanelFactory benutzt wird CompositePanellInputVerifier Ein InputVerifier f r CompositeQueryInputPanel Instanzen der berpr ft ob der vom Benutzer eingegebene Wert ein zul ssiger Produktwert ist d h ob f r alle Elemente des Produkttyps ein zul ssiger Wert eingegeben wurde Neben der Erstellung neuer Klassen f r die Eingabe von Werten des neuen Typs m ssen fol gende Klassen erg nzt werden QueryManager F r den neuen Typ wird die queryProductType Methode eingef gt welche die Be nutzereingabe f r einen Produkttyp startet QueryDialogManager Hier m ssen die Konfigurationsmethoden getProductTypeQueryDialog und setProductTypeQueryDialog erstellt werden ber die gesetzt und gelesen wird welcher Eingabedialog f r Benutzereingaben des Produkttyps verwendet werden soll QueryConfigurationDialog Der Konfigurationsdialog f r Benutzereingaben muss um die Konfigurationsm glichkei ten f r den neuen Datentyp erg nzt werden Mehr dazu findet sich im Quellcode der QueryConfigurationDialog Klasse QueryFactoryManager Hier m ssen die Konfigurationsmethoden getProductTypeQueryInputPanel Factory und setProductTypeQueryInputPanelFactory hinzugef gt wer den ber die gesetzt und gelesen wird welche Eingabepanel Fabrik f r die Erstellung von Eingabepanels f r Produkttypen benutzt werden soll QueryInputPanelProducerManager ber die hinzugef gten Methode
144. en Selektoren Zugriff auf Elemente von Produkttypen sowie auf Attribute und Assoziationen von Modellelementen Eingeschr nkte Typen Restriktion eines Basistyps enth lt nur diejenigen Werte des Basistyps die eine Restriktionsbedingung erf llten Mengen Mengenvariablen die Kollektionen von Werten des Basis typs der Menge darstellen M glichkeit der Iteration ber die Elemente einer Menge Benamte Pr dikate Deklaration von CCL Propositionen die sp ter aus anderen ODL Abfragen aufgerufen werden k nnen Vergleiche Vergleichsoperatoren f r Zahlen und Strings Arithmetische Operationen Addition Subtraktion und Multiplikation von Zahlen Mengenoperationen Operationen isEmpty und size auf Mengen Erweiterte Syntax des context F r einen context Quantor kann optional ein Hinweis Quantors text f r den Eingabedialog spezifiziert werden Tabelle 4 1 Erweiterung des Sprachumfangs von ODL 4 2 Interaktive Benutzerschnittstelle Eine allgemeine Beschreibung des ODL Editors ist in Pasch S 41 46 gegeben Deshalb werden wir den Schwerpunkt dieses Abschnitt auf die die Neuerungen legen die sich im Wesentlichen auf die implementierte Benutzerschnittstelle zu Eingabe von Variablenwerten w hrend einer ODL Abfrage beziehen Eine ODL Abfrage bedarf w hrend der Auswertung keiner Benutzerinteraktion solange sie kei ne context Quantoren enth lt Ein context Quantor startet eine Benutzereeingabe f r die vom
145. en da mit der Benutzer informiert ist in welchem Kontext der Wert f r die aktuelle Variable einzugeben ist Angezeigt werden die Werte von Variablen die von vorhergehenden context Quantoren gebunden werden und deshalb bereits eingegeben wurden sowie Werte von Variablen die von vorhergehenden orall Quantoren gebunden werden 28 KAPITEL 4 ERWEITERUNG VON ODL Die Abfrage context strl String context str2 String true zeigt im Eingabe dialog f r die Variable str2 im Werteanzeige Bereich den vorher eingegebenen Wert abc f r str1 Abb 4 3 F r die Werteanzeige kann zurzeit entweder ein Textbereich Abb 4 3 oder eine Tabelle Abb 4 6 eingesetzt werden auf die entsprechende Einstellung werden wir im Abschnitt 4 2 7 eingehen rr X Enter string value for str Navigationsleiste lt Previous Cancel Next Eingabebereich Abbildung 4 1 Eingabedialog LI xi Enter string value for str labcal lt lt Previous Cancel Next gt gt Hint Enter a string Abbildung 4 2 Eingabedialog mit Hinweistext Um die Eingabe eines Werts abzuschlie en kann der Benutzer entweder den Next Button bet tigen oder auch die Eingabe Taste im Eingabepanel dr cken Bei der Auswahl eines Werts aus einer Liste ist auch die Best tigung ber einen Doppelklick auf den ausgew hlten Wert m glich Neben dem bereits vorgestellen Eingabed
146. en verwendete Klassen Die Fabrikklassen erstellen Instanzen von QueryInputPanel ValuesDisplayComponent SetValueDisplay undObjectToStringFormatter Eine Hierarchie von Fabrikklassen beginnt mit einem Interface das als Abstrakte Fabrik agiert und eine Fabrikmethode definiert GammaEtAl S 107 118 und 131 143 Die Fabrikmethode wird von konkreten Fabriken implementiert sie stellen Instanzen der ihnen zugeordneten Klas sen aus den Packages quest odl evaluation model query dialog und quest odl evaluation model cellRenderers formatters her und geben diese zur ck F r jede Gruppe von Fabrikklassen gibt es eine Manager Klasse die mit Fabriken als Strate gie Objekten konfiguriert wird und diese anderen Fabriken sowie Query Klassen aus dem Package quest odl evaluation model query zur Verf gung stellt Die Klassen des factory Packages k nnen in unten aufgef hrte Gruppen unterteilt werden Interfaces und abstrakte Klassen werden kursiv gesetzt Interfaces werden zus tzlich mit dem Wort Interface gekennzeichnet 76 KAPITEL 5 IMPLEMENTIERUNG e QueryInputPanel Produzenten In diese Gruppe geh ren Klassen die unkonfigurierte Instanzen von Eingabepanels herstellen f r jede konkrete Implementierung von QueryInputPanel gibt es entprechende Pro ducer Klasse die Instanzen dieses Eingabepanels herstellt Die Producer Klassen sind QueryInputPanelProducer Interface TextFieldOueryInputPanelProducer BooleanT
147. engruppen im Einzelnen besprechen Package quest odl evaluation model query dialog Die meisten Klassen im dialog Package lassen sich in drei gr ere Gruppen unterteilen die unten aufgef hrt werden In jeder Gruppe werden in der ersten Zeile der Klassenaufz hlung abstrakte Klas sen aufgef hrt die das Interface der Hierarchie definieren Ihnen folgen Unterklassen und eventuell weitere benutzte Klassen Interfaces und abstrakte Klassen werden kursiv gesetzt wobei Interfaces zus tzlich mit dem Wort Interface gekennzeichnet werden e Eingabedialog Dialogfenster f r Benutzereingaben Klassen QueryDialog Interface AbstractQueryDialog DefaultQueryDialog SplitPanelQueryDialog QueryDialogManager Eingabepanel Eingabebereiche f r verschiedene ODL Datentypen die in Eingabedialogen zur Eingabe des abgefragten Variablenwerts benutzt werden F r einige Datentypen sind mehrere unterschiedli che Eingabebereiche vorhanden Klassen QueryInputPanel Interface AbstractQueryInputPanel TextFieldQueryInputPanel IntegerTextFieldOueryInputPanel BooleanTextFieldOueryInputPanel SelectionQueryInputPanel Interface AbstractSelectionQueryInputPanel ListQueryInputPanel RadioButtonsQueryInputPanel CompositeQueryInputPanel Interface AbstractCompositeQueryInputPanel DefaultCompositeQueryInputPanel SetTypeQueryInputPanel Interface AbstractSetTypeQueryInputPanel DefaultSetTypeQueryInputPanel Quer
148. er Typsubstitution erreicht werden x1 x1 Typel P x1 x2 Type2 1 p x2 6 4 Wir wollen den Zeitgewinn durch die Optimierung berechnen Nehmen wir an dass die Restrikti onsbedingung P die Zeit t und die Restriktionsbedingung die Zeit 1 zur Auswertung ben tigt Ferner sei M Type1 und Type2 Au erdem seien f und 12 jeweils die Zeiten die f r das Holen einer Instanz des Typs 1 bzw Type2 ben tigt werden Schlie lich sei die An zahl der Instanzen von Typel welche die Bedingung P erf llen es gilt nat rlich Mi lt M und oft sogar lt lt M Dann brauchen wir folgende Zeiten f r die Iteration ber alle Instanzen des obigen eingeschr nkten Typs Nicht optimierte Formulierung Ti tj Mj 1 x M x Mo 5 1 x M M5 Optimierte Formulierung ti x M 1 x M to xM Mo Der Zeitgewinn bei der optimierten Version gegen ber der nicht optimierten Version betr gt hier T T ty Mi Mo 1 t2 1 Mi Mo Die Einsparung kommt dadurch zustande dass die Bedingung P nur M mal statt M x M mal ausge wertet wird und das Holen eines Werts von Type2 und die anschlie ende Berechnung von Q nicht mehr x M mal sondern stattfindet Der Zeitgewinn ist also umso gr er je weniger Instanzen von Typel die Bedingung P erf llen d h je st rker P die Instanzen von 1 filtert Die beschriebene Optimieru
149. er f r Selektionsereignisse anmeldet Die Methode java awt Component getDisplayComponent erf llt eine Funktion welche an die von getListCellRendererComponent im Interface javax swing ListCellRenderer angelehnt ist sie gibt eine Komponente zur ck die f r die Darstel lung der in displayValues bergebenen Werte zust ndig ist Bei SetValueDisplay handelt es sich also um eine Implementierung des Strategie Entwurfsmusters Die abstrakte Klasse AbstractSetValueDisplay implementiert viele der in Set ValueDisplay definierten Methoden und stellt die Oberklasse f r Klassen dar die eine Mengenwert Anzeige realisieren Die Klassen ListSetValueDisplay und TableSetValueDisplay sind konkrete Im plementierungen einer Mengenwert Anzeige Die erste Klasse stellt die bergebenen Werte in einer Instanz von javax swing JList dar Abb 5 10 die zweite Klasse nutzt eine javax swing JTable Instanz zur Darstellung Abb 5 11 Ein ausf hrliches Klassendiagramm der QueryInputPanel Hierarchie findet sich sich im Anhang A auf der Abbildung A 10 Werteanzeige Die dritte Klassengruppe im dialog Package ist f r die Anzeige der Werte bereits bekannter Variablen in Eingabedialogen verantwortlich Das Interface ValuesDisplay definiert Methoden die f r die Anzeige von Variablenwerten benutzt werden die Methode displayValues Collection names Collection values dient zur Anzeige von Variablennamen und Variablenwerten die sich jeweils in de
150. erationen definiert werden die M glichkeiten zur Ver nderung von Modellen und Ausf hrung von Benutzerinteraktionen bieten und damit Transformationen von Modellen erm g lichen Weitere Informationen zur Konzeption und Grundlagen von ODL liefert Sch01 3 2 Erste Implementierung des ODL Interpreters Die erste Implementierung eines ODL Interpreters f r QUEST wurde im Rahmen von Pasch er stellt Die ODL Abfragen k nnen in einem Editorfenster eingegeben werden die Ergebnisse der 18 KAPITEL 3 GRUNDLAGEN VON ODL Auswertung werden wahlweise in einem separaten Ausgabefenster oder im Editorfenster angezeigt Abbildung 3 1 Die Architektur des ODL Systems und der implementierte Sprachumfang werden ausf hrlich in Pasch beschrieben Wir wollen daher nur kurz den implementierten Sprachumfang beschreiben der den Ausgangspunkt f r die Erweiterungen darstellt x amp ODL Constraints Interpreter 0 4 0 E Result true File Edit View Project Options Help BankingSystem Component Centrale Component Driveri Component Driver2 Component A Database Component c Processi Component A c Process2 Component c Tilli Component Connectioni Component c Till2 Component A c Connection Component gt exists c Component true gt MM OMM OMM OMM OMM OMM OMA OMM Abbildung 3 1 ODL Editorfen
151. ersten Liste mithilfe des zu ihr geh renden Clear Buttons aufhebt Die beschriebene Optimierung erfordert einen h heren Implementierungsaufwand als die Opti mierungsvorschl ge 1 und 2 weil hier mehrere nderungen an ODL Query Subsystem vorge nommen werden m ssen e Auswahllisten m ssen ihre Werte nicht direkt von den ODL Datentypen sondern ber eine Zwischenliste beziehen auf die Filter angewandt werden k nnen e In allen Eingabepanels bei denen die Eingabe durch die Auswahl eines Werts aus einer Auflistung aller verf gbaren Werte stattfindet muss die M glichkeit geschaffen werden eine Kontrollklasse f r die Filterung der Auflistung anzuschlie en 6 3 VERBESSERUNGEN DER BENUTZERSCHNITTSTELLE 117 4 e Es muss Kontrollklasse erstellt werden die die Filterung Elementwerten in Einga bepanels eingeschr nkter Typen entsprechend dem beschriebenen Optimiertungsvorschlag steuert Die Implementierung dieser Optimierung w rde die Eingabe eingeschr nkter Typen f r den Be nutzer betr chtlich erleichtern insbesondere bei eingeschr nkten Typen deren Basistypen aus we nigen Elementen bestehen Ein weiterer Vorteil dieser L sung ist dass sich das Erscheinungsbild des Eingabepanels gegen ber der aktuellen Implementierung im Gegensatz zum Vorschlag 2 nur unwesentlich ver ndert w rde Es ist jedoch beachten dass die Filterung bei komplexen Restrik tionstermen viel Zeit beanspruchen kann so
152. erwaltet werden Hierf r wurden im SableCCGenerator in Analogie zu den Metho den recordVariable und recordVariables die Variablen im globalen Namensraum abspeichern die Methoden recordCclVariable und recordCclVariables erstellt die Variablen im CCL Namensraum abspeichern Dementsprechend m ssen die Methoden casePCclQuantifierDefault und outADefinedVariable die auf Namensr ume zugreifen und sie ver ndern bei jedem Zugriff feststellen ob zurzeit der globale Namens raum oder der lokale Namensraum einer CCL Proposition aktiv ist Die Umschaltung zwi schen dem globalen und dem CCL Namensraum findet in den Methoden inARestricted TypeDefinition undoutARestrictedTypeDefinition statt weil der lokale CCL Namensraum bislang nur f r die Verarbeitung von eingeschr nkten Typen benutzt wird Die erste Methode schaltet auf den CCL Namensraum um und die zweite aktiviert wieder den globalen Namensraum Die Methode caseARestrictedTypeDefinition schreibt den lokalen Variablennamen des eingeschr nkten Typs in der obigen Beispielabfrage ist es comp in den CCL Namensraum um ihn f r die Restriktionsbedingung verf gbar zu machen Selektoren Ein Selektor kann in einer ODL Abfrage in vier F llen eingesetzt werden 5 1 ERWEITERUNG DES SPRACHUMFANGS 59 Zugriff auf ein Element eines zusammengesetzten Typs zurzeit nur durch Produkttypen vertreten Zugriff auf ein Attribut einer Entit t Beispiel Name einer Entitat Zugriff auf eine
153. ese Besonderheit ist stellt kein gr eres Problem dar solange der Basistyp des eingeschr nkten Typs un r und endlich ist denn in diesem Fall wird die Eingabe durch die Auswahl eines Werts aus der Liste durchgef hrt und hier kann der Benutzer Eintr ge aus der Liste nacheinander selektieren bis ein zul ssiger Wert gefunden und der Next Button des Eingabe dialogs aktiviert wird eine Ausnahme bildet der Typ Boolean dessen Werte auch in einem Textfeld eingegeben werden k nnen was aber wiederum kein Problem darstellt weil es nur zwei verschiedene boolesche Werte gibt sodass der Benutzer durch Probieren schnell herausfinden kann welche Werte die Restriktionsbedingung erf llen Wird jedoch ein eingeschr nkter Typ abgefragt dessen Basistyp zusammengesetzt ist beispielsweise ein Produkttyp so ist es f r den Benutzer oft schwierig fest zustellen welcher der Elementwerte des Basistyps die Restriktionsbedingung verletzt bzw wie eine zul ssige Kombination von Elementwerten des Basistyps aussehen soll In diesem Abschnitt besprechen wir verschiedene M glichkeiten die Eingabe von Werten einge schr nkter Typen f r den Benutzer einfacher zu gestalten Die meisten davon verwenden eine Vor ausfilterung der einzugebenden Werte d h dem Benutzer werden nur diejenigen Werte zur Auswahl angeboten die die Restriktionsbedingung erf llen Bei dieser Filterung gibt mehrere Realisierungs m glichkeiten die sich im Schwierigkeitsgrad und dem sich
154. etaType mit allen es implemen tierenden Klassen angepasst werden Damit zusammenh ngende nderungen an Query und GUI Klassen werden im Abschnitt 5 2 besprochen Wir beginnen mit den nderungen SableCCGenerator hier musste die Methode out AHintExtension eingef hrt werden die den Hinweistext verarbeitet Au erdem muss nun in der Methode caseAQuantifierUnaryProposition die f r die Verarbeitung von Quantoren zust ndig sind im Codeabschnitt f r den cont ext Quantor die Anwesenheit des optionalen Parameters berpr ft werden ist dieser vorhanden so wird er an die generierte ContextQuantifier Instanz weitergegeben Die Klasse ContextQuantifier wurde um die M glichkeit erweitert einen Hinweistext optional zu spezifizieren ist dieser vorhanden so wird er bei der Auswertung des context Quantors stets an die query Methode des Metatyps der einzugebenden Variable weitergege ben damit er im Eingabedialog dem Benutzer angezeigt werden kann Im Interface Met aType und seinen s mtlichen Unterklassen wurde die Methode query um den Parameter hintText erweitert ber den der Hinweistext spezifiziert wird der in einem Eingabedialog dem Benutzer angezeigt werden muss 5 1 3 Weitere Implementierungsaspekte Wir wollen nun einige weitere implementierungstechnischen Aspekte vorstellen die sich nicht ein deutig in einem der vorherigen Abschnitte unterbringen und deshalb einen eigenen Abschnitt beanspruchen Term Hierarc
155. extFieldQueryInputPanelProducer IntegerTextFieldQueryInputPanelProducer SelectionQueryInputPanelProducer Interface AbstractSelectionQueryInputPanelProducer ListQueryInputPanelProducer RadioButtonsQueryInputPanelProducer CompositeQueryInputPanelProducer Interface AbstractCompositeQueryInputPanelProducer DefaultCompositeQueryInputPanelProducer SetTypeQueryInputPanelProducer Interface AbstractSetTypeQueryInputPanelProducer DefaultSetTypeQueryInputPanelProducer QueryInputPanelProducerManager Das Interface QueryInputPanelProducer das den Ausgangspunkt der Hierarchie bil det definiert die Fabrikmethode QueryInputPanel createQueryInputPanelIn stance sie gibt QueryInputPanel Instanzen unver ndert zur ck so wie sie vom new Befehl erstellt wurden Nehmen wir als Beispiel TextFieldQueryInputPanel in der entsprechenden Producer Klasse Text FieldQueryInputPanelProducer sieht die se Methode folgenderma en aus public QueryInputPanel createQueryInputPanelInstance return new TextFieldQueryInputPanel F r die anderen QueryInputPanel Klassen sind entsprechende Producer Klassen v llig analog implementiert Die Singleton Klasse QueryInputPanelProducerManager speichert die Einstellungen dar ber welcher QueryInputPanel Klasse f r welchen ODL Datentyp verwendet werden soll indem sie f r jeden ODL Datentyp au er wiederum dem eingeschr nkten Typ die Pro ducer Klasse speichert die
156. f r den Benutzer ergebenden Komfort unterscheiden Wir wollen im Folgenden einige M glichkeiten beschreiben Ihre Reihenfolge ent spricht dabei dem zu erwartenden Schwierigkeitsgrad der Implementierung wir beginnen mit der einfachsten und beenden mit der schwierigsten L sung 1 Abfrage zusammengesetzter Typen die eingeschr nkte Typen als Elemente enthalten Bei der Eingabe eines eingeschr nkten Typs ist der Abschluss der Eingabe erst dann m glich 6 3 VERBESSERUNGEN AN DER BENUTZERSCHNITTSTELLE 113 wenn der eingegebene Wert des Basistyps die Restriktionsbedingung erf llt Der Next Button wird demnach genau dann aktiviert wenn die eingegebenen Werte die Restriktionsbedingung erf llen Bei einem eingeschr nkten Typ mit un rem Basistyp kann damit wie oben bereits angesprochen am Next Button direkt abgelesen werden ob ein korrekter Wert eingegeben wurde Handelt es sich bei dem Basistyp jedoch um einen zusammengesetzten Typ so kann es f r den Benutzer schwierig sein herauszufinden welche Kombinationen der Elementwerte die Restriktionsbedingung erf llen Einen Spezialfall stellen zusammengesetzte Typen dar deren Elementtypen eingeschr nkte Typen sind Hier ist zwar wie im Allgemeinen bei eingeschr nkten Typen an einem deaktivierten Next Button zu erkennen ob die eingegebenen Werte die Restriktionsbedingungen der Elementtypen verletzen nicht jedoch welche Einzelwerte zu korrigieren sind Nehmen wir als Beispiel die Ab f
157. g wie die vorherige nur wird hier eine Modelltransfor mation dann durchgef hrt wenn der Term size c Channels gt 0 zu false evaluiert Damit ist das gew nschte Ergebnis in diesem Fall false Ein undefiniertes Ergebnis eines booleschen Terms darf nie zu einer Modelltransformation f hren denn ein undefiniertes Ergebnis ist in Wirklichkeit eine Exception im Laufe der Auswertung Wie man dem angef hrten Beispiel sieht kann das Ergebnis unde f weder wie true noch wie false behandelt werden denn beide Ergebnisse k nnen eine nderung am Modell nach sich ziehen Damit ist zur korrekten Behandlung undefinierter Ergebnisse von booleschen Termen die Erweiterung der aktuell verwendeten Logik notwendig Eine M glichkeit besteht in der Verwendung einer dreiwertigen Logik wie sie beispielsweise in SQL eingesetzt wird Kemper S 110 111 Sie enth lt neben den blichen booleschen Werten true und false den Wert undef diesmal als logischen Wert dieser Wert tritt als Ergebnis ei nes booleschen Ausdrucks auf dessen Auswertung nicht erfolgreich durchgef hrt werden konnte und dessen Ergebnis somit undefiniert ist F r die dreiwertige Logik gelten die in Tabelle 6 1 aufgef hrten Wahrheitstabellen Die Verkn pfungen Implikation und quivalenz lassen sich auf die Verpkn pfun gen AND OR und NOT zur ckf hren ihre Wahrheitstabellen werden aber der Vollst ndigkeit halber angegeben Der Auswertungsalgorithmus f r ODL Ausdr cke blei
158. gebnissen nicht ermittelt werden kann ob ihre Ergebnisse gleich sind Quantor Bei Quantoren muss man folgende F lle unterscheiden Quantoren context und new F r diese Quantoren d h in einem Ausdruck der Form context var type term oder new var type term wird einfach das Ergebnis des Quantorterms weitergege ben wenn der Term zu undef ausgewertet wird so ist auch das Ergebnis des Quantors gleich undef Hierbei ist es unproblematisch wenn der von einem new Quantor gebundene Term zu undef evaluiert w hrend ein neues Modellelement vom new Quantor bereits erstellt wurde die nderung am Modell findet erst statt wenn das neue Modellelement in das Modell eingef gt wird und dies wird nicht passieren falls der vom new Quantor gebun dener Term zu undef evaluierte Quantor forall Nach der Definition des Universalquantors gilt forall var type term var N term var varetype Ausgehend von dieser Definition und von den Wahrheitstabellen in der Tabelle 6 1 ist das Ergebnis eines Universalquantors gleich 6 2 OPTIMIERUNG DER ABFRAGEAUSWERTUNG 101 true wenn gilt V var type term var true false wenn gilt 3 var type term var false ndef wenn gilt var type term var undef A var type term var false H Quantor exists Nach der Definition des Existenzquantors gilt exists var type term var term var varc type Ausgehend von dieser Definition und von den Wahr
159. gen anderer Bestandteile des ODL Auswert ungssystems Zus tzlich zu den realisierten Erweiterungen von ODL wurden im Kapitel 6 Vorschl ge f r Op timierungen und Erweiterungen von ODL gemacht die aufgrund ihres Umfangs nicht im Rahmen dieser Arbeit implementiert werden konnten Wir wollen an dieser Stelle noch einige weiter reichende Ideen f r die Weiterentwicklung des ODL Systems anf hren Bibliotheken von ODL Abfragen Dem Benutzer k nnen Sammlungen von ODL Abfragen und Bausteinen f r ODL Abfragen f r gebr uchliche Konsistenzpr fungen und Operationen in Form von Bibliotheken zur Verf gung gestellt werden Es sind auch ODL Templates denkbar bei denen die Struktur der Abfrage vorgegeben ist und nur bestimmte Datentypen oder Operationen vom Benutzer erg nzt werden sollen Erweiterung der Auswahlmechanismen f r Benutzereingaben In der aktuellen ODL Version werden Benutzereingaben f r Metamodell Typen durchgef hrt indem eine Liste aller verf gbaren Entit ten des betreffenden Typs angezeigt wird aus welcher der Benutzer einen Eintrag ausw hlen soll Die Eingabe l sst sich f r den Benutzer bequemer gestalten wenn der Auswahlmechanismus die in QUEST verwendete Modellansicht zurzeit ei ne Baumansicht einbezieht ein Modellelement kann dann direkt im Modelleditor ausgew hlt werden KAPITEL 7 FAZIT 123 In zuk nftigen Entwicklungen des AutoFocus Quest Frameworks ist es denkbar dass f r die Bearbeitung des
160. gene Typ Klassen die den Typ eines Werts beschreiben Ein Typklassen Name wird nach 54 KAPITEL 5 IMPLEMENTIERUNG dem Schema Meta_Typbeschreibung zusammengesetzt String Werte haben bei spielsweise den ODL Typ MetaString und Int Werte den ODL Typ Metalnteger Metamodell Elemente werden als Entit ten verstanden und haben dementsprechend den ODL MetaEntity Hat ein ODL Typ keine Entsprechung im Java Typsystem so wird eine spezielle Werteklasse erstellt um Instanzen dieses Typs zu repr sentieren f r den ODL Typ MetaEntity werden die Werte durch Instanzen der Klasse Entity repr sentiert Um der umfassenden Erweiterung des ODL Typsystems gerecht zu werden die im Rahmen der vorliegenden Diplomarbeit vorzunehmen war wurde die MetaType Klassensierarchie umge baut Zun chst wurde f r alle MetaType Unterklassen die abstrakte Oberklasse Abst ractMe taType erstellt die einige Methoden aus dem Interface MetaType implementiert alle Me taType Unterklassen sind auch Unterklassen von AbstractMetaType Die Klasse Me taProductType nimmt eine Sonderstellung in der MetaType Hierarchie ein indem sie nicht direkt das Interface MetaType sondern das Interface Met aCompositeType imple mentiert das ein Unterinteface von MetaType ist und Methoden f r zusammengesetzte Da tentypen definiert d h Datentypen die aus Wertetupeln fester L nge bestehen Die abstrakte Klasse AbstractMetaCompositeType implementiert einige Methoden aus Met
161. getInputLabel String setInputLabel void AbstractSetTypeQueryInputPanel BooleanTextFieldQueryInputPanel IntegerTextFieldQueryInputPanel a AbstractSetTypeQueryInputPanel getInput Object BooleanTextFieldQueryInputPanel getInput Object DefaultCompositeQueryInputPanel DefaultSetTypeQueryInputPanel metaCompositeType MetaCompositeType DIVIDER_SIZE int panel AddedT oC ontainer boolean topPanel javax swing JPanel inputPanelsContainer javax swing JPanel inputScrollPane javax swing JScrollPane inputLabel javax swing JLabel paddingPanel javax swing JPanel inputPanelSizeSlider javax swing JSlider plitPane javax swing JSplitPane sliderPanel javax swing JPanel sliderLabel javax swi bottomPanel javax swing JPanel inputPanelsContainerPreferredSize Dimension inputPanelsContainerMinimumSize Dimension DefaultCompositeQueryInputPanel DefaultCompositeQueryInputPanel initComponents void inputPanelSizeSliderStateChanged void getCompositeInput Composite Value getInputLabel String setInputLabel void setInputPanels void setMemberPanelLook void setScaledPreferredSiz sisetScaledPreferredSize v setPane PreferredSize setPane PreferredSi calculateInputPanelsContainerSizes void processNextElementPanelSize void getInputPanelsCount int getInputPanel QueryInputPanel doLayout void addNotify void setOptimalSplit
162. h der Anzahl der Argumente for a 2 to n do for all p M do if Es ist ein Elementtyp vorhanden der die Elemente x A des urspr nglichen Typs enthalt die als Argumente von p verwendet werden hier werden auch rekursiv Elementtypen von zusammengesetzten Elementtypen betrachtet then F ge pj in den Restriktionsterm des gefundenen Elementtyps ein und verkn pfe ihn mithilfe des logischen AND mit dem fr heren Restriktionsterm else co Kein Elementtyp enth lt alle von p verwendeten Argumente oc Alle Elementtypen die Argumente xg von p enthalten werden zu einem neuen Elementtyp gruppiert Als Restriktionsterm des neuen Elementtyps wird p benutzt end if end for end for Nach dem Ende des Algorithmus ist der urspr ngliche eingeschr nkte Typ so umformuliert dass jedes Pr dikat p aus seinem Restriktionsterm nach M glichkeit mit den Elementtypen xx 5 gruppiert ist die es als Argument verwendet Wir wollen die Arbeitsweise des Algorithmus an einem gr eren Beispiel ausf hrlich erl utern Es sei der eingeschr nkte Typ var T x4 Ta xs Ts d Leite po xa ps x1 x2 2 ps x1 pelz x4 V p7 x1 xs gegeben Wie f hren nun den Algorithmus schrittweise aus 1 quivalenzen und Implikationen eliminieren Wir werden die Pr dikate bei den quivalenzumformungen der K rze halber ohn
163. heitstabellen in der Tabelle 6 1 ist das Ergebnis eines Existenzquantors gleich true wenn gilt 3 var type term var true false wenn gilt V var type term var false undef wenn gilt 3 var type term var undef A var type term var true Bei der Auswertung von Quantortermen ist noch die Besonderheit zu ber cksichtigen dass die Quantoren als Ergebnis neben dem logischen Wert auch die Menge aller erf llenden Belegun gen f r die quantifizierte Variable zur ckgeben so k nnte die Abfrage exists c Component true beispielsweise folgendes Ergebnis liefern true c firstComp c secondComp c thirdComp Dementsprechend m ssen wir die Regeln definieren nach denen die erf llenden Belegungen ermittelt werden falls der vom Quantor gebundene Term zu undef ausgewertet wurde Dies ist aber kein besonderes Problem denn die Menge der erf llenden Belegungen ist nichts ande ren als die Mengen aller Variablenbelegungen f r die der vom Quantor gebundene Term das gew nschte Ergebnis aus der Menge true false liefert Demnach werden alle Belegun gen f r die der Term zu undef evaluiert von den erf llenden Belegungen ausgeschlossen Der Auswertungsalgorithmus muss damit in Bezug auf die Ermittlung der Menge der erf llen den Belegungen nicht modifiziert werden weil er wie auch in der aktuellen Implementierung nur die Belegungen ber cksichtigen soll f r die das Ergebnis der Te
164. hen Dazu wollen wir zun chst die Begriffe einfache Transformation und komplexe Transformation erl utern e Einfache Transformation Unter einer einfachen Transformation verstehen wir eine einzelne nderungen die an einem Modell durchgef hrt wird dies k nnte das Erstellen Hinzuf gen oder L schen eines Model lelements sein das Benennen eines Modellelements die Zuweisung eines Datentyps zu einem Kanal usw e Komplexe Transformation Eine komplexe Transformation ist eine Abfolge einfacher Transformationen Beispielsweise w re eine Operation Verbinde zwei Komponenten durch einen Kanal bereits eine komplexe Transformation denn sie besteht aus mehreren einfachen Transformationen einen neuen nal erstellen den Kanal benennen dem Kanal einen Datentyp zuweisen einen Ausgangsport der ersten Komponente mit dem Kanal verbinden einen Eingangsport der zweiten Komponente mit dem Kanal verbinden Aus den obigen Definitionen sieht man dass die Entwicklung eines Modells nichts anderes als die Anwendung verschiedener Transformationen ist Diese Feststellung ist ausschlaggebend f r die Entwicklung von Werkzeugen die die Durchf hrung von Transformationen f r den Benutzer verein fachen Wie wir gesehen haben besteht schon die relativ einfache Operation Verbinde zwei Komponen ten durch einen Kanal aus mehreren einfachen Transformationen Der Aufwand f r solche Operatio nen wird noch gr er wenn sie mehrmals wiederh
165. hie Zun chst wollen wir noch einmal auf den Aufbau der Term Hierarchie im Package quest odl evaluation model eingehen Es wurden zwar nicht viele neue Klassen in diese Hier archie eingef gt sie erfuhr jedoch einige Umbauma nahmen die vor Allem darauf abzielten gemeinsame Codeabschnitte aus verwandten Klassen in gemeinsame Oberklassen auszulagern Folgende Klassengruppen wurden einbezogen Junktionen Die Klassen Con junction Disjunction Equivalence und Implication die logische Verkn pfungen zwischen zwei Termen implementieren erhielten eine gemeinsame 62 KAPITEL 5 IMPLEMENTIERUNG abstrakte Oberklasse Junction die die Verwaltung der beiden Operanden der Verkn p fungen bernimmt Quantoren F r die Quantor Klassen ExistentialQuantifier UniversalQuantifier ContextQuantifier und NewQuantifier wurde die gemeinsame abstrakte Ober klasse Quantifier erstellt sie bernimmt die Verwaltung der vom Quantor gebundenen Variablen ihres Typs und des vom Quantor auszuwertenden Terms Relationen F r die Klassen RelationAdditionTerm RelationRemovalTerm und Rela tionTestTerm die jeweils f r das Hinzuf gen Entfernen oder die Abfrage eines At tributs oder einer Entit t zust ndig sind die ber eine Relation mit einer anderen Entit t verkn pft ist wurde die gemeinsame abstrakte Oberklasse RelationTerm erstellt Ana log zu den oben genannten abstrakten Oberklassen bernimmt sie die Verwaltung der Ope randen eines
166. hier die Rolle des Modells und ValuesDisplayComponent die Rolle des Views ein Controller ist nicht notwendig da zurzeit keine Benutzereingaben in Werteanzeigen verarbeitet werden m ssen Das Interface ValuesDisplayComponent definiert lediglich zwei Methoden display Values Collection names Collection values zeigt die spezifizierten Varia blennamen und Variablenwerte an und java awt Component getDisplayCompo nent liefert eine Komponente welche die mit dem letzten displayValues Aufruf ber gebenen Variablenwerte darstellt 5 2 INTERAKTIVE BENUTZERSCHNITTSTELLE 73 Konkrete Implementierungen von ValuesDisplayComponent sind TextAreaValues DisplayComponent und TableValuesDisplayComponent Die erste Klasse zeigt die Variablennamen und werte in einem Textbereich an Abbildung 5 12 Die zweite Klas se benutzt eine zweispaltige Tabelle in der ersten Spalte werden Variablennamen und in der zweiten die entsprechenden Variablewerte angezeigt Abbildung 5 13 int 10 stri string1 E bool true EN Abbildung 5 13 TableValuesDisplayComponent Ein Klassendiagramm der ValuesDisplay Hierarchie ist auf der Abbildung 11 im An hang A zu finden e QueryConfigurationDialog Die Klasse QueryConfigurationDialog implementiert einen Dialog zur Konfiguration der Benutzerschnittstelle im ODL Query Subsystem s auch Abschnitt 4 2 7 Sie wurde so konzipiert dass das Hinzuf gen neuer Optionen und Konfigurationsm glic
167. hkeiten sich m g lichst einfach gestalten soll Das Dialogfenster enth lt f r jeden ODL Datentyp au er dem eingeschr nkten Typ der kei ne eigenen Einstellungen ben tigt ein Konfigurationspanel in dem die Einstellungen f r Eingabedialoge des jeweligen ODL Datentyps vorgenommen werden k nnen Jedes der sie ben Konfigurationspanels ist eine Instanz der internen Klasse QueryConfigurationDia log QueryConfigurationPanel f r den Mengentyp wird eine Instanz ihrer Unterklas se SetTypeQueryConfigurationPanel benutzt Das Panel bekommt bei der Initiali sierung als Parameter die aktuellen Einstellungen f r den jeweiligen ODL Datentyp und zeigt sie an Vom Benutzer vorgenommene Einstellungen k nnen jederzeit ber daf r vorgesehene Methoden von QueryConfigurationPanel ausgelesen werden Die zur Verf gung stehenden Optionen f r die einzelnen ODL Datentypen werden in stati schen Arrays am Beginn des Klassenquellcodes hinterlegt dies erm glicht es neue Optionen ohne nderung der Methoden von QueryConfigurationDialog hinzuzuf gen dies gilt nat rlich nur solange keine neuen Einstellungekategorien eingef hrt werden wie dies mit der Mengenwert Anzeige in Eingabepanels f r Mengentypen der Fall ist Auf diese Art und Wei se k nnte beispielsweise mit minimalem Aufwand ein neues Eingabepanel f r einen ODL Datentyp in die Optionenliste hinzugef gt werden sodass der Benutzer es sp ter als die zu verwendende Einste
168. hlie end bergibt sie den eingegebenen Wert und die Ausf hrungskontrolle zur ck an den context Quantor Mit diesem Konzept wird die Benutzereingabe und Dialogflusskontrolle von der ContextQuan tifier Auswertungsklasse abgekoppelt Auf diese Art und Weise k nnte eine Kontrollklasse die Auswertung des ODL Auswertungsbaums prizipiell an einem beliebigen context Quantor unterbrechen und an einem beliebigen anderen starten die Grundlage daf r ist die Verwaltung aller Zustandsinformationen durch die Kontrollklasse selbst Die Implementierung eine Dialogflusskontrolle mit welcher der Benutzer R ckw frtsschritte und anschlie ende Vorw rtsschritte ausf hren kann bei denen die get tigten Eingaben nicht verloren gehen w re nur eine der M glichkeiten die Kontrollklassen bieten Denkbar w ren auch folgende Implementierungen der Dialogflusskontrolle e Der Benutzer kann aus einer Liste vorheriger Schritte direkt ausw hlen zu welchem Schritt er zur ckkehren will e F r ein und denselben Eingabeschritt werden mehrere Zust nde gespeichert sodass nicht nur die zuletzt get tigte Eingabe sondern auch eine der fr her gemachten Eingaben wieder hergestellt werden kann der Benutzer k nnte aus einer Liste abgespeicherter Eingaben die gew nschte ausw hlen e Test Kontrollklassen bei denen Benutzereingaben nicht vom Benutzer vorgenommen son dern von einem Testfall Generator erzeugt werden Die Test Kontrollklasse kann sogar in sofern
169. hor David Pasch Q 5 2003 08 09 author David Trachtenherz f Helpers all 0 OxFFFF letter gt ae OZ Pak an 5 digit O 595 al letter 72773 alnum digit al tab 9 er If 2 410 eol cr cr 1 not_cr_lf all cr 1 not star all not star slash not star onelined comment not cr lf multiline comment not star not star slash not star 4 ANHANG ODL GRAMMATIK IN DER SABLECC NOTATION 145 Tokens Special Characters equal assign l_par r_par l brace r brace l bracket r bracket v line dot colon comma smaller bigger smaller or equal SCH We PD bigger or equal plus SS minus mult IST Operators and and or Wort implies implies equiv equiv neg neg forall forall exists exists context context new new result result not not set set call call is gt qe has has element element isempty isEmpty size size hint hint Basic Types bool_type int_type string_type Literals bool_constant int_constant Boolean pnt String true false digit 146 ANHANG ODL GRAMMATIK IN DER SABLECC NOTATION String constant r net Gr Lf Cr S Ct r s Identifiers
170. hrt Vorziehen von context Quantoren bei der Skolem Optimierung In der fr heren ODL Version wurde die Skolem Optimierung f r new und context Quantoren implementiert Pasch S 38 39 Hierbei handelt es sich um das Vorziehen von new und context Quantoren bis zum n chsten orall Quantor oder an den Anfang der 64 KAPITEL 5 IMPLEMENTIERUNG ODL Abfrage Das einfache Vorziehen der Quantoren war m glich weil die Typen der von ih nen gebundenen Variablen von keinen anderen Variablen abh ngen konnten Mit der aktuellen Erweiterung des Typsystems wurden Typen eingef hrt die von fr her deklarierten Variablen abh ngen k nnen beispielsweise h ngt in der Abfrage exists cl Component context 2 comp Component is SubComponents 1 der eingeschr nkte Typ comp Component is SubComponents cl comp von der Variablen c1 ab In einem solchen Fall kann der betreffende context Quantor nicht vor den Quantor vorgezogen werden von dessen Variablen sein eigener Variablentyp abh ngt Die new Quantoren sind von dieser Problematik nicht betroffen da sie nur Variablen des Typs Entity binden k nnen und dieser Typ h ngt nie von anderen Variablen ab Das entstandene Problem bei der Verschiebung von context Quantoren kann auf verschiede nen Wegen gel st werden Die optimale L sung bei der ein cont ext Quantor genau soweit vorgezogen wird bis er auf einen foral1 Quantor trifft oder einen anderen Quantor von des sen V
171. ht F r den Fall eines Gleichheitsterms w rde die berschriebene Metho de outAEqualExpression AEqualExpression node vereinfacht dargestellt wie folgt aussehen public void outAEqualExpression AEqualExpression node Zun chst werden die von den Kinderknoten in einer Hashtabelle gespeicherten Auswertungsbaum Knoten f r die linke und rechte Seite der Gleichheit ausgelesen Term leftTerm Term getOut node getLeftExpression m Term rightTerm Term getOut node getRightExpression Nun wird ein Auswertungsbaum Knoten erstellt der die Funktionalit t einer Gleichheit bereitstellt Term equalExpression new EqualExpression leftTerm rightTerm Schlie lich wird der neue Auswertungsbaum Knoten in einer Hashtabelle abgespeichert aus der er von anderen Knoten wieder ausgelesen werden kann setOut node equalExpression 46 KAPITEL 5 IMPLEMENTIERUNG Die Klasse quest odl evaluation generator SableCCGenerator die auf der Abbildung 5 2 der Komponente ODL Evaluation Tree Generator entspricht ist im ODL Auswertungssystem f r die Erstellung eines ODL Auswertungsbaums aus einem Syntaxbaum zust ndig sie erbt von der Klasse DepthFirstAdapter und berschreibt ihre Methoden derart dass ein ODL Syntaxbaum auf einen ODL Auswertungsbaum abgebildet wird Hierbei wird auch die semantische Korrektheit der verarbeiteten ODL Abfrage berpr
172. ht wurde zur Auswahl von Portpaaren gleichen Datentyps ein Auswahlme chanismus implementiert bei dem die Selektion eines Ports aus der einen Liste zur Filterung der zweiten Liste f hrte sodass sie nur noch Ports zeigte die denselben Datentyp wie der ausgew hlte Port in der ersten Liste haben Dieses Prinzip kann f r die Eingabe eingeschr nkter Typen in ODL Abfragen verallgemeinert werden Ist ein Wert f r einen eingeschr nkten Typ einzugeben dessen Basistyp ein zusammen gesetzter Typ mit n Elementen ist so kann nach der Eingabe von n 1 Elementen das n te Element sofern es ber eine Auswahl und nicht in einem Textfeld einzugeben ist so gefiltert werden dass nur Elemente zur Auswahl stehen die zusammen mit den bereits eingegebenen Werten f r die anderen n 1 Elemente die Restriktionsbedingung erf llen F r den Spezialfall n 1 d h f r un re Typen und f r zusammengesetzte Typen mit genau einem Element wird die Filterung des einzigen Elements des Basistyps sofort beim ffnen des Eingabedialogs durchgef hrt Betrachten wir als Beispiel die ODL Abfrage 116 KAPITEL 6 VERBESSERUNGSM GLICHKEITEN context comps c cl Component c2 Component 6 9 c c2 SuperComponent 1 true Der Benutzer muss zwei Komponenten ausw hlen wobei die zweite eine Unterkomponente der ersten sein muss Die Filterung w rde dazu f hren dass bei der Auswahl einer Komponente f r c1 die Liste f r c2 gefiltert wird und
173. i CCL Propositionen erstellt public void outAAndCclProposition AAndCclProposition node Term leftTerm Term getOut node getCclProposition Term rightTerm Term getOut node getCclUnaryProposition setOut node new Conjunction leftTerm rightTerm Auf diese Art und Weise wurden folgende Methoden erstellt Methode Aufgabe utAAndCclProposition CCL Propositionen utAOrCclProposition utAImpliesCclProposition utAEquivCclProposition utAUnopCclProposition utANegCclUnaryProposition Un re CCL Propositionen utANamedPredicateCclUnaryProposition utATermCclUnaryProposition aseAQuantifierCclUnaryProposition utARelationCclBasicProposition CCL Grundpropositionen tABoolCclBasicProposition tAIsCclRelation CCL Relationen ojojo ojo O O O tABasicCclTerm CCL Terme tAParCclTerm S Eine weitere Besonderheit musste im Zusammenhang mit der Verwendung von CCL Propo sitionen f r eingeschr nkte Typen beachtet werden Da CCL Propositionen die als Restrikti onsbedingung f r eingeschr nkte Typen verwendet werden wie beispielsweise die Bedingung size comp Ports gt 2 in der Abfrage exists component comp Component size comp Ports gt 2 true einen eigenen Namensraum f r Variablen haben muss neben einer bereits vorhandenen Tabelle f r globale Variablennamen eine weitere Tabelle mit Variablennamen f r CCL Propositionen v
174. ialog kann ein weiterer Eingabedialog verwendet wer den der sich darin unterscheidet dass die Gr e der drei Dialogbereiche ver ndert werden kann Abb 4 4 Der Einsatz dieses Dialogs ist insbesondere dann sinnvoll wenn das Dialogfenster ins gesamt vergr ert werden muss z B bei der Eingabe komplexer Datentypen denn in diesem Fall w rden im einfachen Dialogfenster alle drei Dialogbereiche proportional zu ihrer urspr nglichen Gr Be vergr ert womit der Navigationsbereich und die Werteanzeige gegebenenfalls unn tigen Platz verbrauchten w hrend der Eingabebereich zu klein ausfiele 4 2 INTERAKTIVE BENUTZERSCHNITTSTELLE 29 Enter string value for str2 Previous Cancel Next gt gt str1 abc Abbildung 4 3 Eingabedialog mit Werteanzeige Die Einstellung welcher der verf gbaren Eingabedialoge f r verschiedene Datentypen verwendet werden soll kann im Konfigurationsdialog f r das ODL Query Subsysten individuell f r jeden ODL Datentyp vorgenommen werden Abschnitt 4 2 7 x Enter integer value for i 10 lt lt Previous Cancel Next gt gt Abbildung 4 4 Eingabedialog mit ver nderbaren Bereichsgr en 4 2 2 Eingabe un rer Werte F r jeden der un ren Datentypen String Int Boolean sowie f r Metamodelltypen stehen Einga bepanels zur Verf gung in denen in einem Eingabedialog Variablenwerte eingegeben werden k nnen Wir
175. ias ndup21soduio 28 1 HAIM Ad INV 3 1 ueapoog 12 gndupk1and Sopp Gani Pungindujk anOansoduo Zopmp K anb Ang e uvjsujpeuegimndu AonO36a154 eonpoag oueqindu aonQprerqxo L 3oonpoagpuegndupXon p p unxo 1 Jour qndu Ang souvjsuppuegimdu AonO3ea154 ueonpougpoueqindu AsanQypyar pxe ron Qjorisoduro oouvjsu oueqnndu amp 19n oIsodto 0513151 TAANDU OT SUMISO 10914 195 1 1 5 195 1 2 12 125 pioa sonjpA ploa sanjoamdupas indujads 1125198 anpamdupas LEUR TPrunqmdu k1nQu0n93735 30jp1p A anb TS IITUTA TS U01151 SISI T 11 npoidl uuqindulKi nO1sri 39onpodgpuegqjndu A1on jsrT Pour ginduyAranQedATjag sourjsuyjouegmduyAronQjedA SNE ueonpog oueqindu GonQ ed amp p1esimejaqa TSUENAUJAISNOUONSSTSS SSURSUNSUEAMAUATSNOUONISTSSSTEITT qynduy Aon Oaysoduroy neyo EELER EEN
176. ic_type model_element_type basic_type bool_type int_type string_type model_element_type identifier Der Produkttyp wird nun mit den folgenden Produktionen eingef hrt product_type unary_type type_list type_list identifier type type_list_tail type list tail identifier type Dabei ist zu beachten dass un re Typen in der Grammatik als Spezialfall eines Produkttyps deklariert werden w hrend in der sp teren Implementierung zwischen un ren Typen und dukttypen deutlich unterschieden wird indem sie durch verschiedene Klassen implementiert werden Als n chster Schritt wird der eingeschr nkte Typ eingef hrt restricted type definition variable type ccl proposition Auf die hier verwendete Produktion cc1 proposition wird weiter unten eingegangen Der Mengentyp wird nun durch die Produktion set type definition set type eingef hrt SchlieBlich wird die Ausgangsproduktion f r alle Typen definiert type product type restricted type definition set type definition lement defined variable lement expression defined variable variable variable identifier 5 1 ERWEITERUNG DES SPRACHUMFANGS 49 Die Deklaration des Int roducedType ist direkt in der Produktionsregel f r type unterge bracht und zwar in den Produktionen type element defined_variable lement expression Ausgehend von dieser Defini
177. icht der Fall ist Abhilfe kann dadurch geschaffen werden dass endliche Teilmengen unendlicher Typen ber eine feste Syntax definiert werden k nnen F r den Typ Int k nnte mit i Int a b die Teilmenge aller ganzen Zahlen deklariert werden die zwischen a und b liegen Diese Syntaxerweiterung w rde Abfragen wie exists i Int 0 10 i lt 5 erm glichen 6 1 2 Mengenoperationen F r die in ODL verwendeten Mengen ist zurzeit die nur Gr enbestimmung size set_var und die Iteration ber Mengenelemente exists e element set_var m glich Der Sprach umfang kann f r einen flexibleren Einsatz von Mengen um folgende zum Teil mengentypische Ope rationen erweitert werden e union setl set2 Vereinigung zweier Mengen M JM a ae Mi Va M2 e intersection setl set2 Durchschnitt zweier Mengen M Mi a M2 e difference setl set2 Differenz zweier Mengen M a a M Aa M2 98 KAPITEL 6 VERBESSERUNGSM GLICHKEITEN e 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 die auf keinem anderen Weg deklariert werden k nnen beispielsweise kann eine Stringmenge str1 str2 ber den Ausdruck union asSet str1 asSet str2 erhalten werden Eine n herliegende Deklaration s String 5 strl or str2 ist nicht zul ss
178. id d initConfigurationPanels void AbstraciQueryDialog configureQueryConfigurationPanel void EE readCurrentQueryOptions void dard ds Pa ee 1 applyQueryConfigurationSettings void E n kid Tr i getSelectedQueryDialogAndPanelProducerClasses QueryDialogAndPanelProducer aes Se NS E getSelectedSetValueDisplayFactory Set ValueDisplayFactory ec Ge showQueryConfigurationDialog void navigationBarListener NavigationBarListener EE backwardStepEnabled boolean a AbstractQueryDialog AbstractQueryDialog _ 7 SiconfirmInput void interface cancellnput void ValuesDispla z backwardStep void EE eloseDialog void displayValues void verifyInput boolean displayValueszvoid f isAcceptlnputEnabled boolean en setAcceptnputEnabledvoid getLastNamesCollection Collection 4displayValues void getLastValuesCollection Collection spe His getDisplayComponent Component setValuesDisplay void getValuesDisplay ValuesDisplay A getQueryInputPanel QueryInputPanel Fi setQueryInputPanel void userInput void setNavigationButtons void AbstractValuesDisplay peee DUE lastDisplayedNames Collection O lastDisplayedValues Collection isBackwardStepEnabled boolean EEN initialiseListeners void display Values rac queryInputChanged void r GE E displayValuesImpl void 1 createQueryInputListener QueryInputListener adisplayLastValues void d cteateNavigationBarListener NavigationBarListener EE p getLast
179. ie Erweiterung des Sprachumfangs von ODL sowie die Kon zeption und Implementierung einer interaktiven Benutzerschnittstelle f r die Auswertung von ODL Abfragen In den folgenden Abschnitten erl utern wir im Einzelnen welche Erweiterungen am Sprachum fang von ODL vorgenommen werden sollten und wie die Benutzerschnittstelle konzipiert wurde 4 1 Erweiterung des Sprachumfangs Wie im Abschnitt 3 2 erw hnt waren einige wichtige Sprachkonstrukte von ODL im implementierten Sprachumfang noch nicht enthalten In Sch01 S 5 S 16 19 wurden mehrere Erweiterungen des ODL Sprachumfangs vorgestellt von denen die folgenden im Rahmen der vorliegenden Diplomarbeit zu realisieren waren e Produkttypen Bislang konnten nur Variablen un rer Typen deklariert werden z B var Boolean oder var Component Jetzt sollte die Deklaration von Variablen erm glicht werden deren Typ ein Tupel aus mehreren Typen ist var identl typel ident2 type2 ident n type n 4 1 Damit w ren beispielsweise folgende Typdeklarationen m glich var comp Component port Port var comp Component name String ports pl Port p2 Port Hierbei darf jeder g ltige ODL Typ als Elementtyp eines Produkttyps verwendet werden Selektoren F r den Zugriff auf Elemente eines Produkttyps und auf Attribute bzw Assoziationen von Modellelementen werden Selektoren verwendet Der Zugriff auf ein Element bzw At tribut einer Variablen erfolgt ber das Anh ngen eines
180. ig da ber die Werte des unendlichen Typs String nicht iteriert werden kann und auch wenn dies m glich w re so w re diese Deklaration u U sehr ineffizient e unite var type expression var Punktweise Auswertung eines Ausdrucks f r alle Belegungen von var wird der Ausdruck expression ausgewertet und alle Ergebnisse zu einer Menge vereinigt unite var type expression var U expression var varctype 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 dem Benutzer alle Komponentennamen zur Auswahl anbieten context compName unite c Component asSet c Name true Die Abfrage context compName s String exists c Component c Name s true ber die Restriktion des Typs St ring sieht auf den ersten Blick quivalent aus hat aber ei ne ganz andere Wirkung anstatt die Namen aller Komponenten in einer Liste zur Auswahl anzubieten wird im Eingabedialog f r diese Abfrage lediglich ein Eingabefeld f r den String s angezeigt die Eingabe kann hier nur dann abgeschlossen werden wenn der eingegebene String gleich dem Namen einer existierenden Komponente ist Die Operatoren union intersection und difference sind mit geringem bis mittlerem Auf wand implementierbar Der Operator asSet ist sehr einfach zu implementieren Die Implementie rung von unite ist von mittlerer Schwierigkeit 6 1
181. implementiert einige Methoden aus Set Type QueryInputPanel und dient als abstrakte Oberklasse f r Mengeneingabepanels Die Klasse DefaultSetTypeQueryInputPanel implementiert ein Eingabepanel f r Mengen das aus zwei Teilen besteht Eingabebereich f r Werte des Basistyps der Menge und Anzeigebereich f r Werte die bereits in die Menge eingef gt wurden Abb 5 10 Die beiden Bereiche werden durch die Splittinglinie eines Splittingpanels getrennt sodass sie nach Bedarf vergr ert und verkleinert werden k nnen Wie oben schon erw hnt verwenden Mengen Eingabepanels eine zus tzliche Komponen te zur Anzeige der bereits in die Menge hinzugef gten Werte Das Interface SetValue Display definiert die Schnittstelle einer solchen Komponente Die Methoden display Values Object values displayValues Collection values und displayValues SetValue setValue veranlassen die Anzeige der bergebenen Wertemenge sie unterscheiden sich nur durch den Parametertyp ansonsten ist ihre Funktiona lit t identisch Des Weiteren sind alle Methoden die das Wort Selected oder Selection im Methodennamen enthalten f r das Lesen die nderung und die Beobachtung der ak tuellen Selektion in der Anzeige zust ndig nehmen wir als Beispiel die Methode int getSelectedIndices die die Indizes aller zurzeit selektierten Eintr ge in der An zeige zur ckgibt und die Methode addListSelectionListener ListSelection Listener listener die einen Beobacht
182. infachen Eingabedialog f r den Typ St ring einstellen wollen k n nen wir folgenden Code benutzen QueryDialogManager m QueryDialogManager getInstance m setStringQueryDialog m getDefaultQueryDialogInstance Soll eine eigenst ndige Dialoginstanz f r die Eingaben eines Datentyps benutzt werden so wird das mit einem Aufruf der Form QueryDialogManager m QueryDialogManager getInstance m setStringQueryDialog new DefaultQueryDialog bewerkstelligt ber die Methode configure QueryDialog boolDialog QueryDialog integerDialog QueryDialog stringDialog QueryDialog entityDialog QueryDialog introducedQueryDialog QueryDialog productTypeDialog QueryDialog setTypeDialog kann schlieflich mit einem einzigen Aufruf f r alle ODL Datentypen spezifiziert werden wel che Dialogfenster f r Benutzereingaben zu verwenden sind Ein ausf hrliches Klassendiagramm der QueryDialog Hierarchie befindet sich im Anhang A auf der Abbildung A 11 Eingabepanel Die abstrakte Klasse QueryInputPanel definiert die Schnittstelle von Eingabepanels die innerhalb eines Eingabedialogs f r die Eingabe des Werts der abgefragten Variablen zust n dig sind Von der Idee her handelt es sich bei QueryInputPanel um ein Interface da es aber von javax swing JPanel erbt um die Schnittstelle eines Swing Standardpanels zu integrieren musste es als abstrakte Klasse notiert werden Die wichtigste Methode die QueryInputPanel definiert ist Object
183. inzelnen Optimierungen h ngt stark von der Struktur der ODL Abfrage und von dem bearbeiteten Modell ab ein und dieselbe Op timierung k nnte in einem Fall kaum Geschwindigkeitsvorteile bringen und in einem anderen Fall die Auswertungszeit um den Faktor 10 senken Es gilt also in jedem konkreten Fall die anwendba ren M glichkeiten durchzuprobieren und zu kombinieren und die beste gefundene Formulierung der ODL Abfrage zu benutzen Kapitel 6 Verbesserungsmoglichkeiten Dieses Kapitel behandelt Vorschl ge f r zuk nftige Weiterentwicklungen des ODL System Sie be treffen Erweiterungen und Optimierungen des ODL Auswertungssystems und der interaktiven Benut zerschnittstelle von ODL 6 1 Erweiterungen des Sprachumfangs In diesem Abschnitt befassen wir uns mit Vorschl gen f r die Erweiterung der Ausdrucksm chtigkeit von ODL 6 1 1 Teilmengen unendlicher Typen F r Datentypen mit endlicher Dom ne z B Boolean oder Component ist es m glich Teil mengen des Typs zu verwenden die ber eine Restriktion definiert werden So definiert die Re striktion c Component neg isEmpty c SubComponents alle Komponenten die mindestens eine Unterkomponente haben F r unendliche Datentypen wie Int und String be steht zurzeit keine M glichkeit Teilmengen des Typs zu verwenden da eine Restriktion der Form var base type restriction term nur dann angewendet werden kann wenn der Ba sistyp iterierbar ist was bei unendlichen Typen n
184. ion Typ caseARestrictedTypeDefinition outARestrictedTypeDefinition IntroducedType MetalntroducedType outASetExpressionType Eingef hrter Typ outASetVariableType constructMetalntroducedType F r alle zusammengesetzten Typen die das Interface Met acompositeType implementie 5 1 ERWEITERUNG DES SPRACHUMFANGS 55 ren wurde die abstrakte Werte Klasse CompositeValue eingef hrt Ihre Unterklasse Pro ductValue stellt Werte des Typs Met aProduct Type dar sie enth lt ein Tupel von Werten deren Typen genau den spezifizierten Elementtypen im zugeordneten MetaProductType entsprechen m ssen Hierbei spielt die Klasse MetaCompositeType die Rolle des Kom positums GammaEtAl S 239 253 in der MetaType Hierarchie und CompositeValue spielt die Rolle des Kompositums f r Werteklassen da f r Werteklassen keine eigene Ober klasse festgelegt wurde tritt java lang Object als Oberklasse f r alle Werteklassen auf F r den Typ MetaSetType die Werteklasse SetValue erstellt eine SetValue Instanz enth lt eine Kollektion von beliebig vielen Werten des Basistyps der Menge der im zugeordne ten MetaSetType spezifiziert wird Eine wesentlichen Funktionalit t der MetaType Unterklassen ist die R ckgabe eines Itera tors ber die Werte des repr sentierten Typs der zur ckgegebene Iterator muss das Interface java util Iterator implementieren Daf r wird im Interface MetaType die Metho de Iterator instances definiert
185. iqentifier al alnum Whitespace amp comments blank eol comment onelined_comment multiline_comment Ignored Tokens blank comment Productions odl_start proposition proposition named_predicate named_predicate_declaration named predicate declaration identifier l_par type list r par assign ccl proposition proposition unop unary_proposition and proposition and unary_proposition or proposition or unary_proposition implies proposition implies unary_proposition equiv proposition equiv unary_proposition In a ccl proposition no post relation result and no quantors context and new are allowed ccl proposition unop ccl unary proposition and ccl proposition and ccl unary proposition ccl proposition or ccl unary proposition implies ccl proposition implies ccl unary proposition equiv ccl proposition equiv ccl unary proposition unary proposition neg neg unary_proposition quantifier quantifier variable definition dot unary_proposition new_quantifier new quantifier model element variable definition dot unary proposition named predicate named predicate call term term ccl unary proposition neg neg unary proposition quantifier ccl quantifier variable definition dot ccl unary proposition named predicate named predicate call ANHANG ODL GRAMMATIK IN DER SABL
186. itgewinne bei der Auswertung gegen ber der quivalenten nicht optimierten Formulierung var x1 Ty x2 x3 T4 x5 Ts p x1 p2 x4 pa xi p4 x2 x3 A Ps X1 32 4 A P7 X1 5 ist jedoch gleichzeitig viel un bersichtlicher Genau das ist auch der Grund daf r dass die Integration dieser Optimierung in das ODL Auswertungssystem von gro em Vorteil w re denn es ist einem Benutzer kaum zuzumuten ODL Abfragen selbst so weitgehend zu optimieren dass sie wie die obige optimierte Typdeklaration aussehen Bei der Implementierung ist folgender Aspekt zu beachten die ODL Notation schreibt im Unter schied zu der im Algorithmus verwendeten vereinfachten Notation die Verwendung von Selektoren zum Zugriff auf Elemente des Basistyps eines eingeschr nkten Typs vor die korrekte Schreibweise f r den Zugriff auf die Basistyp Elemente in unserem Beispieltyp w re also xari xt Tl xA2 T2 x3 T9 x4 T4 xx5 T5y pl var x1 and p2 var x4 and p3 var xl var x2 and p4 var x2 var x3 and pb var xl var x2 var x3 and var x3 var x4 and p7 var xl var x3 var x5 In der optimierten Formulierung m sste beispielsweise das Pr dikat im Restriktionsterm sogar kompliziertere Selektorausdr cke verwenden p7 var v1234 v123 v12 x1 var v1234 v123 x3 var x5 Wie sich damit zeigt entsteht bei der Umformulierung eines eingeschr nkten Typs das Problem dass die Namen der
187. itor weitergereicht der dann die Meldung User cancelled querying the variable anzeigt Die Auswertung der ODL Abfrage wird damit abgebrochen throw new UserBreakException User cancelled querying the variable variableldentifier else if navigationEvent getEventType NavigationEventException BACKWARD STEP F r einen R ckw rtsschritt wird eine BackwardStepException abgesetzt sie wird vom vorhergehenden context Quantor im Auswertungsbaum abgefangen dieser wird dann die Eingabe seiner Variablen wiederholen und die Auswertungs seines Quantorterm wieder starten throw new ContextQuantifier BackwardStepException catch ContextQuantifier BackwardStepException Eine BackwardStepException wurde abgefangen die von einem nachfolgenden Quantor im Auswertungsbaum erzeugt wurde In diesem Fall muss die Eingabe der Variablen wiederholt und die Auswertung des Quantorterms mit dem neuen Wert wieder gestartet werden Dies wird durch die while true Schleife gew hrleistet di da hier keine Exception geworfen und kein Wert zur ckgegeben wird einfach f r die Wiederholung des try Blocks sorgt 86 KAPITEL 5 IMPLEMENTIERUNG Interne Klasse BackwardStepException Diese Exception wird von einem context Quantor erzeugt wenn ein R ckw rtsschritt durchgef
188. iver2 omponent Database omponent Process 1 omponent Process2 omponent Till1 omponent Connection 1 Previous Cancel Next gt gt Variable Value comp1 Centrale Component Abbildung 4 6 Auswahl einer Komponente Die Eingabe eines Produktwerts kann abgeschlossen werden wenn f r alle Produkttyp Elemente ein zul ssiger Wert eingegeben wurde 4 2 4 Eingabe von eingeschr nkten Typen Ein eingeschr nkter Typ unterscheidet sich von seinem Basistyp nur durch die angewendete Restrikti onsbedingung Deshalb gleicht der Eingabedialog f r einen eingeschr nkten Typ dem Eingabedialog f r seinen Basistyp So w rde der Eingabedialog f r die Abfrage context var v cl Component c2 Component b Boolean 4 10 is SubComponents v cl v c2 true genauso aussehen wie der Eingabedialog f r die Abfrage 4 9 auf der Abbildung 4 7 nur die ber schrift im Eingabebereich w rde Restricted type variable var anstatt Product type variable var lauten Der wichtige Unterschied in der Funktionsweise ist dass die Eingabe nur dann abgeschlossen werden kann wenn der eingegebene Wert des Basistyps die Re striktionsbedingung erf llt Bei der Abfrage 4 10 w rde der Next Button des Eingabedialog nur dann aktiviert wenn c2 Unterkomponente von c ist 4 2 5 Eingabe von Mengen Der Eingabebereich des Eingabedialogs f r Mengen ist komplexer als alle anderen Eingabebereiche und
189. juseq ueajooq srenba Anug kr Sse O sse O uelsunn 8 Fumg Sumgot 1ur poOuspu ueo o0q od LIenb JOje1oj sooue sur 1 qO Ki nb uelsu AA u Ha EU DOLL SSOIDY 1991 5539977 EEGEN 1oj nnsuoO 1o nnsuoO1u tu qm potu WIIOSSIVOU SCI STIER AA UL S uoneooTppour Sums ddAL NOLVWOLNV ALILNAF SECH AU LYOd ALLLNA Sue d TINNVHO ALILNd Zone 24 AL INSNOdWNOO PproA Aldde Fumg Sumgot 1 Sse O sse O 3ue sun 8 d Lia ed LRayooursupos uvo ooq an eA ed UNS LUONPUOZIFH 12 29 posegio4 p osegio84 ueo o0q od Ljenba palgo A onb Jojero3 o qenesop 10je1o o qenesosoouejsun JOjeJoj sooug sun sodA 1 Ums Sumsor prox sarouopuedoqo qerr A uvo o0q juopuedoqst uvo o0q juopuedoqsi uorsso1dxg uorsso1dxgnos add Lia ad perejuoouvisupie34 palgo A onb ue ooq urpuroq ltur4st JOjeloj sooue sur ssu
190. llenden Variablenbelegungen f r die der Term das gew nschte boolesche Ergebnis liefert bei der Aus wertung des Terms erstellte neue Entit ten sowie Modifikationen an vorhandenen Entit ten Ein Term stellt also im Unterschied zu einer Expression einen logischen Ausdruck dar der auch Quantoren und Relationsoperatoren enthalten darf Sowohl in der Te rm Hierarchie als auch in der Expression Hierarchie findet das Komposi tum Entwurfsmuster GammaEtAl S 239 253 Anwendung Bei den Expressions spielen beispiels weise SelectorExpression und ArithmeticExpression die Rolle des Kompositums bei den sind es Quant ifier Junction und einige weitere Klassen Ausgehend von dem beschriebenen Aufbau des ODL Abfrage Verarbeitungssystems bedarf die Hier muss der Vollst ndigkeit halber auf die nicht immer konsequente Benennung von ODL Auswertungsklassen hin gewiesen werden Einige Klassen die in Wirklichkeit ein Term sind enthalten die Bezeichnung Expression in ihrem Namen wie beispielsweise die Klasse EqualExpression die einen Term implementiert der zwei Werte auf Gleichheit berpr ft 5 1 ERWEITERUNG DES SPRACHUMFANGS 47 Einf hrung eines neuen Sprachkonstrukts oder die nderung eines bestehenden Sprachkonstrukts dreier Schritte zur Implementierung 1 In der SableCC Grammatik von ODL muss die Produktionsregel f r das neue Konstrukt eingef hrt werden bzw die bestehende Regel ge ndert werden 2
191. llung ausw hlen kann Eine ausf hrlicher Kommentar zu QueryConfigurationDialog findet sich im Quellcode und in ODLAPI Navigationsleiste Die Navigationsleiste die in Eingabedialogen zum Einsatz kommt wurde im Rahmen eines fr heren Projekts erstellt und befindet sich im Package quest dialogs navigationBar 74 KAPITEL 5 IMPLEMENTIERUNG Eine ausf hrliche Beschreibung der Navigationsleiste und dazugeh riger Klassen gibt es in Tracht S 22 25 Wir werden hier daher nur kurz die grundlegenden Funktionen und geringf gi ge Erweiterungen der Navigationleiste erl utern Eine Navigationsleiste wird in Vorg ngen verwendet die in mehreren Schritten ablaufen um zwi schen den einzelnen Schritten zu navigieren Sie bietet daf r die Buttons Previous Next und Cancel Abbildung 5 14 sowie optional einen Finish Button Jeder Navigationsbutton kann aktiviert oder de aktiviert werden Bei der Bet tigung eines Navigationsbuttons durch den Benutzer wird ein Ereignis NavigationBarEvent generiert das an alle angemeldeten Beobachter NavigationBar Listener weitergeleitet wird Eine Kontrollklasse die den Ablauf eines Vorgangs steuert muss sich also als Beobachter bei der Navigationsleiste eintragen Die Klasse AbstractQueryDialog benutzt eine interne anonyme Beobachterklasse um auf Navigationsereignisse zu reagieren Weiterhin bietet eine Navigationsleiste zwei Textbereiche an in denen ein Hinweistext und eine textuelle Information
192. lt mit der Operation Definition Language ODL eine Sprache zur Transformation von AutoFocus Quest Modellen zur Verf gung Die Sprache stellt eine Erweiterung der Pr dikatenlogik erster Stufe dar definiert auf dem Metamodell von Auto Focus Quest hnlich zu OCL erlaubt sie die Definition von Konsistenzbedingungen Zus ztlich eig net sie sich dank ihres operationellen Charakters zur Definition von Operationen auf AutoFocus Quest Modellen Um die bei der Ausf hrung von Operationen notwendigen Benutzerinteraktionen z B Auswahl von Komponenten Eingabe von Strings durchf hren zu k nnen soll der ODL Interpreter eine Benutzerschnittstelle automatisch zur Verf gung stellen Konkrete Aufgabenstellung Im Rahmen der Diplomarbeit sollte das AQuA System hinsichtlich folgender Aspekte erweitert wer den e Die Ausdrucksm chtigkeit von ODL sollte erweitert werden e Eine interaktive Benutzerschnittstelle f r die Auswertung von ODL Abfragen sollte entwickelt werden F r die Erweiterung der Ausdrucksm chtigkeit sollte ODL um folgende Sprachkonstrukte erg nzt werden e Produkttypen Bildung des kartesischen Produkts ber bereits definierte Typen e Mengenkomprehension Bildung von Teilmengen bereits definierter Typen die ber eine Re striktionsbedingung charakterisiert werden Mengentypen Bildung von Kollektionen von Werten bereits definierter Typen Benamte ODL Pr dikate Definition von parametrierten Pr dikaten mit ODL Terme
193. m sste was nicht besonders benutzerfreundlich ist Um hier Abhilfe zu schaffen muss die Dialogflusskontrolle des ODL Query Subsystems erweitert werden Daf r gibt es zwei M glichkeit die sich in Implementierungsaufwand und der resultierenden Flexibilit t unterscheiden Wir wollen sie im folgenden besprechen und ihre Vorteile und Nachteile er rtern 1 Die einfachere M glichkeit ist eine Erweiterung des bestehenden Systems indem jeder cont ext Quantor sich den zuletzt eingegebenen Wert merkt und falls ein R ckw rtsschritt vorgenommen wurde bei der R ckkehr zu ihm diesen Wert anzeigt Dabei muss allerdings eine Analyse vor genommen werden ob der gespeicherte Eingabewert in der jetzigen Situation berhaupt m glich w re Betrachten wir die Beispielabfrage context c Component context p element c Ports true Falls bei dieser Abfrage der Benutzer vom zweiten context Quantor zum ersten zur ckkehrt dort eine andere Komponente ausw hlt und dann wieder zum zweiten context Quantor ber geht so wird der fr her ausgew hlte Port nicht mehr g ltig sein weil er zur fr her ausgew hlten Komponente nicht aber zur aktuell ausgew hlten Komponente geh rt und deshalb jetzt gar nicht ausgew hlt werden k nnte In einer solchen Situation muss der Eingabedialog f r den zweiten context Quantor mit leerer Auswahl starten Solche G ltigkeitspr fungen m ssen zwar bei jedem Wiedereintritt in einen zuvor verlassenen Eingabedialog vorgeno
194. mmen werden stellen aber keine gro e Schwierigkeit dar denn es ist be kannt zu welchem Typ ein einzugebender Wert geh rt es ist gerade der Typ der abgefragten Variablen und es ist ganz einfach m glich f r einen abgespeicherten Wert zu berpr fen ob er zu einem gegebenen Typ geh rt je nach Datentyp muss man ber alle Typwerte iterieren und sie mit dem abgespeicherten Wert vergleichen oder es muss falls es sich um einen ODL Grundtyp handelt z B Boolean oder Integer gar keine berpr fung vorgenommen werden 2 Eine wesentlich aufw ndiger zu implementierende und gleichzeitig viel flexiblere L sung w r de das Konzept von Kontrollklassen zur Auswertung von ODL Abfragen darstellen Im Rahmen des bereits angesprochenen Systementwicklungsprojekts wurde eine auf den konkreten Anwen dungsfall spezialisierte Kontrollklasse entwickelt die f r den dreischrittigen Vorgang der Kanal b ndelauftrennung die Navigation zwischen den Eingabedialogen f r die einzelnen Teilschritte erlaubte bei der sowohl R ckw rtsschritte mit Beibehaltung von get tigten Eingaben als auch Vorw rtsschritte m glich waren Tracht S 40 47 Bei einem Vorw rtsschritt wurden die abge speicherten Eingaben hinsichtlich ihrer Kompatibilit t mit den neuen Eingaben aus vorherigen Teilschritten berpr ft und ung ltig gewordene Teile der abgespeicherten Eingaben gel scht F r ODL Abfragen gestaltet sich die Situation komplizierter weil hier beliebige Abl uf
195. n in denen kein Wert ausgew hlt ist gefil tert werden was ebenfalls eine betr chtliche Zeit beanspruchen kann wenngleich nicht mehr als die Zeit f r die initiale Filterung vor dem ffnen des Eingabedialogs Wie wir sehen h ngen die Nachteile die zur Laufzeit w hrend der Benutzereingaben zutage tre ten mit der hohen Rechenintensit t der Filterung zusammen Deshalb k nnte zur Senkung des Zeitbedarfs bei der Filterung auf den Optimierungsalgorithmus f r die Auswertung eingeschr nk ter Typen zur ckgegriffen werden der im Abschnitt 6 2 2 vorgestellt wurde 5 Kombination aus mehreren Verbesserungsvorschl gen Die Verbesserungsvorschl ge 1 2 und 4 k nnen gleichzeitig implementiert werden dabei ist 3 ein Spezialfall von 4 sodass nur eine der beiden M glichkeiten implementiert werden sollte Es w rde deshalb Sinn machen mehrere Optimierungen zu realisieren und dann dem Benutzer die Auswahl zwischen konkurrierenden Ans tzen hier sind es nur 2 und 4 zu erm glichen Der Benutzer k nnte also abh ngig von dem aktuell abgefragten eingeschr nkten Typ im Eingabedia log ausw hlen ob alle Basistyp Werte welche die Restriktionsbedingung erf llen in einer Liste aufgef hrt werden sollen oder ob einzelne Auswahllisten f r die Basistyp Elemente angezeigt und gefiltert werden sollen 6 4 Konzept einer flexiblen Dialogflusskontrolle In diesem Abschnitt werden verschiedene M glichkeiten zur Erweiterung und Verbesse
196. n AutomatonEntityToStringFormatter ChannelEntity ToStringFormatter ComponentEntityToStringFormatter und PortEntity ToStringFormatter erstellt Sie erzeugen Stringrepr sentationen von Entit ten des jewei ligen Typs die den Namen und eventuelle weitere Informationen ber die Entit ten z B den zugewiesenen Datentyp bei Ports Formatierer f r zusammengesetzte Typen Die Klasse CompositeValueToStringFormatter dient zur Darstellung von zusammen gesetzten Werten indem sie die Stringrepr sentationen der Elemente des zusammengesetzten Werts durch entsprechende ObjectToStringFormatter erzeugt und diese anschlie end zu einem String konkateniert Sie spielt damit die Rolle des Kompositums in der Object To StringFormatter Hierarchie Formatierer f r Mengentypen SetTypeValueToStringFormatter benutzt zur Darstellung einer Menge den als Parame ter bergebenen Ob ject ToStringFormatter f r den Basistyp der Menge dieser berechnet die Stringrepr sentationen aller Mengenelemente die dann vom SetTypeValueToString Formatter zu einem String konkateniert werden der die Menge darstellt Die Abbildung A 12 im Anhang A zeigt das Klassendiagramm der im ODL System verwendeten ObjectToStringFormatter Klassen Package quest odl evaluation model query factory Das factory Package enth lt Fabrikklassen f r fast alle Komponenten aus dem Package quest odl evaluation model query dialog und einige von den Fabrik
197. n Kollektionen names und values befinden beide Kollektionen m ssen von gleicher Gr e sein Die Methode Component getDisplayComponent liefert wie schon die gleichnamige Methode in der oben behandelten Klasse Set ValueDisplay eine Instanz von java awt Component die die Variablenwerte darstellt Die abstrakte Klasse AbstractValuesDisplay implementiert viele der in Values Display definierten Methoden und dient als Oberklasse f r konkrete Implementierungen ei ner Werteanzeige 72 KAPITEL 5 IMPLEMENTIERUNG alues for the set intSet Remove Enter integer value for intSet 11 Enter integer value for intSet 9 Add Clear Abbildung 5 11 SetTypeQueryInputPanel mit TableSetValueDisplay Die Klasse DefaultValuesDisplay liefert eine konkrete Implementierung f r eine Wer teanzeige Sie ist allerdings nicht selbst f r die Darstellung von Variablenwerten zust ndig son dern bildet eine Indirektionsstufe die eigentliche Anzeige wird an eine Instanz von Values DisplayComponent delegiert Diese Indirektion wird vorgenommen um die Verwaltung der anzuzeigenden Variablenwerte von ihrer Darstellung zu trennen und damit verschiede ne Darstellungen bei gleichbleibender Verwaltung der Variablenwerte zu erm glichen Hier bei handelt es sich somit um eine lokale leichtgewichtige Implementierung des Model View Controller Paradigmas S 5 8 DefaultValuesDisplay spielt
198. n Kompo nente 36 KAPITEL 4 ERWEITERUNG VON ODL 4 2 7 Konfiguration der Eingabeschnittstelle Wie bereits fr her erw hnt k nnen f r die Eingabedialoge f r verschiedene Datentypen diverse Ein stellungen vorgenommen werden darunter der Typ des zu verwendenden Dialogfenster die Art der Werteanzeige usw Beim ffnen des Konfigurationsdialogs werden die aktuellen Einstellungen angezeigt Nach der nderung der Einstellungen k nnen sie entweder mit dem OK Button bernommen oder mit dem Cancel Button verworfen werden Im Folgenden erl utern wir die m glichen Einstellungen f r alle Datentypen Der Konfigurationsdialog wird im dem ODL Editor ber den neuen Men punkt Options Query Options aufgerufen Abb 4 13 e ODL Constraints Interpreter 0 4 0 x File Edit View Project Options Help Dag pg gt context comps c1 Component c2 Component true Abbildung 4 13 ODL Editor Aufruf des Konfigurationsdialogs F r jeden der Datentypen Boolean Int String Entity IntroducedType Product Type und SetType enth lt der Konfigurationsdialog ein Konfigurationspanel in dem die Einstel lungen f r die Eingabe von Werten des jeweiligen Typs eingesehen und ver ndert werden k nnen Die Konfigurationspanels sind in einem hohen Fenster untergebracht das ber eine vertikale Bild laufleiste gescrollt werden kann Die Konfigurationspanels sind f r alle Datentypen bis auf SetType in gleicher Weise
199. n ListCellRenderer und eine von TableCellRenderer erstellen zu m ssen wurde die Implementierung eines Cellrenderers von der Berechnung der Stringdarstellung eines Objekts abgekoppelt Zu diesem Zweck wurde das Strategie Entwurfsmuster wie folgt implementiert das Inter face ObjectToStringFormatter aus dem Package quest dialogs cellRenderers 5 2 INTERAKTIVE BENUTZERSCHNITTSTELLE 75 formatters ist der Ausgangspunkt f r alle Klassen die Stringdarstellungen von Objekten erstel len Die einzige Methode die in diesem Interface definiert wird ist String objectToString Object object DefaultObjectToStringFormatter ist eine konkrete Implementie rung die auch als Oberklasse f r weitere Formatierer geeignet ist weil sie einige Methoden im plementiert welche die Realisierung neuer Formatierungen erleichtern Die Klassen Format tableListCellRenderer und FormattableTableCellRenderer benutzen Object ToStringFormatter Instanzen um die Stringrepr sentation der darzustellenden Objekte zu er halten Eine ausf hrliche Beschreibung dazu findet sich in Tracht S 25 28 Um Werte verschiedener ODL Datentypen in Listen und Tabellen darstellen zu k nnen wur den im Package quest odl evaluation model cellRenderers formatters folgen de Unterklassen von DefaultObjectToStringFormatter erstellt Formatierer f r Entit ten F r die Entit ten vom Typ Automaton Channel Component und Port wurden die entspre chenden Formatierklasse
200. n als R mp fen Selektorausdr cke Zugriff auf Relationen von Entit ten und auf Elemente von Produkttypen mittels der Selektoren Hierf r waren neben der Erweiterung der ODL Grammatik die neuen Typen in das ODL Typsys tem zu integrieren und die Evaluationsfunktionen f r die neuen und erweiterten Sprachkonstrukte zu realisieren 6 KAPITEL 1 EINLEITUNG F r die Durchf hrung von Benutzerinteraktionen die im Laufe der Auswertung von ODL Ab fragen notwendig sein k nnen war eine Benutzerschnittstelle zu realisieren welche f r jeden ODL Datentyp die Eingabe von Werten durch den Benutzer erm glicht Als optionale Ausbaustufe sollte f r die Benutzerf hrung die Unterst tzung der R ckkehr zu fr heren Schritten sowie die M glichkeit des Abbruch einer Operation implementiert werden 1 2 Gliederung In diesem Abschnitt wollen wir die Gliederung der vorliegenden Arbeit vorstellen Im Kapitel 2 wird ein kurzer berblick ber das AutoFocus QUEST Framework gegeben in des sen Rahmen die Arbeit durchgef hrt wurde und die Motivation f r die Entwicklung von ODL erl u tert Im Kapitel 3 werden die konzeptionellen Grundlagen von ODL sowie die erste ODL Implemen tierung beschrieben Das Kapitel 4 schildert die durchgef hrten Erweiterungen am Sprachumfang und bietet im Ab schnitt 4 2 eine Beschreibung der entwickelten interaktiven Benutzerschnittstelle die auch als Benut zerhandbuch f r die Benutzerschnittstelle dient Im K
201. n auf Sch01 wo die Operation Definition Language ODL vorgestellt wurde Als Erstes wollen wir die Formalisierung des Metamodells beschreiben die f r die Definition von ODL Anwendung fand Ein Metamodell MM besteht aus einem Paar ME MR wobei ME eine Familie von Metamodellentit ten ME ME ME und MR eine Familie von Metamodellrela tionen MR MR MR ist Eine Metamodellrelation ist eine Relation von Metamodellentit ten der Form MR C x X mit k gt 0 Metamodellentit ten sind paarweise disjunkte Mengen von Modellementen Modellelemente oder auch Entit ten sind damit Instanzen von Metamodellelementen So w ren Komponente oder Port Metamodellelemente w hrend eine Komponente Compl oder ein Port Slot1 Entit ten sind Der Einfachheit halber werden Attribute von Metamodellentit ten als Spezialfall von Relationen formalisiert wenn eine Metamodellentit t E ein Attribut attr des Typs type hat so interpretieren wir es als Relation RE AG E x type In ODL verwenden wir folgende Notation ein Attribut attr der Entit t e wird als e attr geschrie ben Relationsinstanzen einer Metamodellrelation RC Ej x Eg zwischen Entit ten e E werden als R e ex notiert ODL Abfragen operieren auf Produktmodellen die auf einem Metamodell basieren In dieser Hinsicht gibt es eine Analogie zwischen SQL und ODL wobei folgende Entsprechungen zwischen QUEST Modellen und Datenbanken gelten ODL
202. n comp nicht aber f r jede Belegung von port n tig ist Der Benutzer kann hier die Abfrage explizit so umformulieren wie dies auch von dem vorgestellten Positionierungsalgorithmus geleistet w rde context comp Component context subComp element comp SubComponents 6 2 exists port Port true 104 KAPITEL 6 VERBESSERUNGSM GLICHKEITEN Algorithmus 1 Neupositionierung verschiebbarer Quantoren quantorList Liste aller Quantoren aus der ODL Abfrage in der Reihenfolge ihres Auftretens if not quantorList isEmpty then firstQuantor quantorList first co Markierungen f r den Anfang und das Ende der ODL Abfrage in quantorList einf gen oc quantorList insertAsFirst START MARK quantorList insertAsLast FINISH MARK else firstQuantor null end if leftLimit START MARK co Hauptschleife oc while firstQuantor Z null do if Ein oral1 Quantor ist hinter firstQuantor vorhanden then rightLimit Gefundener n chster 0ra11 Quantor hinter firstQuantor else rightLimit FINISH MARK end if co Quantoren zwischen leftLimit und rightLimit neu positionieren oc quantor quantorList nextAfter leftLimit while quantor Z rightLimit do co Position f r quantor finden oc posQuantor quantorList previousBefore quantor co Bis zur linken Verschiebungsgrenze oder bis zu einem Quantor zur ckgehen von dessen Variablen quantor variable abh ngig ist oc while posQuantor Z leftLimit and quantor variable ist von posQuantor vari
203. n getProductTypeQueryInputPanelProdu cer und setProductTypeQueryInputPanelProducer wird konfiguriert wel che Eingabepanel Producer Klasse und damit welches Eingabepanel f r die Eingabe von Produkttypen benutzt werden soll ValuesDisplayComponentProducerManager F r die Einstellung welche Werteanzeige Komponente f r die Anzeige von Werten be reits bekannter Variablen in Eingabedialogs f r Produkttypen benutzt werden soll werden die neuen Methoden getProductTypeValuesDisplayComponentProducer und setProductTypeValuesDisplayComponentProducer erstellt KAPITEL 5 IMPLEMENTIERUNG Wie wir sehen ist eine betr chtliche Anzahl von nderungen f r die Einf hrung eines neuen ODL Datentyps vorzunehmen Nichtsdestoweniger wird der notwendige Implementierungsauf wand weitestgehend durch den Aufwand f r die Erstellung des Eingabepanels f r den neuen Datentyp bestimmt weil alle anderen nderungen mit geringem Aufwand durchf hrbar sind e Einf hrung eines neuen Eingabepanels am Beispiel von ListQueryInputPanel Ein neues Eingabepanel zur Benutzung in Eingabedialogen kann vergleichsweise schnell in das ODL Query Subsystem integriert werden Ein Eingabepanel wird als Unterklasse der abstrak ten Klasse QueryInputPanel oder einer ihrer Unterklassen erstellt Die zu implementie rende Eingabeliste erlaubt dem Benutzer die Eingabe des Werts durch die Auswahl aus der Liste aller verf gbaren Werte daher wird sie als Unterklasse von SelectionQue
204. nd k nnen Produktmodelle unterein ander austauschen Die Abbildung 2 3 zeigt die Komponente deren Strukturdiagramm auf der Abbil dung 2 1 dargestellt ist als Baumdiagramm im QUEST Browser Ausf hrliche Informationen zum Arbeiten mit dem QUEST Tool gibt es im Benutzerhandbuch QuestUser Technische Information zur Implementierung von QUEST liefert das Entwicklerhand buch QuestDev 2 1 MODELLIERUNGS UND VALIDIERUNGSFRAMEWORK AUTOFOCUS QUEST 9 Model Validator D J xl File Edit Test Generate Options Help KU Repository S Load Property on Wed Sep 22 08 41 49 GMT 03 30 1999 e 9 mM New Property Li Com N e version DTDs of bank lew Abstraction t CBP Edit Abstraction fbank 58 C E M Ds of bank 9 oO C Set Maxint oc Start SMV SMV Options Behaviour 0 MessageFlag 0 Start BMC efaultBehaviour 0 4 MessageFlag 0 Start OCL tBehaviour 0 MessageFlag 0 ODL Editor efaultBehaviour 0 MessageFlag 0 Simulator e ii DefaultBehaviour 0 MessageFlag 0 Export to Mucke DefaultBehaviour 0 MessageFlag 0 Unused DTD Elements Determinism Check Sequence Check e oO c Export to VSE e oO Component Connection El Component Till2 oO Component Connection2 SIGNAL Abbildung 2 2 QUEST Browser und Verifikationsmen Model Validator x File Edit Test Verify Generate Options Help oO Component Centrale Parts
205. nderen Klassen Im SableCCGenerator erben folgende Klassen von DepthFirstEvalTreeVisitor Adapter ContextQuantifierDisplayVariablesSetter wird benutzt um in einem ODL Auswertungsbaum bei allen context Quantoren einzutragen welche Variablen zum Zeitpunkt der Auswertung dieses Quantors bekannt sind und dem Benutzer im Ein gabedialog f r die vom Quantor gebundene Variable angezeigt werden m ssen ContextQuantifierBackwardStepSetter analysiert einen ODL Auswertungs baum und spezifiziert f r alle context Quantoren ob im Eingabedialog f r den betref fenden Quantor ein R ckw rtsschritt m glich ist s auch Abschnitt 5 2 3 Schlie lich verwenden folgende Klassen private Unterklassen von EvalTreeVisitor Adapter Klassen im Package quest odl evaluation model query dialog QueryDialogManager Klassen im Package quest odl evaluation model query factory QueryFactoryManager ValuesDisplayComponentProducerManager QueryInputPanelProducerManager AbstractObjectToStringFormatterFactory Jede dieser Klassen f hrt f r verschiedene ODL Datentypen verschiedene Aktionen aus Die Unterklassen von EvalTreeVisitorAdapter werden hier verwendet um die Ausf hrung der richtigen Aktion f r eine als Parameter bergebene MetaType Instanz zu erm glichen mit ihrer Hilfe wird festgestellt um welchen Datentyp es sich bei dieser MetaType Instanz handelt und die diesem Datentyp entsprechende Aktion wird ausgef
206. ndition ConditionedlIterator Condition currentElement Object currentElementA vailable boolean ConditionedIterator hasNext boolean next Object remove void resetCurrentElement void ResettableConditionedIterator ResettableConditionedlterator reset void SimpleStack SimpleStack top Object pop Object push void size int empty boolean iterator Iterator Abbildung A 7 Package quest util collections Kollektionen und Iteratoren KLASSENDIAGRAMME ANHANG A 132 onisoduro jssooo1dge pro ed NPIL PINU Ploa 19 muengyssooo1dge prosaren so Aru nno pIoAz10gnuenQ oNnmno plod slay nuendpequarstxqino 0 Do aide 1 pourja A e20 Pas A pos 8 uro L L 1 SuseH s lqete A eao ploa ad proa ad proa Auge Nur proa Surnseioj ure 4 4 15 4 12 250 229 8 pror poo geou pro uone osoinqum vur PIOA UONE OYUONLIOOSSYUL PIOA PINUENTESIOATUNOSLO PtoA 101991 Sss 3oidg PtoA 1o1 l
207. nen Die abstrakte Klasse SelectionQueryInputPanel die wie schon QueryInputPa nel von der Idee her ein Interface ist definiert die Schnittstelle f r Eingabepanels die eine Kollektion von Werten entgegennehmen und diese dann dem Benutzer zur Auswahl anbieten AbstractSelectionQueryInputPanel implementiert einige Methoden von Selec tionQueryInputPanel und stellt die abstrakte Oberklasse f r Eingabepanels dar in denen die Eingabe ber die Auswahl eines Werts stattfindet Konkrete Implementierungen von SelectionQueryInputPanel sind die folgenden ListQueryInputPanel implementiert die Auswahl ber eine Liste die alle zur Aus wahl stehenden Werte auff hrt der Benutzer kann einen von ihnen selektieren Abb 5 6 5 2 INTERAKTIVE BENUTZERSCHNITTSTELLE 69 Zur Anzeige der angebotenen Werte wird eine Instanz von javax swing JList ver wendet zum Scrollen ber die Liste dient eine Instanze von javax swing JScroll Pane RadioButtonsQueryInputPanel implementiert die Auswahl ber eine Gruppe von Radiobuttons f r jeden Wert wird ein Radiobutton mit der Bezeichnung des Werts erstellt Abb 5 7 Es kann h chstens ein Radiobutton zur selben Zeit selektiert werden Bei der Im plementierung wurden Swing Klassen javax swing JRadioButton und javax swing ButtonGroup verwendet Select a Port for port Port 51041 Port 51072 Card Port Keypad1 Keys Port Keypad2 Keys Port RadiTime1 Date Port RadioTim
208. new Quantor mit dem vorangestellten Schl sselwort element wie jeder andere Typ ver wendet werden k nnen Zurzeit agieren Mengenvariablen und Ausdr cke die mengenwertige Ergeb nisse zur ckliefern als eingef hrte Typen s auch S 23 Das Eingabepanel welches Eingabedialoge f r eingef hrte Typen verwenden hnelt denen f r Metamodelltypen es handelt sich um ein Auswahlpanel als Liste oder Radiobuttons in dem ein Element des eingef hrten Typs auszuw hlen ist Betrachten wir folgende Beispiele f r die Eingabe des Werts eines eingef hrten Typs e Mengenvariable In der ODL Abfrage context intSet set Int context i element intSet true muss zun chst eine Menge von ganzen Zahlen eingegeben werden und danach ist eine der Zahlen aus der Menge intSet f r die Variable i auszuw hlen Die Abbildung 4 11 zeigt den f r die Variable i ge ffneten Eingabedialog nachdem f r intSet zuvor die Zahlen 1 3 5 8 12 15 eingegeben wurden Ausdruck mit mengenwertigem Ergebnis Als Beispiel f r die Auswahl eines Elements aus dem mengenwertigen Ergebnis eines Aus drucks betrachtet wir folgende ODL Abfrage context c Component context channel element c Channels true hier wird zun chst eine Komponente ausgew hlt und anschlie end muss ein Kanal aus der Liste aller zur Komponente geh renden Kan le ausgew hlt werden Abb 4 12 Generell ist die Auswahl eines Elements aus einer Menge falls m glich immer der Verwendung eines ents
209. ngstechnik findet breite Anwendung in Datenbanken um den Auf wand f r Selektionen zu senken die auf Kreuzprodukten mehrerer Tabellen stattfinden Im Abschnitt 3 1 haben wir bereits die hnlichkeit zwischen ODL und SQL angesprochen Tats chlich kann man eine ODL Abfrage der Form 106 KAPITEL 6 VERBESSERUNGSM GLICHKEITEN exists tuple p x1 Typel x2 Type2 6 5 P p xl and Q p x1 p x2 true leicht in eine SQL Abfrage bertragen wobei Tabellen die Rolle der ODL Datentypen spielen Re cords die Rolle der Typinstanzen erf llen und die Attribute x1 bzw x2 in den Records der Tabellen Typel bzw Type2 die Variablenwerte f r x1 bzw x2 repr sentieren select x1 x2 from Typel Type2 where P and Q Aus der datenbanktechnischen Sicht handelt es sich bei dieser Abfrage um die Bildung eines Kreuz produktes zweier Tabellen mit anschlie ender Selektion mit der Bedingung P and Q Der algebrai sche Ausdruck f r diese SQL Abfrage lautet demnach Typel x Type2 Da P nur Attribute der Tabelle Type1 n mlich das Attribut x1 enth lt l sst sich dieser Ausdruck nach den Regeln der relationalen Algebra zum folgenden Ausdruck umformen Op Type1 x Eine entsprechende SQL Abfrage w rde wie folgt aussehen select x1 x2 from select 1 from Typel where P Type2 where Q Wenn wir dieser SQL Abfrage in eine analoge ODL Abfrage bersetzen so erhalten wir genau die optimierte Formulierung der
210. nn sp ter in anderen Ausdr cken aufgerufen werden predicateName paraml typel param n type n CCL Proposition ber paraml param n 4 7 Wie bereits f r Restriktionsterme bei eingeschr nkten Typen darf die CCL Proposition rationen result not result sowie Quantoren new und context nicht enthalten Au erdem sind Rekursionen innerhalb benamter Pr dikate unzul ssig sowohl direkte Re kursionen der Form term1 ruft term1 auf als auch indirekte Rekursionen der Form term1 ruft term2 und term2 ruft term1 auf f hren zu einem Fehler bei der bersetzung der ben amten Pr dikate Zum Aufruf eines bereits definierten benamten Pr dikats aus einer anderen ODL Abfrage heraus wird das Schl sselwort ca11 benutzt Hier einige Beispiele nameCondition p Port is Name p Namel or is Name p Name2 or is Name p Name3 Nun kann man bequem die Abfrage exists ports pl Port p2 Port call nameCondition ports pl and call nameCondition ports p2 formulieren containsTrue boolSet set Boolean exists b element boolSet b true Die Abfrage exists bSet set Boolean call containsTrue bSet gibt nun alle Teilmengen von Boolean zur ck die den Wert true enthalten Und schlie lich noch ein komplexeres Beispiel Das benamte Pr dikat componentsConnected cl Component c2 Component exists ports pl element cl Ports p2 element c2 Ports exists chl element po
211. nnel or exists ch2 element ports p2 OutChannels ch2 ports pl InChannel Die nun erreichte Laufzeit betr gt gerade einmal 0 05 Sekunden was gegen ber der Ausgangsformu 96 KAPITEL 5 IMPLEMENTIERUNG lierung des Pr dikats der Verbesserung um einen Faktor vom mehr als 1000 entspricht Die Tabel le 5 14 fasst noch einmal die Optimierungsschritte in diesem Beispiel zusammen Schritt Optimierung Laufzeit auf dem Testsystem _ Ausgangsformulierung 68 Sekunden 1 Produkttyp statt Quantorliste 52 Sekunden 2 Einwertige statt mehrwertige Relation 48 Sekunden 3 Teilbedingungen aus dem Quantorterm in den Variablentyp ein 24 Sekunden bringen 4 Restriktionsterm aufspalten 2 7 Sekunden 5 Direkter Zugriff auf Relation statt einer Restriktion 0 4 Sekunden 6 Direkter Zugriff auf Relation statt einer Restriktion 0 05 Sekunden Tabelle 5 14 Auswertungszeiten der Beispielabfrage nach verschiedenen Optimierungsschritten Wie wir an dem aufgef hrten Beispiel sehen erm glicht die konsequente Anwendung der vorge stellten Optimierungstechniken eine Laufzeitverbesserung um mehrere Gr enordnungen Zugleich muss hier darauf hingewiesen werden dass die Zeitgewinne durch die Anwendung von Optimierungs techniken die sich in diesem Beispiel ergeben haben keine direkten R ckschl sse auf die allgemeine G te dieser Optimierungstechniken erlauben denn die Effizienz der e
212. nschr nkungsbedingung angewandt wird w hrend die zweite Ab frage nur ber die Kan le einer Komponente iteriert die von der mengenwertigen Assozia tion Channels geliefert werden Zudem m ssen die Relationstests is Channels c pair chl und is Channels c pair ch2 nicht mehr durchgef hrt werden Der Optimierungseffekt dieser Umformulierung ist umso gr er je gr er das gesamte Mo dell ist Teilweises Einbringen von Quantortermen als Restriktionsbedingung in den Variablentyp Der von einem Existenz oder Universalquantor gebundene Term kann teilweise als Restrikti onsterm in dem Typ der vom Quantor gebundenen Variablen eingebracht werden Das Ziel ist hierbei die Anzahl der Typinstanzen ber die der Quantor iteriert m glichst zu verringern und damit auch den Aufwand f r die Auswertung des nicht eingebrachten Teils des Quantorterms zu senken Betrachten wir als Beispiel die Abfrage exists pl Port pl Name 51051 and exists p2 Port exists ch Channel ch SourcePort pl and ch DestinationPort p2 Wir bringen die einfache Teilbedingung 1 Name 51051 aus dem Quantorterm in den Typ der Variablen p1 ein der dadurch zu einem eingeschr nkten Typ wird exists c Component exists pl p Port p Name Slotl exists p2 Port exists ch Channel ch SourcePort pl and ch DestinationPort p2 Die Auswertungszeit sinkt durch diese Umformulierung von 50 Sekunden auf weniger als 1 Sekunde Bei dieser Op
213. nt Driver2 Component Connection1 Component Driver 1 Component Driver2 Component Till2 Component Driver2 Component Centrale Component Database Component Driver2 Component Centrale Component Process1 Component Driver2 Component Driver 1 Component Process1 Component Driver2 Component Driver 1 Component Component Database Component Driver2 Component Connection1 Component Process1 Component Database Component Database Component Process1 Component Database Component Process1 Component Process1 Component Database Component Process2 Previous Cancel Next gt gt Abbildung 6 3 Auflistung aller zul ssigen RestrictedType Werte im Eingabebereich Angesichts der oben aufgef hrten Nachteile kann festgehalten werden dass die Eingabe eines RestrictedType Werts ber die Auswahl aus einer vollst ndigen Auflistung nur dann sinnvoll ist wenn der Basistyp des eingeschr nkten Typs nicht zu gro ist h chstens einige zehntausend Werte und die Anzahl der zul ssigen Werte welche die Restriktionsbedingung erf llen einige hundert nicht bersteigt Diese L sung kann daher nur als zus tzliche Eingabem glichkeit neben einer existierenden L sung implementiert werden die vom Benutzer im Eingabedialog w hrend der Eingabe eingeschaltet und wieder abgeschaltet werden kann Filterung des letzten auszuw hlenden Elements eines n elementigen eingeschr nkten Typs Im Rahmen von Trac
214. nwertiges Ergebnis zur ckgibt Vergleiche In der fr heren Version von ODL war f r die Auswertung von Gleichheitstermen bereits die Klasse EqualExpression vorhanden die f r zwei Ausdr cke beliebigen aber gleichen Datentyps feststellte ob sie ihre Ergebnisse gleich sind Mit den arithmetischen Ausdr cken wurden auch die Vergleichsterme eingef hrt die f r zwei Ausdr cke ebenfalls gleichen Typs ermitteln ob der erste gr er oder kleiner als der zweite ist Im Unterschied zum Gleichheitsterm k nnen bei Vergleichstermen nur Werte der Typen Int und String verglichen werden weil die entsprechenden Java Datentypen Integer und String das Interface java lang Comparable implementieren s auch JavaAPI Die nachfolgende Tabelle f hrt die Auswertungsklassen auf die f r Gleichheits und Ver gleichsterme zust ndig sind Klasse Arithmetische Operation SmallerExpression Test ob der erste Ausdruck ein kleineres Ergebnis lie fert als der zweite BiggerExpression Test ob der erste Ausdruck ein gr eres Ergebnis liefert als der zweite EqualExpression Test ob beide Ausdr cke gleiche Ergebnisse liefern Wie schon f r arithmetische Ausdr cke wurde f r Vergleiche die gemeinsame abstrakte Ober klasse ComparisonExpression erstellt die die Verwaltung der beiden Operanden eines Vergleichs bernimmt Obwohl nur Auswertungsklassen f r den Gr er Vergleich und den Kleiner Vergleich erstellt wur
215. og Fenster f r diesen Typ verwendet werden soll In der aktuellen Implementierung ist keine M glichkeit vorgesehen die Eingabedialog Einstel lungen w hrend der Ausf hrung einer ODL Abfrage zu ndern die Eingabedialoge sind modal so dass der Konfigurationsdialog w hrend der Eingabe nicht gestartet werden kann F r den Benutzer w re es jedoch von Vorteil wenn ein Eingabedialog w hrend der laufenden Eingabe an seine Bed rf nisse angepasst werden k nnte Der modulare Aufbau des ODL Query Subsystems l sst eine solche Erweiterung ohne gr eren Aufwand zu Hierf r m sste eine M glichkeit geschaffen werden den Konfigurationsdialog aus ei nem Eingabedialog heraus aufzurufen beispielsweise mithilfe eines zus tzlichen Options Buttons im Eingabedialog Die vom Benutzer vorgenommenen Einstellungen w rden dann sofort f r die laufen de Eingabe angewandt wobei je nach nderungen der Einstellungen der Eingabebereich oder der gesamte Eingabedialog neu initialisiert und angezeigt werden m sste 6 3 2 Verbesserungen bei der Eingabe eingeschr nkter Typen Eingaben von Werten eingeschr nkter Typen die bei der Auswertung von ODL Abfragen der Form context var localVar base type restriction term ausgef hrt werden stellen oft eine Schwierigkeit f r den Benutzer dar weil hier im Unterschied zu allen anderen ODL Datentypen nicht jeder g ltige Basistyp Wert auch eine zul ssige Eingabe dar stellt wie das bei anderen Typen ist Di
216. olean nextButtonIsFinishButton boolean nextButtonTitle String finishButtonTitle String jFinishButton javax swing JButton jInfoLabel javax swing JLabel jHintScrollPane javax swing JScrollPane jHintLabel javax swing JLabel jNextButton javax swing JButton jHintText javax swing JTextA rea jInfoScrollPane javax swing JScrollPane infoPanel javax swing JPanel jInfoText javax swing JTextArea jCancelButton javax swing JButton hintPanel javax swing JPanel buttonPanel javax swing JPanel jPreviousButton javax swing JButton NavigationBar initComponents void addNavigationBarListener void removeNavigationBarListener void removeA II NavigationBarListeners void actionPerformed void setSeparateFinishButton void isSeparateFinishButton boolean setNextlsFinishButton void nextIsFinishButton boolean setPreviousButtonEnabled void setCancelButtonEnabled void setNextButtonEnabled void setFinishButtonEnabled void isEnabledPreviousButton boolean isEnabledCancelButton boolean isEnabledNextButton boolean isEnabledFinishButton boolean disableNavigationButtons void apply NavigationButtonsMask void getInfoText String setInfoText void getHintText String setHintText void getInfoLabel String setInfoLabel void getHintLabel String setHintLabel void setHintVisible void isHintVisible boolean setInfoVisible void isInfoVisible boolean setPreviousButtonV isible void isPreviousButtonV isible boolean
217. ollte beim Entwurf und Optimierung von ODL Abfragen ber cksichtigt werden Mehr Informationen zum Entwurf effizienter Abfragen gibt es im Abschnitt 5 4 e Benamte Pr dikate F r die benamten Pr dikate waren zwei Anwendungsf lle zu implementieren 1 Deklaration eines benamten Pr dikats Beispiel compHasSubComps comp Component size comp SubComponents gt 0 2 Aufruf eines zuvor deklarierten benamten Pr dikats Beispiel exists c Component call compHasSubComps c Wir beschreiben nun die Implementierung beider Anwendungsfille 5 1 ERWEITERUNG DES SPRACHUMFANGS 57 Deklaration eines benamten Pr dikats Betrachten wir zun chst die Deklaration eines benamten Pr dikats Die semantische Ana lyse und die Kompilation des ODL Terms der den Rumpf eines benamten Pr dikats bildet unterscheidet sich nicht von der Verarbeitung eines ODL Terms in einer blichen ODL Abfrage Der Unterschied tritt erst bei der Behandlung des kompilierten ODL Terms zu Tage er wird vom SableCCGenerator nicht als Ergebnis der Kompilation an das aufrufende Objekt typischerweise eine Instanz von quest odl evaluation Eva luationModelGenerator zur ckgegeben sondern in einer Instanz der neuen Klasse NamedPredicate gekapselt und in einer internen Hashtabelle unter dem in der Pr di katsdeklaration angegebenen Namen f r sp tere Aufrufe gespeichert F r diese Sonderbe handlung sind im SableCCGenerator die Methoden outANamedPredicateodl
218. olt werden m ssen z B bei der Operation Verbin de zwei Komponenten durch drei Kan le die jeweils den Datentyp Int Float und String haben hier m sste der Benutzer ein und dieselbe Abfolge von einfachen Transformationen dreimal wiederholen Es w re also von Vorteil wenn die Abfolge von Transformationen festgelegt werden k nnte sodass der Benutzer nicht mehr jede einzelne einfache Transformation selbst ansto en m sste sondern nur die notwendigen Eingaben in einem automatisch ausgef hrten Vorgang machen k nnte Komplexe Transformationen bieten folgende Vorteile e Geringere Fehleranf lligkeit Wenn ein Benutzer die gleiche Transformationsabfolge mehrmals hintereinander ausf hren muss steigt die Wahrscheinlickheit f r Fehler die durch Verklicken Vertippen und an dere Fl chtigkeitsfehler des Benutzers zustande kommen Nicht zuletzt k nnte der Benutzer die Reihenfolge der Transformationen verwechseln was ebenfalls zu Fehlern f hren k nnte H here Effizienz Transformationen die vom Benutzer manuell ausgef hrt werden m ssen k nnen wesentlich mehr Zeit in Anspruch nehmen als gleiche Transformationen die automatisch ablaufen Dies ist vor Allem dann der Fall wenn mehrere gleiche Transformationen ausgef hrt werden m ssen e H here Benutzerfreundlichkeit Die mehrfache Durchf hrung ein und derselben monotonen Operationsabfolge kann sehr er m dend auf menschliche Benutzer wirken insbesondere wenn jede ausz
219. on ber alle Instanzen des eingeschr nkten Typs befinden sich in den Tabel len Hi H alle Werte der Basistyp Elemente die in mindestens einem Tupel vorkom men das die Restriktionsbedingung erf llt Die Werte der Basistyp Elemente aus Hi werden nun in den Auswahllisten f r die Elemente x1 des Basistyps angezeigt Wird der Wert f r ein erstes Basistyp Element x ausgew hlt so m ssen die restlichen n 1 Auswahllisten gefiltert werden Daf r wird ber alle Basistyp Tupel iteriert deren Element werte x1 x in den Tabellen Hj H enthalten sind und deren i tes Element auf den ausgew hlten Wert von x gesetzt ist Die Werte von Elementen x xi 1 Xij 41 Xn die in mindestens einem Tupel vorkamen das die Restriktionsbedingung erf llte werden in den Listen f r die Elemente x1 xj 1 xi 4 1 angezeigt Wird der Wert f r ein Basistyp Element x ausgew hlt 1 lt r lt n 1 nachdem Werte f r die Elemente x xj ausgew hlt wurden so werden die restlichen n r Elemente x mit Jetl n f i analog zum vorherigen Schritt gefiltert in den Auswahllisten f r die Elemente x werden nur diejenigen Werte angezeigt die in mindestens einem Basistyp Tupel vorkommen das die Restriktionsbedingung erf llt und in dem die Elemente x Xi auf die ausgew hlten Werte gesetzt sind r Wird bei einem fr her ausgew hlten Element x die Selek
220. or is SourcePort ch ports p2 and is DestinationPort ch ports pl Die sich ergebende Auswertungszeit von 24 Sekunden l sst sich nun durch die Aufspaltung des Re striktionsterms erheblich senken componentsConnected cl Component c2 Component exists ch Channel exists ports Plat portiPort as Ports cl post yr p2 port Port is Ports c2 port is SourcePort ch ports pl and is DestinationPort ch ports p2 or is SourcePort ch ports p2 and is DestinationPort ch ports pl Durch diese Optimierung f llt die Auswertungszeit auf 2 7 Sekunden Jetzt ersetzen wir die Restrikti onsbedingung durch den direkten Zugriff auf die Relation Ports zwischen Komponenten und Ports componentsConnected cl Component c2 Component exists ch Channel exists ports pl element cl Ports p2 element c2 Ports is SourcePort ch ports pl and is DestinationPort ch ports p2 or is SourcePort ch ports p2 and is DestinationPort ch ports pl Die Auswertungszeit verbessert sich jetzt auf 0 4 Sekunden Als Letztes ersetzen wir die auf den Kanal bezogenen Bedingungen im Quantorterm durch den direkten Zugriff auf die Relationen InChannel und OutChannels componentsConnected cl Component c2 Component exists ports pl element cl Ports p2 element c2 Ports exists chl element ports pl OutChannels chl ports p2 InCha
221. orts p2 InChannel or exists ch2 element ports p2 OutChannels ch2 ports pl InChannel Das benamte Pr dikat componentsConnected stellt f r zwei Komponenten fest ob sie durch mindestens einen Kanal verbunden sind e forall c Component exists c2 Component is SubComponents c c2 or exists a Automaton is Automaton a Mithilfe dieser Abfrage wird f r ein Modell die Konsistenzbedingung berpr ft dass jede Kom ponente eine Verfeinerung in Form von Unterkomponenten oder eines das Verhalten der Kom ponente bestimmenden Automaten besitzt e context c Component forall p element c Ports new locVar LocVariable result has Name locVar p Name and result has Type locVar p Type and result has LocVariables c locVar In einer vom Benutzer ausgew hlten Komponenten wird f r jeden Port eine lokale Variable erstellt die denselben Typ und Namen wie der Port hat Diese Variablen k nnen dann beispiels weise als Zwischenspeicher f r die von Ports empfangenen bzw versendeten Daten benutzt werden e context comps dest Component Src src Component size src SubComponents 0 forall subComp element comps src SubComponents result not has SubComponents comps src subComp and result has SubComponents comps dest subComp and forall channel element comps src Channels result not has Channels comps src channel and result has Channels comps dest channel
222. p nur solche Elementwerte ausw hlen kann f r die eine Auswahl der restlichen Elementwerte existiert die zusammen mit den bereits ausgew hlten Elementwerten eine zul ssige Eingabe f r den eingeschr nk ten Typ ergeben k nnen Anders ausgedr ckt wenn Werte f r die Elemente x xj be reits ausgew hlt sind so ist jeder der Werte f r x mit j 1 nj Mir ir der in der entsprechenden j ten Auswahlliste angezeigt wird in mindestens einem Basistyp Tupel enthalten das die Restriktionsbedingung des eingeschr nkten Typs erf llt Wie schon beim Vorschlag 3 muss das Erscheinungsbild des Eingabepanels gegen ber der aktuellen Implementierung nur unwesentlich ver ndert werden Insbesondere muss dem Be nutzer eine M glichkeit zur Verf gung gestellt werden die Filterung w hrend der Eingabe zu aktivieren oder zu deaktivieren indem er beispielsweise eine Checkbox Filter values setzt oder l scht Schlie lich m ssen wir auf die Probleme bei diesem Verbesserungsvorschlags eingehen Der Implementierungsaufwand ist h her als bei allen vorher vorgestellten Verbesserungsvor schl gen f r die Eingabe eingeschr nkter Typen Besteht der Basistyp aus vielen Elementen und oder ist der Restriktionsterm aufw ndig aus zuwerten so kann die Filterung vor dem ffnen des Eingabedialogs viel Zeit in Anspruch nehmen 6 4 KONZEPT EINER FLEXIBLEN DIALOGFLUSSKONTROLLE 119 e Nach jeder Auswahl eines Werts m ssen alle Liste
223. prechenden eingeschr nkten Typs vorzuziehen denn eine Abfrage der Form context var element entity SomeAssociation true ist stets effizienter und bequemer als eine Abfrage der Form context var v type is SomeAssociation entity v true 34 KAPITEL 4 ERWEITERUNG VON ODL 7 85 Input variable lues for the set stringSet Eingegebene engenelemente Basistyp Werteeingabe Enter string value for stringSet stral ale Abbildung 4 9 Eingabe einer Menge von Strings e Input variable X lues for the set compSet Component Centrale Component Centrale Component Centrale Component Driver Component Driver1 Component Centrale Select a Component for c2 omponent BankingSystem finite versi omponent Centrale E omponent Driver 1 omponent Driver2 Abbildung 4 10 Eingabe einer Menge von Produktwerten 4 2 INTERAKTIVE BENUTZERSCHNITTSTELLE 35 b Input variable Select a value from the set for i intSet 1 3 5 8 12 15 Abbildung 4 11 Auswahl einer Zahl aus einer zuvor eingegebenen Menge Select a value from the set for channel hannel T in Info hannel T1out Message hannel T2in Info hannel T2out Message hannel Inp1 Info hannel Answer 1 Message hannel C1Ack Signal comp Centrale Component Abbildung 4 12 Auswahl eines Kanals aus der Menge der Kan le einer zuvor ausgew hlte
224. pression das die Gr e einer Menge berechnet Sollten zuk nftig weitere Funktionen mit numerischem Er gebnis in den Sprachumfang aufgenommen werden dann m ssten sie als Ableitungen von arithmetic_termin die ODL Grammatik integriert werden Das Grammatik Symbol aus dem ein arithmetischer Ausdruck abgeleitet werden Kann ist expression Da die Produktionsregeln f r Ausdr cke bei der Einf hrung arithmetischer Ausdr cke ver ndert werden mussten um die Grammatik wie von SableCC verlangt LL 1 konform zu gestalten beschreiben wir an dieser Stelle die Produktionsregeln f r Ausdr cke et was ausf hrlicher expression non_constant_expression arithmetic_expression constant_expression 5 1 ERWEITERUNG DES SPRACHUMFANGS 53 non_constant_expression functional_expression selector_expression defined_variable constant_expression bool_constant_expr string_constant_expr Es wurde also eine Unterscheidung zwischen konstanten Ausdr cken nicht konstanten Aus dr cken und arithmetischen Ausdr cken gemacht wobei ganzzahlige Konstanten zu den arith metischen Ausdr cken und nicht zu den konstanten Ausdr cken geh ren andernfalls lie sich keine Grammatik erstellen die von SableCC verarbeitet werden kann Zu den konstanten Ausdr cken geh ren boolesche Konstanten und Zeichenketten zu den nicht konstanten Aus dr cken z hlen Selektorausdr cke deklarierte Variablen und funktionelle Ausdr cke Le
225. putPanel zu erstellen und zu kon figurieren ist QueryInputPanel createQueryInputPanel MetaType meta Type String variableName Assignment freeVariables Die prim re Aufgabe einer QueryInputPanel Fabrik ist die Konfiguration eines Ein gabepanels f r den dieser Fabrik zugeordneten ODL Datentyp die Erstellung einer neu en Eingabepanel Instanz delegiert sie an eine Producer Klasse die als Strategie Objekt vom QueryInputPanelProducerManager zur ckgegeben wird Daher sind QueryInput Panel Fabriken eher als Erbauer zu verstehen GammaEtAl S 119 130 Die Klassen sind QueryInputPanelFactory Interface BoolQueryInputPanelFactory Interface EntityQueryInputPanelFactory Interface IntegerQueryInputPanelFactory Interface StringQueryInputPanelFactory Interface 5 2 INTERAKTIVE BENUTZERSCHNITTSTELLE 79 IntroducedTypeQueryInputPanelFactory Interface ProductTypeQueryInputPanelFactory Interface RestrictedTypeQueryInputPanelFactory Interface SetTypeQueryInputPanelFactory Interface AbstractBoolQueryInputPanelFactory AbstractEntityQueryInputPanelFactory AbstractIntegerQueryInputPanelFactory AbstractStringQueryInputPanelFactory AbstractIntroducedTypeQueryInputPanelFactory AbstractProductTypeQueryInputPanelFactory AbstractRestrictedTypeQueryInputPanelFactory AbstractSetTypeQueryInputPanelFactory DefaultBoolQueryInputPanelFactory DefaultEntityQueryInputPanelFactory
226. quest util collections be findet sich im Quellcode und in ODLAPI Ein Klassendiagramm des Packages wird im An hang A auf der Abbildung A 7 gezeigt Da die oben beschriebenen Klassen im Zuge der Implementierung von MetaType Unterklas sen f r die neuen ODL Datentypen erstellt wurden wollen wir angeben welche Datentypen von welchen Iteratoren Gebrauch machen um in ihrer instances Methode einen Iterator ber die Werte des jeweiligen Typs zu konstruieren ODL Datentyp Klasse Benutzte Klassen aus quest util collections Produkttyp MetaProduct Type Compositelterator Resettablelterator Eingeschr nkter Typ MetaRestrictedType ConditionedIterator ConditionedIterator Condition Resettablelterator Mengentyp MetaSetType PowersetIterator Resettablelterator An dieser Stelle ist ein Hinweis zur Gestaltung effizienter ODL Abfragen notwendig die indi rekte Benutzung der Klasse CachedIterator bei der Iteration durch Tupel eines Produkt typs indem MetaProductType auf die Klasse Compositelterator zur ckgreift die ihrerseits CachedIterator benutzt hat den Vorteil zur Folge dass eine Abfrage der Form exists var pl Port p2 Port c Component var pl Component var c and var p2 Component var c durch das Caching zum Teil erheblich schneller ausgewertet wird als die Abfrage exists pl Port exists p2 Port exists c Component pl Component c and p2 Component c Dies s
227. r er Kleiner Vergleiche zweier Ausdr cke eingef hrt bigger smaller expression expression comparison operator expression 52 KAPITEL 5 IMPLEMENTIERUNG comparison_operator Die Unterscheidung zwischen Gleichheitstest und Vergleich auf der syntaktischen Ebene wird vorgenommen weil eine Unterscheidung zwischen Gleichheitstest und Vergleich auf der se mantischen Ebene vorhanden ist auf Gleichheit k nnen zwei Werte beliebigen Typs getestet werden w hrend der Vergleich nur f r Werte m glich ist die das Interface java lang Comparable implementieren im ODL Typsystem sind es nur Int und String e Arithmetische Ausdr cke Als Grundlage f r die Produktionsregeln f r arithmetische Ausdr cke wurden die Produktionen aus SableCC S 26 genommen die in hnlicher Form auch in Compilerbau Lehrb chern zu finden sind Da ODL zurzeit keine Division unterst tzt wurde die entsprechende Ableitung ausgenommen Die Produktionsregeln f r arithmetische Ausdr cke lauten arithmetic expression factor arithmetic expression factor arithmetic expression factor factor arithmetic term factor arithmetic term arithmetic term int constant expr arithmetic expression size expression int constant expr sign int constant sign In der Produktion arithmetic_term wurden alle ODL Funktionen zusammengefasst die ein numerisches Ergebnis zur ckliefern zurzeit ist es nur size ex
228. r berpr fung einer mehrwer tigen Relation alle assoziierten Entit ten mit der getesteten Entit t verglichen werden m ssen Wir haben verschiedene Techniken zum Entwurf optimierter Abfragen betrachtet Nun wollen wir ein praktisches Beispiel geben in dem alle besprochenen Techniken Anwendung finden Wir entwer fen ein benamtes Pr dikat componentsConnected cl Component c2 Component der f r zwei Komponenten feststellt ob sie durch einen Kanal verbunden sind Die Effizienz verschie dener Versionen dieses benamten Pr dikats testen wir mit der Abfrage exists comps c cl Component c2 Component c cl Name 1111 and c c2 Name Connectionl call componentsConnected comps cl comps c2 die das Pr dikat genau einmal ausf hrt Anschlie end stellen wir verschiedene Formulierungen des benamten Pr dikats vor wobei in jeder n chsten Version die nderungen gegen ber der vorherigen durch Unterstreichung hervorgehoben werden Die erste unoptimierte Version des Pr dikats ist componentsConnected cl Component c2 Component exists ch Channel exists pl Port exists p2 Port is SourcePort ch pl and is DestinationPort ch p2 or is SourcePort ch p2 and is DestinationPort ch pl and is Ports cl pl and is Ports c2 p2 Seine Ausf hrung dauert 68 Sekunden Als erste Optimierung ersetzen wir die Quantorliste durch einen Produkttyp wobei die vom ersten exists Q
229. r Implementierung des Visitor Entwurfsmusters f r ODL Auswertungsb ume geh rt mehr dazu im Abschnitt 5 1 3 Als Bestandteil des Visitor Ent wurfsmusters wird die apply Methode durch jede ODL Auswertungsklasse implementiert hier wird dann die der jeweiligen Klasse entsprechende Methode von EvalTreeVisitor aufgerufen Das bedeutet unter Anderem dass mit der Einf hrung einer neuen Auswertungs klasse auch eine entsprechende Methode in EvalTreeVisitor eingef gt und die Klas sen EvalTreeVisitorAdapter und DepthFirstEvalTreeVisitorAdapter an gepasst werden m ssen Bei der Einf hrung der Auswertungsklasse SetSizeExpression sind demnach folgende nderungen an diesen Klassen vorzunehmen Interface EvalTreeVisitor Hier muss die Methodendeklaration public void caseSetSizeExpression SetSizeExpression expression eingef gt werden Klasse EvalTreeVisitorAdapter Defaultimplementierung der Methode caseSetSizeExpression einf gen public void caseSetSizeExpression SetSizeExpression expression defaultCase expression Klasse DepthFirstEvalTreeVisitorAdapter Die Methode caseSetSizeExpression ist zu implementieren wobei die Struktur der Klasse SetSizeExpression ber cksichtigt werden muss d h dass f r alle Aus wertungsklassen die von Set SizeExpression benutzt werden die Methode apply aufzurufen ist public void caseSetSizeExpression SetSizeExpression expression inSet
230. r Reihenfolge der Tiefensuche durchl uft Dabei wird f r jeden Knoten Foo beim Betreten die Me thode inFoo Foo node und beim Verlassen die Methode outFoo Foo node aufgerufen Diese Methoden f hren hier keine Aktionen aus und dienen als Ansatzstellen f r Unterklassen von DepthFirstAdapter um Aktionen f r Syntaxbaum Knoten ausf hren zu k nnen Wir wollen diese Vorgehensweise am Beispiel der Verarbeitung einer Gleichheit im DepthFirstAdapter er l utern F r den Knoten AEqualExpression der einen Gleichheitsausdruck repr sentiert enth lt DepthFirstAdapter die Methode public void caseAEqualExpression AEqualExpression node inAEqualExpression node node getLeftExpression apply this node getRightExpression apply this outAEqualExpression node Auf diese Art und Weise wird f r alle Knoten eines Syntaxbaums sichergestellt dass sie in der Rei henfolge der Tiefensuche besucht werden wobei f r jeden Knoten beim Betreten und beim Verlas sen eine Aktion ausgef hrt werden kann Um einen Syntaxbaum nun sinnvoll verarbeiten zu k n nen muss eine Unterklasse von DepthFirstAdapter erstellt werden welche die Methoden inFoo und outFoo f r Syntaxbaum Knoten berschreibt damit in diesen Methoden bestimm te Aktionen f r die jeweiligen Knoten ausgef hrt werden Im einfachsten Fall wird in einer ber schriebenen Methode outFoo ein ODL Auswertungsbaum Knoten erstellt der dem verarbeiteten Syntaxbaum Knoten entspric
231. r context Quantoren weil new Quantoren nur Variablen eines Metamodelltyps z B Component Port etc und damit nur unab h ngige Variablen binden k nnen Nehmen wir als Beispiel f r diese Einschr nkung bei context Quantoren zwei vom Ergebnis her quivalente Abfragen in denen f r jede existierende Komponente eine Unterkomponente auszu w hlen ist Auswahl aus der Menge der Unterkomponenten exists comp Component context subComp element comp SubComponents true Auswahl ber einen eingeschr nkten Typ exists comp Component context subComp c Component is SubComponents comp c true In beiden F llen ist die Variable subComp abh ngig von der Variablen comp sodass der zu subComp geh rende context Quantor nicht an den Anfang der Abfrage vorgezogen werden kann In der jetzigen Version des ODL Interpreters wird ein context Quantor dessen Variable von anderen Variablen abh ngig ist als unbeweglich markiert und bei der Skolem Optimierung an seiner Stelle gelassen Dies ist auch dann der Fall wenn der Quantor theoretisch vorgezogen werden k nnte In der Abfrage context comp Component exists port Port 6 1 context subComp element comp SubComponents true kann der Quantor context subComp durchaus vor den Quantor exists port vorgezogen wer den weil die Variable subComp nicht von der Belegung der Variablen port abh ngt Dies wird zurzeit der Einfachheit halber unterlassen Die Nachbedingungen des aktuellen
232. r konnte eine ODL Proposition negiert wer den Beispiel forall a Boolean forall b Boolean b equiv exists c Boolean a 3 2 ERSTE IMPLEMENTIERUNG DES ODL INTERPRETERS 19 e Konstanten F r die Grundtypen Boolean Int und String konnte jeder zul ssige Wert als Konstante eingegeben und in ODL Abfragen verwendet werden Beispiel 10 10 and ABC ABC equiv true Die Eingabe einer Entit t als Konstante ist nicht m glich da im Allgemeinen nicht bekannt ist aus welchen Werten eine Entit t besteht und auf welche Weise sie eindeutig identifiziert werden kann der Name und Typ gen gen als Identifikation oft nicht Entit tskonstanten sind auch nicht notwendig da zur Erstellung neuer Entit ten der new Quantor dient und der Zugriff auf eine existierende Entit t mit der Quantifikation exists var EntityType Condition erfolgt wobei Condition eine Bedingung definieren soll die die gesuchte Entit t eindeutig identifiziert e Gleichheitstest Zwei Werte vom gleichen Typ k nnen auf Gleichheit getestet werden F r die Grundtypen Boolean Int und String wird dabei einfach auf Wertegleichheit getestet Zwei Entit ts variablen dagegen werden nur dann als gleich angesehen wenn sie ein und dieselbe Entit t referenzieren zwei verschiedene Entit ten die den gleichen Namen tragen und die gleichen Relationen aufweisen werden als ungleich betrachtet Nehmen wir zwei ODL Abfragen als Beispiele Test
233. rage context hint Enter an existing component name and an existing port name names compName s String exists c Component c Name s portName s String exists p Port p Name s true Hier muss der Benuzter den Namen einer im Modell existierenden Komponente und den Namen eines existierenden Ports eingeben Wie der Abbildung 6 1 zu entnehmen ist kann der Benutzer nicht direkt sehen welcher der zwei einzugebenden Werte seine Restriktionsbedingung verletzt Die Information dar ber welche der eingegebenen Elementwerte ihre Restriktionsbedingung er f llen kann dem Benutzer zur Verf gung gestellt werden indem zu jedem Rest rictedType Wert im Eingabebereich angezeigt wird ob der eingegebene Wert zul ssig ist Dies kann bei spielsweise mithilfe einer Checkbox geschehen wie auf der mit einem Graphikeditor bearbeiteten Abbildung 6 2 dargestellt I x roduct type variable names Restricted type variable portName Slot Restricted type variable compName Centr Previous Cancel Next Hint Enter an existing component name and an existing port name Abbildung 6 1 Eingabe von RestrictedType Werten Diese Verbesserung lie e sich mit vergleichsweise geringem Aufwand realisieren Sie bietet al lerdings keine umfassende L sung f r die Eingabe eingeschr nkter Typen sondern lediglich eine Erleichterung bei der Eingabe zusammengeset
234. rd ort Slot2 Card ort Keypad1 Keys ort Keypad Keys ort RadiTime1 Date ort RadioTime2 Date ort Display1 InfoMsg ort Eject1 Card ort Display InfoMsg ort Eject2 Card Select Port for p2 Port Slot1 Card Port 51042 Card Port Keypad1 Keys Port Keypad2 Keys Port RadiTime1 Date Port RadioTime2 Date Display1 InfoMsg ort Eject1 Card Port Display InfoMsg Port Eject2 Card Abbildung 5 9 DefaultCompositeQueryInputPanel Zoomslider minimiert Mengeneingabepanels Die letzte Klassengruppe in der QueryInputPanel Hierarchie bilden Eingabepanels f r Mengen Die abstrakte Klasse SetTypeQueryInputPanel de finiert das Interface f r diese Klassengruppe Die wichtigsten Methoden sind Set Type get SetTypeInput welche die vom Benutzer eingegebene Menge als Set Type Instanz zur ckgibt und setInputPanelAndValueDisplay QueryInputPanel input Panel SetValueDisplayvalueDisplay MetaSetType setType die das Eingabepanel f r den Eingabevorgang konfiguriert der Parameter set Type spezifiziert den einzugebenden Mengentyp dieser enth lt unter Anderem Angaben ber den Basistyp der Menge und ber den Parameter valueDisplay wird spezifiziert welche Komponente zur 5 2 INTERAKTIVE BENUTZERSCHNITTSTELLE 71 Anzeige bereits eingegebener Mengenelemente verwendet werden soll mehr dazu weiter in diesem Abschnitt AbstractSetTypeQueryInputPanel
235. re Wertemenge um den Wert undef der immer dann als Ergebnis eines Ausdrucks zur ckgegeben wird wenn das Ergebnis nicht definiert ist Es gilt dann div Int x Int Int U undef wobeia 0 undef f rallea Int ist Ergibt ein arithmetischer Ausdruck anstatt einer Zahl den Wert undef so muss dieser bei der Auswertung des ODL Terms besonders behandelt werden Da arithmetische Ausdr cke in ODL nur innerhalb von booleschen Termen vorkommen d rfen s Abschnitt 4 1 muss bei booleschen Termen die M glichkeit ber cksichtigt werden dass das Ergebnis eines Operanden undef ist Dabei entsteht folgendes Problem das Ergebnis eines booleschen Terms kann dar ber entscheiden ob eine bestimm te Transformation am Modell durchgef hrt wird oder nicht Hierbei kann sowohl das Ergebnis true als auch das Ergebnis false zu einer Transformation f hren abh ngig davon welches Termergebnis das gew nschte ist Wir wollen das am Beispiel zweier Abfragen demonstrieren exists c Component size c Channels 0 and result has NoChannels Diese Abfrage benennt alle Komponenten um die keine Kan le besitzen eine Modelltransfor mation wird durchgef hrt wenn der Term size c Channels 0 zu true ausgewertet wird Das gew nschte Ergebnis das zur Modelltransformation f hrt ist hier also true exists c Component neg size c Channels gt 0 and result has Name NoChannels Diese Abfrage has diegleiche Auswirkun
236. rmauswertung t rue oder false ist 6 2 Optimierung der Abfrageauswertung In diesem Abschnitt besprechen wir m gliche Optimierungen des ODL Auswertungssystems 6 2 1 Erweiterung der Skolem Optimierung f r context und new Quantoren In der aktuellen Version werden context und new Quantoren in einer ODL Abfrage bis zum n chsten foral1 Quantor oder falls keine foral1 Quantoren vor dem betreffenden context bzw new Quantor vorkommen an den Anfang der Abfrage vorgezogen s auch Pasch S 38 39 Deshalb werden wir der K rze halber context und new Quantoren im Weiteren unter dem 102 KAPITEL 6 VERBESSERUNGSM GLICHKEITEN Begriff verschiebbare Quantoren zusammenfassen Au erdem bezeichnen wir f r einen verschiebba ren Quantor den vorausgehenden orall Quantor oder falls keiner vorhanden den Anfang der ODL Abfrage als Verschiebungsgrenze Wir wollen die Verschiebungssregel an einem Beispiel ver anschaulichen Die Abfrage exists pl Port context p2 Port forall p3 Port exists p4 Port new p5 Port context p6 Port true wird vom ODL Interpreter wie folgt umgeformt context p2 Port exists pl Port forall p3 Port new p5 Port context p6 Port exists p4 Port true Diese Regel gilt solange die vom verschiebbaren Quantor gebundene Variable nicht von anderen Variablen abh ngt Solche Abh ngigkeiten k nnen bei RestrictedType Variablen und bei Men genvariablen eintreten Diese Einschr nkung betrifft allerdings nu
237. rts pl OutChannels chl ports p2 InChannel or exists ch2 element ports p2 OutChannels ch2 ports pl InChannel stellt fest ob zwei Komponenten durch einen Kanal verbunden sind Die Abfrage exists pair cl Component c2 Component call componentsConnected pair cl pair c2 gibt alle Paare von Komponenten zur ck die durch mindestens einen Kanal verbunden sind Zus tzlich zu den oben angegebenen Sprachkonstrukten wurde ODL um weitere Sprachkonstrukte und F higkeiten erweitert e Vergleiche Bisher stand nur der Test auf Gleichheit zweier Werte zur Verf gung Der Typ der Werte durf te beliebig sein nur mussten beide Werte nat rlich typkompatibel sein F r die Typen auf 4 1 ERWEITERUNG DES SPRACHUMFANGS 25 denen eine totale Ordnung existiert in ODL sind es String und Int wurden nun die Ver gleichsoperatoren lt gt sowie gt eingef hrt F r den Typ String wird hierbei die lexikographische Ordnung herangezogen Beispiele Ausdruck Ergebnis 10 gt 5 true 4 gt 10 false stringA lt string false stringA stringB true Arithmetische Operationen F r den Umgang mit ganzen Zahlen wurden Addition Subtraktion und Multiplikation einge f hrt Da das Ergebnis einer ODL Abfrage stets boolesch ist d rfen arithmetische Ausdr cke nur innerhalb boolescher Terme auftreten Das bedeutet in der Praxis dass arithmetische
238. rung der Dia logflusskontrolle bei Benutzereingaben diskutiert Zun chst wollen wir die Motivation f r die Weiterentwicklung der Dialogflusskontrolle anhand eines Beispiels erkl ren Im Rahmen meines Systementwicklungsprojekts wurde eine interaktive Mo delltransformation realisiert bei der eine Komponente in ein Kanalb ndel eingef gt werden musste wobei die Kan le durch die eingef gte Komponente durchgeleitet wurden d h die Kan le wurden gel scht und ihre Ports durch neue Kan le mit den Ports der eingef gten Komponente verbunden Um den Vorgang zu starten muss der Benutzer eine Hauptkomponente ausw hlen deren Kan le und Un terkomponenten an der Transformation teilnehmen werden und anschlie end den Men punkt Edit Split channels ausw hlen Es beginnt ein dialogbasierter Vorgang bei dem der Benutzer in drei aufeinander folgenden Dialogen folgende Eingaben machen soll 1 Auswahl mehrerer Kan le die das Kanalb ndel bilden 2 Auswahl der Komponente die in das Kanalb ndel einzuf gen ist 3 Zuordnung der Ausgangsports des Kanalb ndels zu Eingangsports der eingef gten Komponente und Zuordnung der Eingangsports des Kanalb ndels zu Ausgangsports der eingef gten Kompo nente die durch neue Kan le verbunden werden sollen Nach dem Abschluss des dritten Teilschritts wird eine Kopie der ausgew hlten Komponente in das Kanalb ndel eingef gt und ihre Ports werden durch neue Kan le mit den Ports des Kanalb ndels
239. ryIn putPanel implementiert Folgende Schritte sind zur Einf hrung eines Listeneingabepanels notwendig Zun chst wird die konkrete Eingabepanel Implementierung ListQueryInputPanel als Unterklasse der abstrakten Klasse SelectionQueryInputPanel erstellt Zur Erzeugung neuer ListQueryInputPanel Instanzen wird die Producer Klasse ListQueryInputPanelProducer als Unterklasse von SelectionQueryIn putPanelProducer implementiert Schlie lich wird die Klasse ListQueryInputPanel im QueryConfiguration Dialog indie als statisches Array ausgef hrte Liste verf gbarer Eingabepanels eingetra gen Anschlie end muss sie noch f r jeden ODL Datentyp f r den sie als Eingabepanel verwendet werden kann in ein diesem Datentyp entsprechendes statisches Array einge tragen werden das alle f r diesen Datentyp einsetzbaren Eingabepanels enth lt Mehr Details zu dieser Vorgehensweise finden sich im Kommentar zum Quellcode der Query ConfigurationDialog Klasse Abschlie end wollen wir noch einige Hinweise f r weitere Implementierungen geben e Erweiterungen und nderungen der ODL Query Subsystems Dank des modularen Aufbaus des ODL Query Subsystems und der Anbindung an das Auswer tungssystem ber eine festgelegte Schnittstelle im QueryManager s auch Abschnitt 5 2 sind Erweiterungen des Query Subsystems ohne nderungen an anderen ODL Auswertungs klassen m glich die von der Einf hrung neuer Eingabepanels bis hin zur Implementierung eine
240. s kompletten neuen Query Subsystems reichen k nnen Die Query Klassen stellen die oberste Ebene f r Modifikationen am ODL Query Subsystem dar muss die Benutzereingabe f r einen ODL Datentyp umfassend berarbeitet werden so ist eine neue Query Klasse f r diesen Datentyp zu erstellen die als Strategie dem QueryMana ger bergeben werden kann Sind nur nderungen am Erscheinungsbild eines Eingabedialogs oder eines Eingabepanels not wendig so kann die entsprechende QueryDialog bzw QueryInputPanel Klasse modi fiziert oder eine neue erstellt werden Damit eine neue Dialog Klasse oder Eingabepanel Klasse vom Benutzer zur Verwendung in Eingabedialogen ausgew hlt werden kann muss sie wie oben beschrieben QueryConfigurationDialog in die als statisches Array ausgef hrte Liste verf gbarer Dialog bzw Eingabepanel Klassen eingetragen werden Nach der Durchf hrung dieser Schritte ist das neue Dialogfenster bzw Eingabepanel f r Benutzereingaben verf gbar und kann im Konfigurationsdialog ausgew hlt werden e Zuk nftige Erweiterungen bei benamten Pr dikaten Zurzeit k nnen bei der Deklaration benamter Pr dikate nur Sprachkonstrukte aus der CCL Teilmenge von ODL benutzt werden d h die Quantoren context und new sowie das Schl s selwort result sind nicht zugelassen 5 4 ENTWURF OPTIMIERTER ODL ABFRAGEN 91 Es spricht grunds tzlich nichts dagegen die Verwendung des vollen ODL Sprachumfangs in benamten Pr dikaten zu erlauben Hier
241. s pl Name 51051 and ports p2 Name Slot and exists ch Channel ch SourcePort ports pl and ch DestinationPort ports p2 Da der Quantorterm eine Konjunktion mehrerer Teilterme darstellt k nnen wir einige Teilterme in den Typ der Quantorvariablen verlagern der daf r zu einem eingeschr nkten Typ umgewan delt werden muss exists ports p pl Port p2 Port p pl Name 51051 and p p2 Name Slot exists ch Channel ch SourcePort ports pl and ch DestinationPort ports p2 Bereits diese Umformung bringt Zeitgewinne bei der Auswertung Nach der Anwendung des Optimierungsalgorithmus auf den eingeschr nkten Typ erhalten wir eine Formulierung der Ab frage bei der die Auswertungszeit noch einmal sinkt exists ports pl pl Port pl Name 51051 p2 p2 Port p2 Name Slot exists ch Channel ch SourcePort ports pl and ch DestinationPort ports p2 112 KAPITEL 6 VERBESSERUNGSM GLICHKEITEN 6 3 Verbesserungen an der Benutzerschnittstelle Dieser Abschnitt besch ftigt sich mit den Verbesserungen an der interaktiven Benutzerschnittstelle von ODL 6 3 1 Konfiguration der Eingabedialoge w hrend der Eingabe Die Konfiguration der Eingabedialoge f r verschiedenen ODL Datentypen findet in einem separaten Konfigurationsdialog statt s Abschnitt 4 2 7 in dem f r jeden ODL Datentyp auDer dem einge schr nkten Typ eingestellt werden kann welcher Eingabebereich und welches Eingabedial
242. sische Produkt mehrerer Kollektionen Implementiert ebenfalls das Interface ResettableIterator Um die Funktionsweise dieses Iterators zu verdeutli chen nehmen wir als Beispiel die Kollektionen A B C und 1 2 f r sie w rde ein Compositelterator folgende Werte in Form von Ob ject Arrays der L nge 2 liefern 1 A 2 B 1 B 2 C 1 C 2 ConditionedIterator Kapselt einen Kollektionsiterator und wendet als Filter f r die Kollektionselemente eine Be dingung an die ber das Interface ConditionedIterator Condition spezifiziert werden kann indem die Methode boolean meetsCondition Object value implementiert wird Ein ConditionedIterator gibt genau die Elemente der gekap selten Kollektion zur ck die die spezifizierte Bedingung erf llen F r die anzuwendende Bedingung gibt es dabei keine Einschr nkungen au er dass die Methode meet sCondi tion Object value immer terminieren und ein boolesches Ergebnis zur ckgeben soll 56 KAPITEL 5 IMPLEMENTIERUNG PowersetlIterator Iteriert ber die Potenzmenge einer spezifizierten Kollektion F r die Kollektion w rde ein PowersetIterator beispielsweise folgende Mengen in Form von java util LinkedList Instanzen liefern A A C B C A B C Die Parameterkollektion wird wie auch bei anderen Iteratoren aus diesem Package ber ihren Iterator spezifiziert Ein ausf hrlicher Kommentar zu den Klassen im Package
243. ssardxajenbqum proa uorssardxajenbgase gt proA uonounfsiqino proA uonounfsiqur proa uonsuntsiqasea Doan XNU ONO TEE PIOAAURSUOZINO PIOA UOU PIOAJULISUO JASLI ptox uon unfuo21no Proa uonounfuogyur proA uonounfuozjoseo uejsuo poognno PIOA jueisuoppoogun proa un p yurisuo joo QSP PIOAANOINEFOP LRA gsr Tudo 4 1 1 PIOA 922 pporornsoge1ojAosuo4 proa od amp 229 8 PIOA EOTEPWOSLI 5 1011203 pa PIOA 9 qULIE ptox uuen0esi stur se PIOA J0p9 ossonnugporerooss y osta PlOA 10199 o amp mugpormiooss v osto ptox 1o l S mnqrmy se Do o1soduo osvo proA uorsso1dxgojopsosto4 Dong 152 LYON EJAY osto PIONU e ouo uo ne o oseo PIONU uontppy uonejospaseaJ ploasarjnuend NoN2st2 PION ULI NALIH pioAornuengyprenuojsix pioa auapambgaseo proa uowsordyquoqpeugases pros uoissoudxguos tg osto proa torssaidxgpenbgposeo proA uorssai
244. st sehr einfach an Metamodell nderungen anzupassen Solange das Me tamodell der im Abschnitt 3 1 vorgestellten Abstraktion gen gt werden in den meisten F l len berhaupt keine nderungen an der Query Sprache selbst vorzunehmen sein nderun gen k nnen dann das Auswertungssystem oder die Schnittstelle zum Metamodell betreffen und m ssen sich nicht in einer nderung der Sprachkonstrukte niederschlagen Sicherheit Eine Query Sprache kann im Unterschied zu einer allgemeinen Programmiersprache wie Ja va oder C eng an die mathematische Notation der Pr dikatenlogik angelehnt werden wo mit ihre Ausdrucksm chtigkeit kontrollierter und berschaubarer wird Deshalb ist das Risiko unerw nschter Nebeneffekte durch die Transformation eines Modells mithilfe einer Abfrage geringer als es bei der Programmierung der gleichen Transformation in einer allgemeinen Pro grammiersprache ist Das Konzept einer solchen Query Sprache f r QUEST Modelle wurde mit der Operation Defi nition Language ODL in Sch01 vorgestellt das n chste Kapitel behandelt das Konzept und die Grundlagen von ODL sowie die erste Implementierung im Rahmen von Pasch Kapitel 3 Grundlagen von ODL In diesem Kapitel behandeln wir die Grundlagen von ODL Der Abschnitt 3 1 befasst sich mit der Konzeption von ODL Der Abschnitt 3 2 geht auf die erste Implementierung eines ODL Interpreters f r QUEST ein 3 1 Konzeption Dieser Abschnitt basiert in weiten Teile
245. ster Der Sprachumfang der ersten ODL Interpreter Realisierung entspricht der in Sch01 S 16 17 spezifizierten Grammatik mit der Einschr nkung dass Selektorausdr cke und Funktionsausdr cke nicht unterst tzt wurden Damit standen folgende Sprachkonstrukte zur Verf gung e Datentypen Das Typsystem enthielt zwei Gruppen von Datentypen die Grundtypen Boolean Int und String sowie Metamodelltypen die alle vom Metamodell definierten Entit ten darstellen beispielsweise entpricht der Metamodellentit t Port der ODL Datentyp Port e Quantifizierungen Variablen von Typen mit endlicher Dom ne konnten mit dem Universalquantor forall und dem Existenzquantor exists quantifiziert werden Au erdem konnten mit dem new Quantor neue Entit ten erstellt werden Der context Quantor der f r die gebundene Variable eine Benutzereingabe starten soll wur de in den Sprachumfang intergriert ein entsprechendes ODL Query Subsystem war allerdings nicht Bestandteil der Implementierung sodass von cont ext Quantoren gebundene Variablen mit festen Werten z B null f r Entit ten oder 0 f r ganze Zahlen belegt wurden Eine Quantifizierung besteht aus dem Quantor der gebundenen Variablen dem Variablentyp und dem quantifizierten Term Beispiel forall cl Component exists c2 Component cl c2 e Logische Operationen Zwei ODL Propositionen konnten mit den Junktionen and or implies und equiv ver kn pft werden Mit dem einstelligen neg Operato
246. t Constraint Language eingehen OCL ist ein Bestandteil des UML Standards der zur Spezifikation von Konsistenzbedinungen dient welche nicht mit anderen UML Sprachmitteln definiert werden k nnen OCL wurde entwi ckelt um Konsistenzbedinungen auf UML Modellen in einer Notation definieren zu k nnen die zwar formell ist aber an die nat rliche Sprache angelehnt ist und daher f r Leser ohne mathematischen Hintergrund verst ndlich bleibt In dieser Hinsicht dienen CCL und OCL demselben Zweck n m lich der Spezifikation von Konsistenzbedinungen mithilfe einer leicht zu verstehenden Notation Wie auch CCL ist OCL keine Programmiersprache und unterst tzt keine Programmflusskontrolle Ein wichtiger Aspekt von OCL ist dass sie eine reine Spezifikationssprache ist die Auswertung von OCL Ausdr cken kann keine Seiteneffekte haben d h ein OCL Ausdruck kann keine nderungen am Modell bewirken Ausf hrliche Informationen zu OCL liefert die Sprachspezifikation von OCL 2 0 die in OCL zu finden ist Ein OCL Interpreter ist in das QUEST Tool integriert Die M glichkeit von Modellmodifikationen und Benutzerinteraktionen bildet den grunds tzlichen Unterschied zwischen ODL und ODL kann wie zur Definition von reinen Konsistenzbe dingungen benutzt werden die keine Seiteneffekte haben indem die ODL Abfragen auf den Sprach umfang von CCL beschr nkt bleiben Wird der ber CCL hinausgehende Sprachumfang von ODL genutzt so k nnen Op
247. t exists s String is Name s and result has Name p s and result has Ports kann nicht ausgewertet werden weil eine Iteration ber Instanzen des unendlichen Typs St ring nicht m glich ist 4 1 ERWEITERUNG DES SPRACHUMFANGS 23 var comps cl Component c2 Component is SubComponents comps cl comps c2 Alle Komponentenpaare bei denen die zweite Komponente eine Unterkomponente der ers ten ist e Mengen Bislang hatte jede Variable als Wert genau eine Instanz ihres Typs Mit Mengenvariablen wird die M glichkeit gegeben mehrere Instanzen eines Typ in einer Variable zu speichern var set base_type 4 4 Eine Mengenvariable ist eine Teilmenge des Basistyps man kann sie als Kollektion von Werten des Basistyps auffassen deren Elemente alle paarweise verschieden sind Um auf die Elemente einer Menge zugreifen zu k nnen wird das Schl sselwort element eingef hrt setVar set base_type exists var element setVar 4 5 Dabei kann als Menge nicht nur eine Mengenvariable sondern jeder Ausdruck verwendet werden dessen Ergebnis eine Menge ist Die Abfrage exists comp Component exists subComp 4 6 element comp SubComponents iteriert beispielsweise f r jede Komponente ber die Menge ihrer Unterkomponenten Mit dem vorangestellten Schl sselwort element agiert jede Mengenvariable oder Ausdruck mit mengenwertigem Ergebnis als Typ dessen Instanzen genau die in der Menge enthalte nen Elemen
248. t wird dabei auf dem Modellierungs und Validierungstool QUEST sowie dem gemeinsamen Metamodell von AutoFocus und QUEST liegen da das ODL Modul Bestandteil des QUEST Tools ist Die Abschnitte 2 1 und 2 2 befassen sich mit den Tools AufoFocus und QUEST sowie mit dem f r die Modellierung verwendeten Metamodell Der Abschnitt 2 3 behandelt die Motivation f r komplexe Transformationen an Produktmodellen und damit die Motivation f r die Entwicklung von ODL 2 1 Modellierungs und Validierungsframework AutoFocus QUEST Die Tools AutoFocus und QUEST dienen zur Erstellung und Validierung von Produktmodellen Au toFocus ist ein graphischer Editor in dem Modelle erstellt und bearbeitet werden k nnen Abbildung 2 1 Zus tzlich k nnen Korrektheitspr fungen f r erstellte Modelle durchgef hrt werden Weiterge hende Informationen zur Benutzung von AutoFocus finden sich in Validator und auf der Homepage des AutoFocus Projekts AFHome F r die Entwicklung von Modellen unterst tzen AutoFocus und Quest folgende Diagrammarten e SSD System Structure Diagram Auf diesen Diagrammen wird die Struktur des modellierten Systems dargestellt Ein System besteht hierbei aus Komponenten und den Kommunikationskan len zwischen den Komponen ten s Diagramm auf Abb 2 1 Jeder Komponente kann dabei eine interne Struktur durch ein SSD zugeordnet werden damit sind hierarchische Systembeschreibungen m glich STD State Transition Diagram Mithilfe von Z
249. te sind In dieser Form k nnen Mengen als Typen f r Variablendeklaration in allen ODL Sprachkonstrukten au er dem new Quantor benutzt werden solche Typen werden wir als eingef hrte Typen bezeichnen Ein mengenwertiger Ausdruck muss bei der Verwendung mit dem Schl sselwort e1ement geklammert werden Hier einige Beispiele f r den Einsatz von Mengen context setVar set Component true Eingabe einer Menge von Komponenten durch den Benutzer exists boolSet set Boolean true Alle Teilmengen des Typs Boolean Das Ergebnis der Abfrage ist false true false true exists boolSet set Boolean exists bool element boolSet bool true Alle Teilmengen von Boolean die den Wert t rue enthalten Das Ergebnis der Abfrage ist true false true exists comp Component exists subComp element c SubComponents subComp Name Compl F r jede Komponente wird nach einer Unterkomponente mit dem Namen Comp1 ge sucht context comps cl Component c2 Component exists ports pl element comps cl Ports 24 KAPITEL 4 ERWEITERUNG VON ODL p2 element comps c2 Ports true Der Benutzer muss ein Komponentenpaar ausw hlen wonach alle Portpaare ausgegeben werden in denen der erste Port zur ersten Komponenten und der zweite Port zur zweiten Komponente geh rt e Benamte Pr dikate Ein benamtes Pr dikat ist als eine Analogie zu Funktionen zu verstehen es wird mit einem eindeutigen Namen deklariert und ka
250. terator hasNext boolean next Object remove void reset void Compositelterator ______ currentElements Object emptylteratorsPresent boolean Compositelterator Compositelterator checkEmptylteratorsPresent void hasNext boolean nextProduct Object next Object getCurrentElement Object remove void reset void lt lt compiled gt gt java util LinkedList header java util LinkedList Entry size int serialVersionUID long LinkedList void LinkedList void add void add boolean addAll boolean addAll boolean addBefore java util LinkedList Entry addFirst void addLast void clear void clone java lang Object contains boolean entry java util LinkedList Entry get java lang Object getFirst java lang Object getLast java lang Object indexOf int lastIndexOf int HistIterator java util ListIterator readObject void remove java lang Object remove boolean remove void removeFirst java lang Object removeLast java lang Object set java lang Object size int toArray java lang Object toArray java lang Object writeObject void CollectionUtils CollectionUtils fillListFromlterator LinkedList fillVectorFromlterator Vector appendCollectionFromlterator Collection tcollectionToString String collectionToString String arrayToString String ConditionedIterator co
251. ters Cellrenderer Klassen und ObjectToStringFormatter Hierarchie Package ques NavigationBar und benutzte Klassen Package ques QueryInput Package ques QueryInput Package ques t odl eva t dialogs navigationBar t odl evaluation model query factory PanelFactory Hierarchie luation model query factory PanelProducer Hierarchie t odl evaluation model query factory InputVerifier Klassen ObjectToStringFormatterFactory Hierarchie und weitere Klassen ANHANG KLASSENDIAGRAMME 125 Evaluation Evaluation evaluate EvaluationResult EvaluationModel term Term EvaluationModel evaluate EvaluationResult toString String interface EvaluationResult existsSatAssignment boolean getSatAssignments Iterator EvaluationModelGenerator generator Generator EvaluationModelGenerator createEvaluationModel EvaluationModel BoundVariable identifier String value Object BoundVariable toString String EvaluationException EvaluationException EvaluationException UserBreakException MESSAGE String UserBreakException UserBreakException quest odl evaluation generator quest odl evaluation model InvalidOperandTypeException InvalidSelectorUsageException InvalidExpressionUsageException UndefinedNamedPredicateException InvalidArgumentsException Un
252. timierung ist es sinnvoll nur einen Teil des Quantorterms als Restriktionsbe dingung in den Variablentyp zu verschieben Das kann man sich daran klarmachen dass das Einbringen des gesamten Quantorterms in den Variablentyp gar keinen Zeitgewinn bringt der gesamte Term muss ja in diesem Fall genauso oft ausgewertet werden wie zuvor Gleichzeitig 5 4 ENTWURF OPTIMIERTER ODL ABFRAGEN 93 sollten m glichst einfache Teilbedingungen aus dem Quantorterm in den Variablentyp einge bracht werden sodass die verbliebenen komplizierteren Bedingungen nicht f r alle Typinstan zen ausgewertet werden m ssen sondern nur f r diejenigen die die einfachen Teilbedingungen erf llen Der Effekt dieser Optimierung h ngt damit von der geschickten Aufteilung des Quan torterms in schnell auszuwertende und langsam auszuwertende Teilbedingungen ab Aufspaltung der Restriktionsbedingung bei eingeschr nkten Typen Bei der Aufspaltung der Restriktionsbedingungen eingeschr nkter Typen handelt es sich um eine Optimierung die auch im Abschnitt 6 2 2 besprochen wird Solange sie nicht vom ODL Interpreter automatisch durchgef hrt werden kann sollte sie vom Benutzer selbst vorgenommen werden Wir wollen die Optimierung am folgenden Beispiel erl utern In der Abfrage exists connection var ch Channel pl Port p2 Port var ch Name Slotl and var pl Name 51051 and var p2 Name Slot and var ch SourcePort var pl and var ch DestinationPort var p2
253. tion aufgehoben dann wird so vorgegangen als w re das zuletzt ausgew hlte Element x erneut ausgew hlt worden wo bei der Wert f r x nicht mehr fest ist sondern ebenfalls gefiltert wird die ausgew hl ten Elemente sind nun xi xj und die gefilterten Elemente sind x mit te EE 118 KAPITEL 6 VERBESSERUNGSM GLICHKEITEN Nach der Implementierung dieser Optimierung k nnte der Eingabedialog f r die Beispielabfrage 6 9 wie auf der mit einem Graphikeditor bearbeiteten Abbildung 6 5 aussehen Im Unterschied zu dem Eingabedialog das bei der Filterung des letzten auszuw hlenden Elements angezeigt wird Abbildung 6 4 f hrt die Liste f r das Basistyp Element c1 nur diejenigen Komponenten auf die Unterkomponenten besitzen und daher in Basistyp Tupeln auftauchen die die Restriktionsbe dingung erf llen rrr R x stricted type variable comps Select a value from the set for 1 Select a Component for 2 Component BankingSystem finite version DT Component Driver1 Component Centrale omponent Driver2 Component Database omponent Database Abbildung 6 5 Filterung aller Basistyp Elemente eines eingeschr nkten Typs Dieser Verbesserungsvorschlag bietet mehrere Vorteile Der Vorteil des hier beschriebenen Verbesserungsvorschlags ist dass der Benutzer bei der Eingabe von Basistyp Werten f r einen eingeschr nkten Ty
254. tion werden f r IntroducedType zun chst alle Ausdr cke nach dem Schl sselwort element akzeptiert Erst bei der semantischen Analyse durch den SableCCGenerator wird berpr ft ob der Ausdruck nach dem Schl sselwort element ein mengenwertiges Ergebnis liefert e Einschr nkung beim new Quantor Ein new Quantor dient dazu eine neue Entit t zu erzeugen die von ihm gebundene Variable muss also stets vom Typ model element type sein Diese Einschr nkung wurde im Zuge der Entwicklung der Grammatik von der semantischen Ebene des SableCCGenerator s auf die syntaktische Ebene der Grammatik verlagert indem die fr here Produktionsregel unary_proposition neg unary_proposition quantifier variable_definition unary_proposition term variable_definition variable type durch die folgende Regel ersetzt wurde unary_proposition neg unary_proposition quantifier variable_definition unary_proposition new_quantifier model_element_variable_definition unary_proposition term variable_definition variable type model_element_variable_definition variable model_element_type Die Angabe eines ungeeigneten Variablentyps f r einen new Quantor wird nach dieser nde rung bereits w hrend der Syntaxanalyse einer ODL Abfrage entdeckt e Benamte Pr dikate Um die benamten Pr dikate in die Grammatik einzuf hren wurde ein neues Startsymbol hin zugef gt der entweder die Ableitung f r eine bliche
255. tungsklassen wurden an Erweiterungen der ihnen entsprechenden Sprachkonstrukte angepasst ODL User Query Eine interaktive Benutzerschnittstelle f r die Eingabe von Variablenwer ubsystem ten wurde entwickelt und in das User Query Subsystem integriert die fr here provisorische Implementierung lieferte leere Ergebnisse als Be nutzereingabe zur ck ODL Constraint Geringf gige Anpassungen und Optimierungen wurden vorgenommen Editor Tabelle 5 1 nderungen an Komponenten des ODL Systems 5 1 Erweiterung des Sprachumfangs Bevor wir die Implementierung der Erweiterungen des Sprachumfangs im Detail beschreiben wol len wir einen kurzen berblick ber die Implementierung des ODL Auswertungs Subsystems geben eine ausf hrliche Beschreibung findet sich in Pasch S 15 40 Die Abbildung 5 2 stellt noch einmal die Verarbeitung einer ODL Abfrage von der Eingabe bis zur Berechnung des Ergebnisses detaillierter dar ODL Query Text ODL Query Tokens ODL Query Syntax Tree ODL ODL Query Evaluation Evaluation Result Tree Abbildung 5 2 Verarbeitung einer ODL Abfrage Eine ODL Abfrage die vom Benutzer im ODL Editor erstellt wird muss f r die Auswertung zun chst von einem Lexer in Tokens zerlegt und anschlie end von einem Parser analysiert wer den der einen Syntaxbaum aufbaut Daf r wird der von SableCC aus der ODL Grammatik s An hang automatisch generierte Lexer und P
256. tztere d rfen zurzeit noch nicht eingesetzt werden bei ihrer Verwendung wird vom SableCCGe nerator eine UnsupportedConstructException erzeugt e Erweiterte Syntax des context Quantors F r den context Quantor wurde eine Erweiterung eingef hrt ber die optionale Parame ter spezifiziert werden k nnen die das Aussehen des Eingabedialogs f r die vom context Quantor gebundene Variable beeinflussen Zurzeit ist nur die Angabe eines Hinweistextes f r den Eingabedialog m glich quantifier ccl_quantifier context context_extension context_extension hint_extension hint_extension hint string_constant_expr_list Hierbei ist string_constant_expr_list eine durch Kommata getrennte Liste aus einer oder mehreren Zeichenketten Sie wird wie folgt definiert string_constant_expr_list string_constant_expr string_constant_expr_list_tail string_constant_expr_list_tail string_constant_expr 5 1 2 Implementierung erweiterter und neuer Sprachkonstrukte Dieser Abschnitt stellt die Implementierung der Erweiterung des ODL Sprachumfangs im ODL Auswertungssystem dar Wir werden die nderungen an vorhandenen ODL Auswertungsklassen sowie neue ODL Auswertungsklassen beschreiben Des Weiteren zeigen wir die nderungen am SableCCGenerator die notwendig waren um die neuen ODL Auswertungsklassen einsetzen zu k nnen e Typsystem Das ODL Typsystem ist vom Java Typsystem soweit wie m glich abgekoppelt und hat ei
257. uantor gebundene Variable nicht in den Produkt typ eingebracht wird componentsConnected cl Component c2 Component exists ch Channel exists ports pl Port p2 Port is SourcePort ch ports pl and is DestinationPort ch ports p2 or is SourcePort ch ports p2 and is DestinationPort ch ports pl and is Ports cl ports pl and is Ports c2 ports p2 Die Auswertungszeit sinkt dadurch auf 52 Sekunden Als n chste Optimierung wollen wir die mehr 5 4 ENTWURF OPTIMIERTER ODL ABFRAGEN 95 wertige Relation Ports zwischen Komponenten und Ports durch die einwertige Relation Compo nent zwischen Ports und Komponenten ersetzen componentsConnected cl Component c2 Component exists ch Channel exists ports pl Port p2 Port is SourcePort ch ports pl and is DestinationPort ch ports p2 or is SourcePort ch ports p2 and is DestinationPort ch ports pl and ports pl Component cl and ports p2 Component c2 Die Auswertung dauert nun 48 Sekunden Als n chstes bringen wir einen Teil des Quantorterms als Restriktionsbedingung in den Produkttyp ein der dadurch zu einem eingeschr nkten Typ wird componentsConnected cl Component c2 Component exists ch Channel exists ports p pl Port p2 Port is Ports cl p pl and is Ports c2 p p2 is SourcePort ch ports pl and is DestinationPort ch ports p2
258. uer Kontrollklassen ohne dass andere ODL Auswertungsklassen modifiziert werden m ssen Kapitel 7 Fazit Die vorliegende Arbeit setzte sich zum Ziel eine Erweiterung der Operation Definition Langua ge ODL im AutoFocus Quest Application Framework vorzunehmen und eine interaktive Benut zerschnittstelle f r die Auswertung von ODL Abfragen zu implementieren Diese Ziele wurde im Rahmen der in der in der Aufgabenstellung Abschnitt 1 1 beschriebenen Anforderungen erreicht e Der Sprachumfang von ODL wurde um die beschriebenen Konstrukte Produkttypen Men genkomprehension Mengentypen Selektorausdr cke benamte Pr dikate sowie um einige zus tzliche Konstrukte darunter Vergleiche und arithmetische Operationen erweitert e F r Benutzereingaben wurde eine interaktive dialogbasierte Benutzerschnittstelle entwickelt welche die Eingabe von Werten f r alle zurzeit unterst tzten ODL Datentypen erm glicht und w hrend eines Eingabevorgangs die R ckkehr zu fr heren Eingabeschritten erlaubt Bei der Implementierung neuer ODL Sprachkonstrukte sowie der interaktiven Benutzerschnittstelle wurde auf die Wiederverwendbarkeit der erstellten Module sowie die Flexibilit t und Erweiterbarkeit des ODL Auswertungssystems und als sein Bestandteil der interaktiven Benutzerschnittstelle geach tet Insbesondere bed rfen Modifikationen der Benutzerschnittstelle die nicht mit einer nderung der ODL Sprachkonstrukte einhergehen keiner Anpassun
259. uf hrende Operation mehrere Mausklicks mit einer eventuell anschlie enden Texteingabe ben tigt Eine Automa tisierung solcher Abl ufe w rde f r den Benutzer eine wesentliche Erleichterung der Arbeit bedeuten 2 3 MOTIVATION KOMPLEXE TRANSFORMATIONEN AN QUEST MODELLEN 13 Wir wollen die oben aufgef hrten Vorteile komplexer Transformationen am Beispiel einer ODL Abfrage demonstieren die in Anlehnung an das Beispiel aus Sch01 auf 5 4 alle Ports des Systems mit dem Namen out zu outPort umbenennt exists p Port Iterate over all ports of the system Rename port only if the specified condition is fulfilled is Name p out and result has Name p outPort Um dieselbe Arbeit manuell auszuf hren m sste der Benutzer alle Komponenten nach Ports mit dem Namen out durchsuchen und die gefundenen Ports von Hand umbennen dies k nnte abh ngig von der Projektgr e sehr viel Zeit in Anspruch nehmen und w re anf llig f r Tippfehler bei der Um benennung Die Eingabe der obigen ODL Abfrage mit quivalenter Wirkung nimmt dagegen weniger als eine Minute in Anspruch die Ausf hrungszeit liegt gar im Millisekuden bis Sekundenbereich Im Rahmen des Systementwicklungsprojekts Tracht wurde exemplarisch folgende komplexe Transformation implementiert in einer Komponenten wurde ein Kanalb ndel ausgew hlt in das an schlie end eine andere Komponente eingef gt wurde daf r wurden alle Kan le aus dem Kanal
260. un lediglich eine Unterklasse von BinaryArithmetic Expression erstellt werden die in der Methode calculateArithmeticExpression die notwendige arithmetische Operation ausf hrt Genau dies tun die Klassen Addition Expression SubtractionExpression und MultiplicationExpression Das entsprechende Klassendiagramm ist auf der Abbildung A 3 zu sehen Im SableCCGenerator sind folgende Methoden f r die Verarbeitung von arithmeti schen Ausdr cken verantwortlich outAConstantArithmeticTerm outAExpres sionArithmeticTerm outAArithmeticTermFactor outAMultFactor out AFactorArithmeticExpression outAPlusArithmeticExpression und out AMinusArithmeticExpression Neben den oben genannten arithmetischen Operationen wurde der Ausdruck size set Expression implementiert der die Gr e einer Menge berechnet Dieser Ausdruck ist zwar kein echter arithmetischer Ausdruck sondern eine Funktion er wurde aber in der ODL Grammatik ber die Produktion arithmetic term eingef hrt weil er wie auch arithmeti sche Ausdr cke ein ganzzahliges Ergebnis zur ckliefert Der Ausdruck wird durch die Klasse SetSizeExpression implementiert die einen Ausdruck als Parameter erh lt und die Gr De der Menge berechnet die der Parameterausdr ck als Ergebnis liefert Da dieser Ausdruck nur auf Mengen angewandt werden darf wird bei seiner Kompilation im SableCCGenerator in der Methode outASetSizeArithmeticTerm berpr ft ob der Parameterausdruck immer ein menge
261. ung Operationen k nnen in kurzer Zeit programmiert werden f r die Erstellung einfacher Abfra gen wird weniger als eine Minute ben tigt 14 KAPITEL 2 BERBLICK e Lesbarkeit Abfragen in einer Query Sprache sind viel leichter zu lesen als quivalente Abfragen die mit Sprachmitteln einer allgemeinen Programmiersprache wie Java oder C implementiert wur den Flexibilit t Operationen sind leicht zu modifizieren Daf r muss lediglich die entsprechende Abfrage ange passt werden welche anschlie end sofort ausgef hrt werden kann Leichte Erlernbarkeit Der Benutzer ben tigt keine Programmierkenntnisse in Java und keine Kenntnisse ber die QUEST Metamodell Schnittstelle Die Kenntnis der Query Sprache selbst gen gt um komple xe Transformationen zu programmieren Garantierte Terminierung F r Abfragen in einer Query Sprache kann die Terminierung der Berechnung garantiert wer den Dies wird erreicht indem alle Sprachkonstrukte auf endlichen Universen operieren und die Deklaration rekursiver Terme untersagt ist die einzige zul ssige Form der Rekursion ist die Verwendung des Fixpunktoperators in einer Form die immer zu Rekursionen endlicher Tiefe f hrt beispielsweise Fixpunktoperator auf Mengen wobei die kleinste oder die gr te Teilmenge eines endlichen Basistyps ermittelt werden soll bei der alle Elemente einer Restrik tionsbedingung gen gen Einfache Anpassung an Metamodell nderungen Eine Query Sprache i
262. ur 0 MessageFlag 0 PortT2in Info DefaultBehaviour 0 MessageFlag 0 m Abbildung 2 3 Baumdarstellung einer Komponente 10 KAPITEL 2 BERBLICK 2 2 Metamodell von AutoFocus QUEST Das Metamodell beschreibt welche Modellierungskonzepte zur Entwicklung von Modellen zur Ver f gung stehen z B Komponenten Kan le Ports Zust nde und wie sie zueinander in Verbindung stehen z B ein Port geh rt zu genau einer Komponente Sch01 S 3 4 Die Abbildung 2 4 die aus TACAS00 entnommen wurde zeigt ein vereinfachtes Klassendiagramm des Metamodells f r SSD s und STD s Im Folgenden erl utern wir die f r uns wichtigen Elemente des QUEST Metamodells die wir in sp teren Beispielen von ODL Abfragen benutzen werden e Komponente Komponenten sind Grundbausteine von Modellen Eine Komponente enth lt Unterkomponen ten das sind Komponenten im SSD welches die Struktur der betrachteten Komponente be schreibt Ports ber die Signale gesendet und empfangen werden sowie Kan le die die Un terkomponenten der Komponente untereinander verbinden e Port Ein Port dient einer Komponente zur Kommunikation mit der Umgebung Das Attribut Direc tion bestimmt ob der Port ein Ausgangsport oder ein Eingangsport ist Der Typ der Daten die der Port senden bzw empfangen kann wird bei jedem Port ber das Attribut Type festgelegt Ein Eingangsport kann mit h chstens einem Kanal verbunden sein
263. ur Verf gung dass speziell f r Mengen entwickelt wurde s Abschnitt 4 2 5 und Abbildung 4 9 Introduced type query Product type query Settype query Yalue input Yalue input Yalue input List Composite query input panel with zoom e Input panel with adding values to a listitable of set vd Radio buttons ERBE Y Display known variables in Display known variables Display known variables in GEES Table Text area Text area O Table Table Query dialog Default query dialog e Query dialog with resizable areas Query dialog Query dialog Default query dialog _ Default query dialog Variable value Query dialog with resizable areas Query dialog with resizable areas List display for set entries e Table display for set entries v Use shared dialog instance Use shared dialog instance 0 Use shared dialog instance Abbildung 4 15 Konfiguration der Eingabedialoge f r Abbildung 4 16 Konfiguration des IntroducedType und ProductType Eingabedialogs f r Set Type F r die Eingabe von Rest rictedType Werten ist keine Eingabedialog Konfiguration notwen dig weil der Eingabedialog f r einen RestrictedType u erlich dem Eingabedialog f r seinen Basistyp gleicht s Abschnitt 4 2 4 es werden somit auch die Eingabedialog Einstellungen des Basistyps verwendet 4 3 BEISPIELE VON ODL ABFRAGEN 39 4
264. us erreicht Nichtsdestoweniger ist die Implementierung dieses Algorithmus von Vorteil denn er nimmt dem Benutzer die Notwendigkeit ab auf die optimale Positionierung verschiebbarer Quantoren in ODL Abfragen zu achten indem er jede Abfrage automatisch zu einer quivalenten Abfrage mit optimal positionierten verschiebbaren Quantoren umwandelt 6 2 2 Optimierung eingeschr nkter Typen Wir wollen uns in diesem Abschnitt mit der Optimierung der Iteration ber Instanzen eingeschr nkter Typen besch ftigen deren Basistypen aus mindestens zwei Elementtypen besteht Bei einem solchen eingeschr nkten Typ kann der Restriktionsterm Bedingungen enthalten f r deren Berechnung nur eine Teilmenge aller Typelemente des Basistyps verwendet wird Betrachtet wir einen als Beispiel einen eingeschr nkten Typ der Form p x1 Typel x2 Type2 P p x1 and 1 p x2 6 3 wobei P und ODL Terme sind Hier muss die Restriktionsbedingung P nicht f r alle Belegungen von x2 neu berechnet werden da x2 keinen Einfluss auf ihr Ergebnis hat Bei einer nicht optimierten Iteration ber die Werte dieses eingeschr nkten Typs w rde die Bedingung jedoch f r jedes Tupel x1 x2 TypelxType2 und damit f r jede Belegung von x2 ausgewertet Eine Optimierung best nde darin dass der Basistyp x1 Typel x2 Type2 in seine Elemen te x1 Typel und x2 Type2 aufgeteilt wird und die Restriktionsbedingung nur auf das Element x1 angewandt wird Dies kann mit folgend
265. ustands bergangsdiagrammen wird das Verhalten von Systemen und Kompo nenten beschrieben ber Kommunikationskan le erhalten Komponenten Eingaben aus der Umgebung und senden Ausgaben an die Umgebung die entsprechend dem festgelegten Ver halten und abh ngig vom aktuellen Zustand der Komponente erzeugt werden Bei den STD s handelt es sich um erweiterte endliche Automaten die lokale Variablen der Komponente nutzen d rfen dessen Verhalten sie beschreiben DTD Datatype Definitions Die vom einem System verwendeten Datentypen werden in einer textuellen Notation definiert Der Benutzer kann zus tzlich zu den vordefinierten Basistypen eigene Datentypen definieren Datentypen werden zur Deklaration lokaler Variablen in Komponenten sowie zur Definition von Datentypen der bertragenen Daten bei Kommunikationskan len und Kommunikationsports verwendet 8 KAPITEL 2 BERBLICK gt AutoFocus Project Browser Project Document Options Tools Windows Help Projects ATM Proj_AddSum SimpleTL ChannelSplitTest01 Channels plitTest02 Proj_AddSum_Simple ChannelSplitTest03 FM99Finite r 550 El Database 90900999099909909099999999999929929 N D 2 ki E C C SSD Editor lt edit gt Centrale lol xj File Edit Tools Options Help ie STD DriveEcconomicCable Ej TransactionMan El Ej EcconmicCable DTD Inp1 Info T1in Info C1Ack Signal Tiout Message specification A
266. utLab addQueryInputListener void TextAreaValuesDisplayComponent initComponents void displayValues void appendVariable Value void Abbildung A 11 Package quest odl evaluation model query dialog QueryDialog Hierarchie KLASSENDIAGRAMME ANHANG A 136 UNS DOT Al ter Anugnioga AONEWLIOASULNSOL UNSURU YS UNS usuoduoy AONPULIO ZFULNSO p Kimugueuoduro 4 SUNS UOUS SUNS F 8 JFULNSO Late SULNS UONTIUSSSIHSASULSH ueneuuo 3urngo nuguoruonmy 4 nuguoruony 4 IOPEULIO Ajmujqioq Jap eULIOJFULNSO Tnupuouo duio Surng uonguese1dosaurns4 AONEULIOJFULNSO one p19S4 AONTULIOJFULNSO Lone 9 1 8 Lane L19S 8 42 1 1 8 Surng uonvuose1dospSurns4 5 040 Sue LANE 5 040 8 Ad sodwiog Suinguoyemdagoanyea Sums NOLVAVAIS LINVIAA PIOA Oeu SUNSA Doefqoiess Tpu LWOFGO IONEULIO 4811150115 90328 gyme esef ao 1 1 2521421128
267. ute und Assozia tionen im QUEST Metamodell abzubilden Bei der Auswertung einer ODL Abfrage muss der ODL Costraint Evaluator f r die Auswertung von context Quantoren auf das ODL User Query Subsystem zugreifen damit der Benutzer einen Wert f r die vom context Quantor gebundene Variable eingeben kann Das QUEST Meta Model Interface stellt die Schnittstelle zum QUEST Metamodell dar ber die das ODL System auf das Metamodell und auf Produktmodelle zugreifen kann Diese Schnittstelle die eine Fassade Implementierung GammaEtAl S 212 222 darstellt ist vom Grund satz her nicht an eine konkrete Metamodell Implementierung gebunden ihre Zugriffsmechanismen k nnen an neue Metamodell Implementierungen angepasst werden ohne dass die f r das ODL 44 KAPITEL 5 IMPLEMENTIERUNG System sichtbare Schnittstelle sich wesentlich ndert sodass das ODL System f r die Arbeit mit einem neuen Metamodell nicht oder geringf gig modifiziert werden muss Die Tabelle 5 1 f hrt die im Rahmen der vorliegenden Arbeit realisierten nderungen an verschie denen Komponenten des ODL Systems auf Komponenten nderungen ODL Constraint Der ODL Abfragegenerator wurde an die Erweiterung bestehender und Generator Einf hrung neuer Sprachkonstrukte angepasst Die vom Generator be nutzte SableCC Grammatik f r ODL wurde erweitert ODL Constraint Auswertungsklassen f r neue Sprachkonstrukte wurden hinzugef gt Evaluation vorhandene Auswer
268. uvajooq WERTE ES saga Amdulloog TISTO ATONE roga A Indian E EE EES ESA ELE DD urajoog Ajua a BIER AIT UT PHUT fuos ueojooq snoogpprorApImoqs Rafusamdup unsxvanf lt lt gt gt TEE EE EELER TUSUOAUOJRBIISTFONJEA amsi uodo A Naor A4aonpoagiuouoduio Kepdsiqsone A earyxo EE posd Ofeydsiqsong 4 831V139 2 aoneuniojurngo p fqO 1 netuio4 nugararo 8 1 1 8 aonvunio FUN go 29fqQ ommo pazura aoneuno 8uungo 129fq0 omo umso ioofqoimntja T 1 1 1 1 1 1 aoneuno 43utaso ioofqo ane 1 1 I LEE EES baang sonpoA oowvisu nouoduio soning onu
269. verbunden Eine ausf hrliche Beschreibung dieses Vorgangs findet sich in Tracht S 40 47 Man kann sich leicht eine Situation vorstellen in der der Benutzer im dritten Teilschritt ein Dut zend Portzuordnungen getroffen hat und sich dann berlegt dass er im ersten Schritt noch einen Kanal dazunehmen will In diesem Fall kann der Benutzer mithilfe des Previous Buttons im Eingabedialog zum zweiten und dann zum ersten Teilschritt zur ckkehren die Kanalauswahl anpassen und zum drit ten Teilschritt weitergehen die Eingaben die er im dritten Eingabedialog vorgenommen hat gehen dabei nicht verloren Dieser Vorgang l sst sich zwar zurzeit nicht mithilfe einer ODL Abfrage programmieren dies sollte aber voraussichtlich mit den n chsten Erweiterungen der ODL Ausdrucksm chtigkeit m glich werden Nehmen wir also an dass es eine ODL Abfrage gibt die diesen Vorgang beschreibt eine 120 KAPITEL 6 VERBESSERUNGSM GLICHKEITEN Abfrage die keine Kopie sondern die Original Komponente in ein Kanalb ndel einsetzt ist bereits mit dem aktuellen Sprachumfang von ODL m glich Die aktuelle Implementierung der Dialogfluss kontrolle im ODL Query Subsystem erlaubt die R ckkehr zu fr heren Eingabedialogen speichert allerdings die Eingaben aus sp teren Eingabedialogen nicht Wenn der Benutzer also vom dritten Teilschritt zum ersten zur ckkehrt gehen die im dritten Teilschritt getroffenen Portzuorndnungen verloren sodass er alle Eingaben wiederholen
270. versit t M n chen 2002 Sch tz The ODL Operation Definition Language and the AutoFocus Quest App lication Frameword AQuA Technischer Bericht TUM I01 1 1 Institut f r Informatik Technische Universit t M nchen 2001 152 LITERATURVERZEICHNIS SBHWO3 SPHPO2 Validator JavaAPI ODLAPI AFHome QUESTHome Tracht B Schatz P Braun Huber A Wisspeintner Checking and Transforming Mo dels Methodological Aspects of Model Based Development Institut f r Informatik Technische Universit t M nchen 2003 B Sch tz A Pretschner F Huber J Philips Model based Development of Embed ded Systems Technical Report TUM 10402 Institut f r Informatik Technische Uni versit t M nchen 2002 Validator Manual Version 1 4 2 b Validas Model Validation AG 2003 Java 2 Platform Standard Edition v 1 4 2 API Specifications Sun Microsystems Inc 2003 ODL API Specifications v 1 1 Generated by javadoc from sources 2003 Die AutoFocus Homepage http autofocus in tum de Fakult t f r Informatik Technische Universit t M nchen Software Development Project QUEST http www4 in tum de proj quest Fakul t t f r Informatik Technische Universit t M nchen D Trachtenherz Konzeptmodellbasierte Manipulation von Systemspezifikationen Systementwicklungsprojekt Technische Universit t M nchen 2002
271. vom ersten Quantor aus der Quantorliste gebunden wird in den Produkttyp keine Vorteile bringt weil ber ihre Werte nur einmal iteriert werden muss durch das in diesem Fall unn tige Cachen entsteht sogar ein geringf giger Mehraufwand von ca 2 Verwendung von Relationen statt Restriktionen Wird eine Bedingung ausgewertet bei der das Bestehen einer Relation zwischen Entit ten ber pr ft wird so sollte die Anzahl der zu berpr fenden Entit ten nach M glichkeit verringert werden Manchmal l sst sich die berpr fung der Relation ganz vermeiden indem nicht ber alle Entit ten eines Metamodelltyps zur berpr fung der Relation iteriert wird sondern direkt auf alle assoziierten Entit ten ber den Relationsnamen zugegriffen wird Nehmen wir als Bei spiel die Abfrage exists c Component exists pair chl Channel ch2 Channel is Channels c pair chl and is Channels c pair ch2 and pair chl Name 51051 and pair ch2 Name S10ot2 Anstatt der Restriktion is Channels c pair chl k nnen wir den direkten Zugriff auf alle Kan le einer Komponente verwenden exists c Component exists pair chl element c Channels ch2 element c Channels pair chl Name Slotl and pair ch2 Name 51052 Die ben tigte Auswertungszeit sinkt dabei um dem Faktor 30 Der Grund f r den Geschwin digkeitszuwachs liegt darin dass in der ersten Abfrage ber alle Kan le des Modells iteriert wird und erst danach die Ei
272. werden kann Abb 4 4 auf 5 29 Um zu vermeiden dass f r jede Benutzereigabe neue Dialogfenster Instanzen angelegt wer den und um zus tzlich f r jeden ODL Datentyp zur Laufzeit festlegen zu k nnen welcher Dialogfenstertyp f r Benutzereingaben zu verwenden ist wird je eine Instanz von allen ver f gbaren Dialogfenstertypen durch die Klasse QueryDialogManager verwaltet Sie ist ein 5 2 INTERAKTIVE BENUTZERSCHNITTSTELLE 67 Singleton GammaEtAl S 157 166 dessen einzige Instanz von der Methode get Instance zur ckgeliefert wird F r die Eingabedialoge DefaultQueryDialog und SplitPanel QueryDialog stellt der QueryDialogManager die Methoden getDefaultQuery DialogInstance und getSplitPanelQueryDialogInstance bereit welche die von QueryDialogManager verwaltete Instanz der jeweiligen Dialogklasse zur ckgeben F r jeden ODL Datentyp au er dem eingeschr nkten Typ der generell keine eigene Konfi guration f r Benutzereingaben ben tigt s auch Abschnitt 4 2 4 stellt OQueryDialogMana ger die Methode QueryDialog get ODLType QueryDialog zur Verf gung die f r den jeweiligen Typ die Eingabedialog Instanz zur ckgibt die f r Benutzereingaben zu ver wenden ist hier kommt das Strategie Entwurfsmuster GammaEtAl S 373 384 zur Anwen dung Das Gegenst ck zu dieser Methode stellt die Methode set ODLType QueryDia log QueryDialog dialog die den zu benutzenden Eingabedialog festlegt Wenn wir beispielsweise den e
273. yInputListener Interface QueryInputEvent Die Eingabepanels f r Mengenwerte ben tigen eine weitere Gruppe von Klassen die in diesen Eingabepanels zur Anzeige bereits in die Menge eingef gter Werte dienen SetValueDisplay Interface AbstractSetValueDisplay ListSetValueDisplay TableSetValueDisplay Werteanzeige Komponenten die in Eingabedialogen zur Anzeige der Werte bereits bekannter Variablen ver wendet werden Klassen AbstractValuesDisplay DefaultValuesDisplay 66 KAPITEL 5 IMPLEMENTIERUNG ValuesDisplayComponent Interface TextAreaValuesDisplayComponent TableValuesDisplayComponent Das Package enth lt zwei weitere Klassen die in keine der obigen Gruppen eingeordnet werden k nnen QueryConfigurationDialog implementiert einen Konfigurationsdialog f r das ODL Query Subsystem die Klasse NavigationEventException wird in der Dialogflusskontrolle eingesetzt und wird im Abschnitt 5 2 3 besprochen Der Aufbau eines Eingabedialogs wurde auf der Abbildung 4 1 gezeigt Wir wollen noch einmal diesen Aufbau zeigen jetzt allgerdings mit der Benennung der Klassen die f r die einzelnen Bereiche des Eingabedialogs zust ndig sind Abbildung 5 4 xi Enter integer value for 1 QueryInputPanel 10 QueryDialog lt lt Previous Cancel Next gt gt NavigationBar string1 str1 string2 str2 ValuesDisplay Abbildung 5 4 Aufbau eines Eingabedialogs Betrachten wir
274. zter Typen die eingeschr nkte Typen als Elemente enthalten 114 KAPITEL 6 VERBESSERUNGSM GLICHKEITEN E input varionie x roduct type variable names Restricted type variable compName Restricted type variable portName Slot vi Input correct Centr 1 Input correct Hint ihe an existing component name and an existing port name x Abbildung 6 2 Eingabe von RestrictedType Werten mit Korrektheitsanzeige 2 Auflistung aller zul ssigen Werte des eingeschr nkten Typs Eine vergleichsweise einfach zu implementierende allgemeine L sung f r die Eingabe einge schr nkter Typen ist s mtliche zul ssigen Werte im Eingabebereich aufzulisten damit der Benut zer einen der Werte ausw hlen kann Die Abbildung 6 3 die mithilfe eines Graphikeditors erstellt wurde zeigt wie ein solcher Eingabedialog f r einen eingeschr nkten Typ mit dem Basistyp cl Component c2 Component c3 Component aussehen k nnte Der Vorteil dieser L sung gegen ber der aktuellen Implementierung ist dass jeder Wert in der Auflistung die Restriktionsbedingung erf llt und damit auch eingegeben werden darf sodass der Benutzer nicht mehr selbst auf die Einhaltung der Restriktionsbedingung achten muss Die Auflis tung aller zul ssigen Werte hat aber auch Nachteile e Zum Aufbau der Liste m ssen alle Basistypwerte auf die Erf llung der Restriktionsbedin gung berpr ft wer
275. zu einen bereits erstellten NamedPredicateTerm wei terzugeben Die Erstellung und berpr fung eines NamedP redicateTerm findet in der Methode out ANamedPredicateCall statt Hier wird zun chst berpr ft ob das auf gerufene Pr dikat bereits deklariert wurde dann wird berpr ft ob die Anzahl und die Typen der Parameter mit der deklarierten Signatur des benamten Pr dikats bereinstimmen Schlie lich wird ein NamedPredicateTerm erstellt der das aufzurufende NamedPre dicate kapselt e CCL Propositionen F r die CCL Propositionen existiert in der ODL Grammatik ein eigener Ableitungszweig der mit einigen Ausnahmen mit dem f r ODL Propositionen bereinstimmt s Abschnitt 5 1 Da die Verarbeitung von Syntaxbaum Knoten f r eine CCL Proposition und eine ODL Proposition gleich ist wurden im SableCCGenerator die Methoden f r CCL Propositionen erstellt indem entsprechende Methoden f r ODL Propositionen kopiert und die Namen der Methoden und der in Methodenr mpfen aufgerufenen Methoden angepasst wurden Beispielsweise wurde aus der Methode f r die AND Verkn pfung von zwei ODL Propositionen public void outAAndProposition AAndProposition node Term leftTerm Term getOut node getProposition Term rightTerm Term getOut node getUnaryProposition setOut node new Conjunction leftTerm rightTerm 58 KAPITEL 5 IMPLEMENTIERUNG durch Kopieren und Namensanpassung die Methode f r die AND Verkn pfung von zwe
Download Pdf Manuals
Related Search
Related Contents
ELA 4170 user manual MANUAL DE INSTRUÇÕES Sentido de Rotação KMV , English, Pages 67 14 Freins INSTALLATION AND OPERATION MANUAL CAMARA DOMO IR 3 AXIS Guide de Sécurité Sicherheitsanleitung FR DE Mode d`emploi MOVE PDF Copyright © All rights reserved.
Failed to retrieve file