11.07.2015 Aufrufe

ODL-Sprachkonstrukte und interaktive Benutzerschnittstelle - TUM

ODL-Sprachkonstrukte und interaktive Benutzerschnittstelle - TUM

ODL-Sprachkonstrukte und interaktive Benutzerschnittstelle - TUM

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

42 KAPITEL 4: ERWEITERUNG VON <strong>ODL</strong>new outPort:Port.(result has Name( outPort, channel.Name ) andresult has Type( outPort, channel.Type ) andresult has Direction( outPort, chPorts.out.Direction ) andresult has Ports( midComp, outPort ) and/* Kanal zwischen dem neuen Ausgangsport <strong>und</strong>dem Eingangsport des gelöschten Kanals erstellen */new outChannel:Channel.(result has Name( outChannel, channel.DestinationPort.Name ) andresult has Type( outChannel, channel.Type ) andresult has SourcePort( outChannel, outPort ) andresult has DestinationPort( outChannel, chPorts.in ) andresult has OutChannels( outPort, outChannel ) andresult has InChannel( chPorts.in, outChannel ) andresult has Channels( mainComponent, outChannel ))))))Abschließend wollen wir noch einige Beispiele vorstellen, die mit der Verwendung des Fixpunktoperatorsmöglich werden, der kurz nach der Fertigstellung des Implementierungsteils der vorliegendenArbeit von einem anderen Entwickler realisiert wurde.• Rekursives Finden aller Komponenten, die im Strukturbaum einer vom Benutzer ausgewähltenKomponente vorkommen, d.h., für die ausgewählten Komponente werden alle Unterkomponenten,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• Konsistentes Umbenennen einer Kette von Kanälen: gibt es zwischen Komponenten c 0 , c 1 , . . . ,c n Kanäle ch 1 , ..., ch n , die alle denselben Namen haben, so können alle Kanäle aus dieserKette umbenannt werden, indem der Benutzer einen Kanal c i auswählt, den neuen Nameneingibt, <strong>und</strong> anschließend die anderen Kanäle aus der Kette mithilfe des Fixpunktoperatorsgef<strong>und</strong>en <strong>und</strong> 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 sourcecomponent, 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 destinationcomponent, whether they are connected to the channel*/(exists pOut:element(ch2.DestinationPort.Component.Ports).ch.SourcePort = pOut ) ) ) ).forall channel: element channelSet.result has Name( channel, p.newName )

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!