Home
- Fachgebiet Datenbanken und Informationssysteme
Contents
1. Abbildung A 13 Das Abspielen von Anrufen in Spezialfunktionen die einzelne Anrufbeantworter bieten wie etwa dem Aufnehmen von Notizen des Benutzers oder einer Fernabfrage 170 Das wahre Gl ck Du Menschenkind oh glaube doch mitnichten da es erf llte W nsche sind es sind erf llte Pflichten Deutsches Sprichwort Anhang B Pflichtenheft Dieses Dokument wurde vor Entwurfsbeginn entworfen um die Zielkriterien wel che unser Programm implementieren sollte festzulegen Insbesondere bei den Kann Kriterien tauchten w hrend der Arbeit Gr nde auf einige davon nicht zu implemen 1 tieren B 1 Zielbestimmung B 1 1 Muss Kriterien Es soll ein Programm zur Erstellung von Statecharts entworfen werden Im einzelnen sollen die folgenden Programmteile dazu implementiert werden e Grafischer Editor mit mehrere Ansichten zum Editieren der Statecharts e Rudiment rer Dialog Editor e Simulator der die Funktion der Dialoge mit verbundenen Ereignissen abarbeitet Quelltext wird in gewissem Umfang beachtet e Verifikator zum Finden einfacher Fehler e Quelltextgenerierung des erstellten Dialogmodells in Java e Mehrfach Instantiierung von Teilen des Statecharts ohne dass diese kopiert wer den m ssen Diese Anforderung wurde in Absprache fallengelassen e Statecharts drucken lygl Abschnitt 6 9 171 Einsatz Kapitel B Pflichtenheft B 1 2 Kann Kriterien Die folgenden Funktionen k nne
2. 109 5 6 Inspektor mit markiertem Button o 109 5 7 Verschiedene Zust nde in der Ansicht 113 5 8 Verschiedene Transitionen in der Ansicht 114 5 9 Defaulteinstieg Konnektor Historyeinstieg und tiefer Historyeinstieg in der Ansicht 115 5 10 Die Werkzenpleiste 0 0 dr e a RE a 115 gt 11 Die Ersetzumestabelle u i u 3 ece a a a ae a ne 117 5 12 Die Eigensch ftsleiste 2 22 a nr 118 3 13 Der Dialog Editor aii a a na E 118 3 14 Die Braisnisliste 2 3 22 02 2 wa sen ara a ae 121 3 13 Die Aktionsiste oc cos 2 Ken warnen wen een 122 5 16 Das Aktionen Eigenschaftsfenster o o 123 3 17 Das Simulationsfensier o o 22 28 sas 0 aa a un a 124 5 18 Ansicht w hrend einer Simulation o 124 5 19 Simulationsfenster w hrend einer Simulation 125 5 20 Der Verifikator nach einem Durchlauf 128 5 21 Das Auswahlfenster f r den Verifikator 129 5 22 Ein ung ltig platzierter Hook o o 131 6 1 berblick ber die Pakete onen 136 6 2 Klasseniiberblick des Pakets LogSCM o oo oo 137 6 3 Klasseniiberblick des Pakets GrafSCM 2 2 22 2020 139 6 4 Klasseniiberblick des Pakets SimSCM o o o o ooo oo 141 6 5 Aufbau des logischen Dialogmodells 142 6 6 berblick ber die Klassen des Statechart Editors 143 6 7 Hier
3. o 24 1 2 8 Die Menge der Aktionen A 2 222er 25 1 2 9 Die Menge der Kanten K 2 2 2 o o 25 1 2 10 Die Sprache der Bedingungen IB 2 22 2 26 1 3 Grafische Definiton so s s 0 nenn neun en 27 1 3 1 TUSTAMOS a a re re 27 1 3 2 UE Es sw ds ar ae 28 1 3 3 Detaulteins et lt a en rd 30 1 3 4 Historyvemstieg v 2 es Sa san dr ware aa a ae 30 1 35 A o IN 31 1 4 Temporale Auswertung meer een 31 1 4 1 Der Zustand eines Statecharts 31 1 4 2 DRA u ta mati i ne a g ASi a aa 32 13 Abweich ngen gt oec cee 04 a a da 35 Varianten von Statecharts in der Literatur 37 ZU EnEn gt osea a a Ae a e 37 22 ZNANE oi a ee ad aa 38 22 1 Grundformen der atomaren Zust nde 38 22 2 Zusammengesetzte Zust nde 39 22 3 Parametrisierte Zust nde oosa co 22 onen 39 2 2 4 Denkbare Erweiterungen des Zustandsbegriffs 40 Inhaltsverzeichnis u 23 Konnekloren cocan ey Ead rad 2 3 1 Grundformen der Konnektoren 2 3 2 Der Historykonnektor 2 2222er 24 Verbindungen e ecs mon ae a a a 2 4 1 Zusammengesetzte berg nge 22 222222 2 4 2 Determinismus und Priorit ten 2 4 3 Denkbare Erweiterungen des Ubergangsbegriffs 29 Ereignisse o cada e a o a 23 Sichtbarkeitsdauer o o 2 3 2 Die Rahmenbedingung 2 2222 2 6 Bedingungen s esis eai a a gie ea
4. 239 D9 13 ElasseGrablert 2 2 isa 020 naa rn 240 D 9 14 Klasse GraflopLevelZust o 241 D9 15 Klasse GrafTyp u or ar eni ee a A E 242 D 9 16 Klasse GrafZustand o 243 D917 Klasse Partitionen o cos s 2 2 as ra ne 247 D918 Klasse SuperList o s co e acan neun 249 D 9 19 Klasse Unterpunkt oo siora mna io wateista 249 D 10 Package score LogDM o o ao oca nu ea ea a a Pa E e a 250 D 10 1 Kl ssenhier rchie eo cs 2a 2822 eseatu s psa 250 D 10 2 Interface DialogCompManager 250 D 10 3 Interface DialogCompServer o o 250 D 10 4 Klasse DigButton o o e e 251 D 10 5 Klasse DigCheckboXk coo o 251 D 10 6 Klasse DlgKomponente o o 252 D 10 7 EKlasse DlgP p p s s s s ss sara aTi a 254 D 10 8 Klasse DlgRadiobutton 2 2 2 aaa 255 D109 Klasse DISTEXE ooo crecida 255 D 10 10 Klasse DeTimer cc 2 2 22 24 agoa 222082 256 D 10 11 Klasse LogDModell o 257 D 01 Package score LosCM ocu cio seen anne 258 D 11 1 Klassenhierarehie a s ooe 22 2 228 7 22H e a 258 D 11 2 Klasse KonDefault 22 2 2 none 259 D 11 3 Klasse KonHistory lt s us 0 an 259 D 11 4 Klasse Konnektor s e s oce 2 Cm o e e 259 D 11 5 Klasse KonUniversal o rennen 260 D 11 6 Klasse LogComponent o o 260 DMA Klasse LogPl ll cocinar cs 2 28 408 260 D 113 Klasse LogPl
5. CREATE ACTION actionld clearHistAct deepClearHistAct setDialogVisible incVarAct setDialogOnAct setDialogOffAct throwAct javaAct createText CREATE TEXT id offset text addCondition ADD CONDITION TO arrowld condition addAction ADD ACTION actionld TO target addEvent ADD EVENT eventld TO arrowld addText ADD TEXT id TO stateld identification id name size state Type STATE ORSTATE ANDSTATE ENDSTATE konnType DEFAULT UNIVERSAL HISTORY DEEPHISTORY dlgType BUTTON CHECKBOX TIMER TEXTFIELD RADIOBUTTON POPUP create1 1 1 1 arrowld onlySection createl N 1 N arrowld oneStart connectorHook endSections createN 1 N 1 arrowld startSections connectorHook oneEnd F r den Verst ndigen genug 2vgl Abschnitt 6 8 175 176 condition clearHistAct clearHistAct deepClearHistAct deepClearHistAct setDialogVisibleAct setDialogVisibleAct setDialogOnAct setDialogOnAct setDialogOffAct setDialogOffAct setVarAct setVarAct incVarAct incVarAct throwAct throwAct javaAct javaAct andCondition orCondition notCondition basicCondition inStateCond inStateCond hasHistoryCond hasHistoryCond javaCond javaCond varCond varCond oneStart oneEnd startSections endSections varvalue
6. int Variable vergleichen toString gt String berschreibt die Methode der Klasse MarkableTyp Variable als String darstellen D 16 Package score util D 16 1 Klassenhierarchie java lang Object gt java awt Dimension gt score util Dimension gt java awt geom Dimension2D gt score util Dimension Double java util Stack gt score util UndoStack gt javax swing JButton gt score util Animatedlmage gt score util FlatButton gt javax swing JLabel gt score util BlackLabel gt javax swing JPanel gt score util NumField gt javax swing JRadioButton gt score util FlatRadioButton gt javax swing JTextField gt score util TextEditField gt score util Compare gt score util EasyFile Writer gt score util EasyString Writer gt score util Intersect gt score util LaTeXString gt score util Observable gt score util Pair 295 Package score util Kapitel D Programmdokumentation 296 gt score util Scale gt score util StringCheck gt score util Triplet gt score util VecArithmetik gt score util ZoomGraphics gt score util MetaPostGraphics D 16 2 Interface ErrorPrinter Dies ist ein Interface um Fehlermeldungen auszugeben printError String gt void Gibt die Fehlermeldung aus D 16 3 Interface Observer Dieses Interface entspricht dem Java Interface Observer Es bezieht sich allerdings auf eine andere Observable Klasse n mlich score util Observable Zudem h
7. 37 vgl Hor99a S 106 f Verbindungen 49 Verbindungen Kapitel 2 Varianten von Statecharts in der Literatur 50 F lle der Begriff der strukturellen Priorit t structural priority eingef hrt Diese be rechnet sich aus der Lage der Verbindungen innerhalb des Statecharts das hei t aus der Tiefe der Start und Zielzust nde in der Hierarchie Harel und Namaad beschrei ben zwei Wege zur Berechnung dieser Priorit t da sich verschiedene Versionen von Statemate in diesem Punkt unterscheiden In der Fassung der ersten Versionen wurde der bez glich der Hierarchie un terste Zustand betrachtet der s mtliche Start und Zielzust nde enthielt Harel und Namaad nennen diesen Zustand scope f r neuere Versionen werden haupts chlich die Startzust nde dazu verwendet Die Formel die in HN96 in diesem Zusammen hang beschrieben wird l sst sich wie folgt zusammenfassen Hat ein bergang nur einen Startzustand so wird dessen Hierarchietiefe als strukturelle Priorit t verwendet ansonsten die des h chsten AND Zustands der durch den bergang verlassen wird Die Unterschiede dieser beiden Berechnungsarten zeigen sich etwa in folgendem Beispiel das aus HN96 entnommen wurde siehe Abbildung 2 11 In der ersten Form erhalten die berg nge t und 13 dieselbe Priorit t eine gr ere als die von t2 da beide in nur in Zustand A ganz enthalten sind Ist also Zustand C und damit auch Zu stand B aktiv und die berg nge t
8. Symbolische Konstante f r das Werkzeug TOOL_CONNECTOR int CONST Symbolische Konstante f r das Werkzeug TOOL_HIST_CONNECTOR int CONST Symbolische Konstante f r das Werkzeug TOOL_HISTDEEP_CONNECTOR int CONST Symbolische Konstante f r das Werkzeug TOOL_TEXT int CONST Symbolische Konstante f r das Werkzeug TOOL_COPY int CONST Symbolische Konstante f r das Werkzeug selectedTool int zeigt an welches Werkzeug ausgew hlt wurde toolListener ChangeListener ChangeListener der f r alle Werkzeugbuttons eingetragen wird Konstruktoren SCEditor GrafModellSicht int MainWindow Konstruktor update ToolState gt void Beim Betreten eines neuen Editorfensters wird mit dieser Funktion das Buttonfeld aktiviert setToolState gt void Wenn sich der Status der Werkzeugleiste ndert wird hiermit die interne Variable selectedTool aktualisiert getTool int R ckgabewert Nummer des aktivierten Werkzeugs Liefert die Nummer des aktivierten Werkzeugs deactivate Toolbar void Deaktiviert die Toolbar und setzt auf Werkzeug O Pfeil activateToolbar void 281 Package score SCEditor Kapitel D Programmdokumentation 282 Aktiviert die Toolbar setZoomLabelSilent int void Setzt den ZoomLabel ohne einen refresh auszul sen Parameter v Neuer Zoomwert setZoomLabel int void Setzt den ZoomLabel und l st einen refresh auf Parameter v Neuer Zoomwert to
9. getincoming Vector Gibt die eingehenden Verbindungen dieses logischen Punktes in einem Vektor zur ck Gibt es keine wird zur ckgegeben getOutgoing Vector Gibt die ausgehenden Verbindungen dieses logischen Punktes in einem Vektor zur ck Gibt es keine wird ein leerer Vector zur ckgegeben setSuper LogPunkt gt boolean Setzt den bergeordneten Zustand dieses logischen Punktes Ist der angegebene logische Punkt kein zusammengesetzter Zustand oder wird false zur ckgegeben aber der Wert dennoch ge setzt getSuper LogPunkt Gibt den als bergeordneten Zustand angegebenen logischen Punkt zur ck Es wird nicht garan tiert dass dieser Wert nicht ist isConnector boolean Gibt true zuriick wenn es sich um einen Konnektor handelt Hier wird nicht zwischen Universal Konnektor und History Konnektor unterschieden isUniversal gt boolean Gibt true zuriick wenn es sich um einen Universalkonnektor handelt isHistory gt boolean Gibt true zur ck wenn es sich um einen Histroykonnektor handelt isFlatHistory gt boolean Gibt true zur ck wenn es sich um einen flachen Historykonnektor handelt isDeepHistory gt boolean Gibt true zur ck wenn es sich um einen Deep History Konnektor handelt isDefEntry gt boolean Gibt true zur ck wenn es sich um einen Default Entry Konnektor handelt isState gt boolean Gibt true zur ck wenn es sich um einen Zustand handelt Hier wir
10. void Erzeugt einen neuen Parser execute String boolean F hrt einen String aus d h parsed und interpretiert ihn addLine String gt void Logger 207 Package score control Kapitel D Programmdokumentation 208 D 5 7 Klasse CommandWindow extends score control CommandPort implements java awt event ActionListener Stellt ein Fenster zur direkten Eingabe von Kommandos dar Konstruktoren CommandWindow File Commander Konstruktor Methoden init O void berschreibt die Methode der Klasse CommandPort Buttons und Textfelder initialisieren dispose void Den frame l schen execute String boolean berschreibt die Methode der Klasse CommandPort Den String s parsen und interpretieren addLine String gt void berschreibt die Methode der Klasse CommandPort Logger Eine Zeile ins Log actionPerformed ActionEvent void Auf die Buttons reagieren D 5 8 Klasse Inspector extends score control PropertyView Stellt den eigentlichen Inspektor dar Konstruktoren Inspector Konstruktor Inspector JFrame Konstruktor Methoden redraw void berschreibt die Methode der Klasse PropertyView Alles neuzeichnen dispose boolean void berschreibt die Methode der Klasse PropertyView Fenster l schen D 5 9 Klasse Interpreter abstrakte Klasse extends java lang Object implements score control Logger Die abstrakte Oberklasse d
11. void Zeichnet die GrafTexte dieses GrafTyps in den bergebenen Painter D 9 16 Klasse GrafZustand extends score GrafSCM GrafPunkt Diese Klasse stellt das grafische quivalent eines logischen atomaren Zustands dar Attribute subPoints Vector H lt die Unterzust nde dieses Zustands Konstruktoren GrafZustand Dimension Double Erschafft einen grafischen Zustand der die angegebene Gr e hat Er besitzt noch keine Unter zust nde GrafZustand Dimension Double ZustandAtom Erschafft einen neuen grafischen Zustand und initialisiert ihn mit dem bergebenen logischen atomaren Zustand replaceBy Observable gt void berschreibt die Methode der Klasse Observable Erg nzt die Methode replaceBy des Observables durch den entsprechenden Aufruf der Unter punkte Ein eventuell vorhandener View erh lt ebenfalls einen Aufruf getView int gt GrafModellSicht Gibt die Sicht dieses Zustands zuriick Ist noch keine vorhanden so wird sie jetzt erschaffen mit diesem Zustand initialisiert und dann zuriickgegeben Parameter int die Tiefe die der neue neue View anzeigen soll getView GrafModellSicht Gibt die Sicht dieses Zustands zuriick Ist noch keine vorhanden so wird sie jetzt erschaffen hasView gt boolean Gibt an ob dieser Zustand eine Sicht besitzt setView GrafModellSicht void Setzt die Sicht dieses Zustands Wird Null angegeben hat der Zustand dann keine Sicht
12. Konstruktoren Pair Object Object Erschafft ein geordnetes Paar mit den beiden bergebenen Objekten D 16 20 Klasse Scale extends java lang Object Diese statische Klasse erm glicht das Umrechnen zwischen dargestellten und TapetenKoordinaten Konstruktoren Scale Kapitel D Programmdokumentation Package score util Default Konstruktor Methoden scale double double int Skalieren unscale int double double R ckw rts Skalieren unscale Point double Point2D Double R ckw rts Skalieren scale Point2D Double double Point Skalieren scale Dimension Double double Dimension Skalieren unscale Dimension double gt Dimension Double R ckw rts Skalieren D 16 21 Klasse StringCheck extends java lang Object Diese Klasse stellt Routinen zur Verf gung um zu pr fen ob ein String eine Zahl ist Konstruktoren StringCheck Default Konstruktor Methoden isint String gt boolean Ist der String s eine Integer Zahl isDouble String boolean Ist der String s eine Double Zahl D 16 22 Klasse TextEditField extends javax swing JTextField Diese Klasse erweitert die Java Klasse java swing JTextField derart dass das Textfeld erkennt ob vom Benutzer nderungen vorgenommen wurden Konstruktoren TextEditField Erschafft ein neues Textfeld TextEditField Document String int Erschafft ein neues Textfeld zum bergebenen Document
13. RubberCircle Graphics Point int Color Point Konstruktor Methoden setB Point void berschreibt die Methode der Klasse DrawableRubber Die zweite Koordinate setzen D 13 7 Klasse RubberFilledCircle extends score SCEditor RubberCircle Ein gef llter Kreis Konstruktoren RubberFilledCircle Graphics Point int Color Konstruktor RubberFilledCircle Graphics Point int Color Point Konstruktor Methoden draw void berschreibt die Methode der Klasse RubberOval zeichnen D 13 8 Klasse RubberOval extends score SCEditor RubberRectangle Ein Oval Konstruktoren RubberOval Graphics Point Point Color Konstruktor RubberOval Graphics Point Point Color Point Kapitel D Programmdokumentation Package score SCEditor Konstruktor RubberOval Graphics Point Dimension Color Point Konstruktor RubberOval Graphics Point Dimension Color Konstruktor Methoden draw gt void berschreibt die Methode der Klasse RubberRectangle Zeichnen D 13 9 Klasse RubberRectangle extends score SCEditor DrawableRubber u yas O O gt S O O m Konstruktoren RubberRectangle Graphics Point Point Color Konstruktor RubberRectangle Graphics Point Point Color Point Konstruktor RubberRectangle Graphics Point Dimension Color Point Konstruktor RubberRectangle Graphics Point Dimension Color Konstruktor Methoden
14. e Zustand verlassen Man kann in Bedingungen pr fen ob bestimmte Zust nde e aktiv sind e inaktiv sind Ein Zustand kann weiterhin von folgendem Typ sein e atomar e zusammengesetzt Typ OR e zusammengesetzt Typ AND Diese Unterscheidung entsteht dadurch dass Zust nde in anderen Zust nden also hierarchisch untergeordnet liegen k nnen Atomare Zust nde Atomare Zust nde haben keine inneren Zust nde k nnen jedoch zu einem Oberzu stand geh ren Zusammengesetzte Zust nde Typ OR Dieser Zustand besitzt eine Menge von Unterzust nden Ist der Zustand aktiviert so auch genau ein direkter Unterzustand Wir verwenden f r diesen Zustand wie in der Literatur die Bezeichnung OR obwohl XOR pr ziser w re da nie mehr als ein direkter Unterzustand aktiv sein kann Zusammengesetzte Zust nde Typ AND Dieser Zustand ist wie der Typ OR Zustand aufgebaut besitzt dar berhinaus jedoch noch eine Partitionierung der Unterzust nde Wenn dieser Zustand aktiv ist muss in jeder Partition genau ein Zustand aktiv sein Kapitel 1 Definition von Statecharts Formale Definition 1 1 2 berg nge Transitionen Durch berg nge wird festgelegt welche Zust nde nach dem Eintreten gewisser Be dingungen aktiviert bzw deaktiviert werden berg nge bestehen aus e einer nichtleeren Menge von Quellzust nden e einer nichtleeren Menge von Zielzust nden e einem Ereignis e einer Bedingung e den beim bergang erze
15. gt SuperList Gibt eine SuperList zur ck die alle Start und Endzust nde dieses Pfeils schon beachtet getHookedSuperList gt SuperList Gibt eine SuperList fiir diesen Pfeil zuriick die auch die Lage s mtlicher Hooks beachtet eraseSuperList gt void L scht die SuperList dieses Pfeils relocalize gt void 233 Package score GrafSCM Kapitel D Programmdokumentation 234 Stellt sicher dass sich alle Hooks dieses Pfeils in den richtigen Oberzust nden befinden redirect GrafPunkt GrafPunkt gt void Lenkt diesen Pfeil von einem Punkt auf einen anderen um Es wird davon ausgegangen dass sich die beiden Punkte in ihrer Lage entsprechen Dabei werden die Hooks und die Logik mitgef hrt Es wird jedoch nur eine Section beachtet delete void berschreibt die Methode der Klasse GrafTyp L scht diesen Pfeil Er wird auch aus allen grafischen Start und Endzust nden entfernt removeSect GPAbschnitt void Entfernt den bergebenen Abschnitt Wenn es sich um einen 1 1 Pfeil den Startabschnitt eines 1 N Pfeils oder den Endabschnitt eines N 1 Pfeils handelt wird dabei der gesamte Pfeil gel scht Ansonsten wird ggf das logische Gegenst ck auch auf einen 1 1 Pfeil zur ckgesetzt revertlo11 gt void Reduziert das logische Gegenst ck auf einen 1 1 Pfeil wenn dies erlaubt ist save EasyFileWriter void Speichert diesen Pfeil im EasyFileWriter D 9 11 Klasse Graf
16. gt score SCEditor RubberFilledCircle gt lt score SCEditor RubberRoundRect gt score SCEditor RubberSet gt score SCEditor RubberText gt score SCEditor Painter gt score util Observable score SCEditor TranslationWindow D 13 2 Klasse BufferedCanvas extends java awt Canvas Erweitert das Canvas um DoubleBuffering Konstruktoren BufferedCanvas int int ScrollPane Konstruktor BufferedCanvas int int Konstruktor setSize Dimension void berschreibt die Methode der Klasse Component Setzt die Gr e neu setSize int int gt void berschreibt die Methode der Klasse Component Setzt die Gr e neu getGraphics Graphics berschreibt die Methode der Klasse Component Liefert Graphics des Buffers getUnbufferedGraphics gt Graphics Liefert Graphics der Zeichenfl che direkt paint Graphics void berschreibt die Methode der Klasse Canvas Zeichnen des Buffers in die Zeichenfl che paint Point Dimension void Zeichnen von Position p in Gr e d 273 Package score SCEditor Kapitel D Programmdokumentation D 13 3 Klasse DrawableRubber abstrakte Klasse extends java lang Object Abstrakte Oberklasse f r Feedback Objekte RubberBand etc f r Mauseingaben Attribute g Graphics Referenz auf das zu zeichnende Graphics a Point Obere linke untere Rechte Ecke und ein Offset b Point Obere linke untere Rechte Ecke und ein Offset offset
17. onlySection section connectorHook target targetState targetArrow targetDialog hook Kapitel C Grammatik des Datenformats basicCondition andCondition orCondition notCondition CLEARHIST stateld clearHist stateld DEEPCLEAP stateld clearDeep stateld VISIBLE dlgCompld visible visible dlgCompld visible DLGON dlgCompld on dlgCompld DLGOFF dlgCompld off dlgCompld SETVAR varname varvalue set varname varvalue INCVAR varname varvalue inc varname varvalue THROW eventld throw eventld JAVA popupld filename java popupld filename condition AND condition condition OR condition NOT condition p inStateCond hasHistoryCond javaCond varCond IN STATE stateld in stateld HAS HISTORY stateld hasHist stateld JAVA javaCommand java javaCommand VARIABLE varname operator varvalue var varname operator varvalue section section section section section section P double integer string varname hook hook h
18. und tz m glich so ist das Verhalten des Statecharts nicht deterministisch solange keine weiteren expliziten Priorit ten angegeben werden Die zweite Fassung gibt t und dieselbe Priorit t eine kleinere als die von 3 da sie beide bei C beginnen In diesem Fall ist das System auch dann noch deterministisch wenn Zustand C aktiv ist und alle drei berg nge m glich sind N A Abbildung 2 11 Strukturelle Priorit t 2 4 3 Denkbare Erweiterungen des bergangsbegriffs Besondere Erw hnung soll hier eine Konstruktion der UML finden die ausl serfrei er bergang triggerless transition genannt wird Obwohl eine solche Verbindung wenn sie von einem atomaren Zustand oder einem Konnektor ausgeht zu jedem Zeit 38 9 HN96 S 328 ff Kapitel 2 Varianten von Statecharts in der Literatur punkt ausgef hrt werden kann besitzt sie im Fall von komplexen Zust nden eine ande re Bedeutung Hierbei wird sie durch die Tatsache ausgel st dass bei AND Zust nden in allen Partitionen ein Endzustand erreicht wurde Das ausl sende Moment wird hierbei nicht als Ereignis angesehen da es nur f r einen derartigen bergang sichtbar ist Ebenso wie f r den Zustandsbegriff gibt Harel in Har88 Varianten der Ver bindungen an Anstelle den grafischen Verbindungen lediglich zuzugestehen dass sie Anfangs und Endzustand miteinander verbinden k nnte man auch den Weg betrach ten den sie dabei zur cklegen In
19. 3 3 Einf gen emes 2 1 Plelles o ee ecaa ese ua a i aa 62 3 4 Radiobuttons im Statechart o 67 3 5 Ein zun chst ung ltiger Pfeil wird korrigiert 71 3 6 Konflikte bei identischen Ereignissen 2 2 20 73 3 7 alle Zust nde k nnen verlassen werden 2 2 2222 20 74 3 8 Notwendigkeit eines Defaulteinstiegs 15 3 9 ein Schreiben Schreiben Race 2 2 un onen 76 3 10 Optimierung des grafischen Layouts 2 2 2 22 none 84 3 11 Optimierung nach Anzahl der Zust nde 84 3 12 Optimierung durch Parallelisierung 86 315 Abbildungsverzeichnis 3 13 Optimierung nach Anzahl der Variablen 87 4 1 Konstruktion mit Bedingungen am Defaulteinstieg 94 4 2 Probleme bei lokalem Namensraum f r Zust nde 95 4 3 Inkonsistenz bei lokalem Namensraum f r Variablen 96 4 4 Beispiel zu Aktionen und Ereignissen 98 4 5 Transition mit mehreren Ereignissen 99 4 6 Analoge Transition mit nur einem Ereignis 99 4 7 Analoge Transition mit Konnektor o o 99 5 1 Inspektor bei Start des Programms o o 106 3 2 Grafische Ansicht s o oio ocs cara a aa ER 107 5 3 Inspektor mit markiertem AND Zustand 22 22 2222 108 5 4 Inspektor mit markiertem Pfeil o ses sos wos En o 108 5 3 Inspektor mit markiertem Textlabel
20. Das logische Dialogmodell Attribute komp Vector Vector in dem alle Komponenten gehalten werden Konstruktoren LogDModell Konstruktor Erzeugt einen neuen Komponentenvektor und setzt die DIgKomponenten ID auf 0 add DigKomponente void Eine neue Dialogkomponente hinzuf gen Parameter k Die Komponenten die hinzugef gt werden soll delete DigKomponente void 257 Package score LogSCM Kapitel D Programmdokumentation L scht eine Komponente aus dem Modell replaceObservable Observable Observable boolean Dummy replaceBy Observable gt void berschreibt die Methode der Klasse Observable Das Modell wird ersetzt getEnumeration Enumeration R ckgabewert Enumeration der Komponenten Liefert eine Enumeration aller Komponenten getComponentWithld int Object Liefert zu einer ID eine Komponente getMaxID int Liefert die gr te bisher vergeben ID get int DlgKomponente R ckgabewert Dialogkomponente an der i ten Stelle Liefert die Komponente an der i ten Position getAll gt Vector berschreibt die Methode der Klasse AbstractModell Liefert einen Vektor aller Komponenten addButton gt DlgButton F gt einen neuen Button hinzu addTextfield DigText F gt ein neues Textfeld hinzu addRadiobutton gt DigRadiobutton F gt einen neuen Radiobutton hinzu createCheckboxes int Vector Erzeugt n Checkboxes createRadiobut
21. Der Simulationsdialog des Anrufbeantworters 165 Ein einfacher Anrufbeantworter Kapitel A Beispiele 166 A 2 3 Umsetzung in ein Statechart Die globale Struktur Der Anrufbeantworter arbeitet einen Vorgang nach dem anderen ab es ist deshalb na heliegend ihn als OR Zustand zu modellieren Ist die Maschine ausgeschaltet so rea giert sie auf keine Eingaben hier bietet es sich an einen eigenen Zustand einzuf hren der alternativ zum eingeschalteten Zustand liegt Die gesamte Struktur eines solchen Statecharts ist in Abbildung A 11 dargestellt Die Beschriftungen der Pfeile sollen hier nur den berblick vereinfachen es sind keine eventuell vorhandenen Bedingungen oder Aktionen an ihnen angegeben on EA EA incomingall plg only CALL DELETE waiting plg mesg PLAY plz calls N plz one IS az Abbildung A 11 Die Gesamtansicht des Anrufbeantworters Liste der Variablen und Ereignisse In diesem Statechart werden die folgenden Variablen benutzt MaxAnz Gibt an wie viele Anrufe der Anrufbeantworter aufzeichnen kann Prinzipi ell besitzt diese Variable die Funktion einer Konstanten da sie aber an mehreren Stellen im Statechart benutzt wird verwenden wir eine Variable um den Spei cherplatz des Anrufbeantworters leichter modifizieren zu k nnen Sie wird le diglich im Zustand init gesetzt Anrufe In dieser Variablen wird gespeichert
22. EasyFileWriter void Exportiert alle komplexen Aktionen in den EasyFileWriter Daf r wird die Methode executeCom pAction String in das File geschrieben exportQT EasyFileWriter void Exportiert eine komplexe Aktion in Form einer case Anweisung D 3 12 Klasse CalledAction extends java lang Object Diese Klasse stellt eine aufgerufene Aktion dar Sie enth lt neben der eigentlichen Aktion auch den aufrufenden Actor Konstruktoren CalledAction AktKomplex Actor Erzeugt eine neue CalledAction aus der bergebenen Aktion mit dem entsprechenden Actor Methoden execute void Fiihrt die Aktion aus getActions gt AktKomplex Gibt die komplexe Aktion dieser CalledAction zur ck isEmpty O gt boolean Gibt an ob diese CalledAction leer ist D 3 13 Klasse ClearHistoryAktion extends score Aktionen Aktion implements score Aktionen HistoryAktion Diese Klasse spezialisiert die abstrakte Klasse Aktion als ClearHistory Aktion Konstruktoren ClearHistoryAktion ZustOR Erschafft eine neue Aktion die die History des bergebenen Zustands l scht Methoden getState ZustOR Gibt den OR Zustand zur ck der zu dieser Aktion geh rt setState ZustOR void 189 Package score Aktionen Kapitel D Programmdokumentation Setzt den OR Zustand f r diese Aktion execute boolean berschreibt die Methode der Klasse Aktion L scht die History des beim Erschaffen
23. Painter GrafModellSicht GrafPunkt void berschreibt die Methode der Klasse GrafPunkt Zeichnet die Pfeile die den bergebenen Zustand verlassen oder betreten getArrowsCrossing GrafPunkt gt Vector berschreibt die Methode der Klasse GrafPunkt Gibt einen Vector aller Pfeile zur ck die den bergebenen Zustand verlassen oder betreten drawContents int Painter Point2D Double GrafModellSicht void Zeichnet Unterzust nde und enthaltene Pfeile hasSubPoints boolean berschreibt die Methode der Klasse GrafPunkt Gibt an ob dieser Zustand Unterpunkte besitzt hasSubStates boolean Gibt an ob dieser Zustand Unterzust nde besitzt getSuperOf double double double double gt GrafPunkt berschreibt die Methode der Klasse GrafPunkt Gibt den direkten Oberzustand zur ck zu dem dieses Rechteck geh ren w rde der aber gleich zeitig Unterzustand dieses Zustandes oder dieser Zustand selbst ist Wenn es keinen solchen eindeutigen Zustand gibt wird Null zur ckgegeben Schneidet das Rechteck vorhandene Unter zust nde wird ein InvalidConstructionError geworfen Diese Methode geht davon aus dass dass der erste Punkt die linke obere Ecke und der zweite die rechte untere Ecke des Rechtecks angibt in Koordinaten dieses Zustands Es wird garantiert dass ein Zustand oder Null zur ckgegeben wird insertNewState double double double double GrafZustand berschreibt die Methode d
24. Systems m ssen diese Bedingungen jedoch gesondert betrachtet werden Meist wird vorausgesetzt dass die Bedingungen die den Austritt aus einem Zu stand regeln in Kombination mit dem ausl senden Ereignis daf r sorgen dass nur jeweils ein bergang m glich ist und dadurch das System deterministisch machen Dies ist insbesondere bei transienten Zust nden oder den Ereignisknoten in UML der Fall Dabei ist meist die spezielle Bedingung else erlaubt die nur dann wahr ist wenn alle anderen Bedingungen nicht erf llt sind Nichtdeterminismus kann dar ber hin aus durch Priorit ten an den berg ngen ausgeschlossen werden dies wurde bereits in Abschnitt 2 4 besprochen In einer der ersten Schriften ber Statecharts schl gt Harel die M glichkeit von berg ngen vor die einer mehrwertigen Logik entsprechen Pr ziser w re es dies in die Sprache der Bedingungen einzubauen da diese die berg nge kontrollieren Eine weitere naheliegende Verallgemeinerung der Bedingungen w re die Verbindung mit temporaler Logik Doch da in der Literatur einheitlich klassische Logik Verwendung findet wird darauf nicht weiter eingegangen 4vgl beispielsweise Hor99a S 46 ygl z B HN96 S 297 46 9 Abschnitt 94 47 gl HK99a S 156 48 gl Har88 S 526 f 53 Aktionen 54 Kapitel 2 Varianten von Statecharts in der Literatur 2 7 Aktionen Aktionen werden im Statechart dadurch ausgel st dass ein bergang stattgefunde
25. Wahrheitswert zur ckliefern Dieser kann dann direkt weiterverwendet werden um berg nge zu erm glichen oder zu verhindern Problematisch ist hierbei die Anga be welche Objekte dieser Funktion bergeben werden sollen Einfacher zu verwal ten w ren global gehaltene Objekte die selbstverst ndlich nicht bergeben zu werden brauchen da jede Funktion direkt darauf zugreifen kann Dies f hrt jedoch sehr schnell zu einer monolithischen Programmstruktur die m glicht vermieden werden sollte Sehr wichtig ist es jedoch darauf zu achten dass die Auswertung einer Bedin gung nicht zu Seiteneffekten f hrt Dies wird bereits in anderen Arbeiten mehrfach erw hnt gt Ereigniss Konzepte Am kompliziertesten d rfte es sein Ereignisse frei zu program mieren Daf r muss nicht nur festgelegt werden in welcher Weise diese zu formulieren sind sondern auch wie sie in den erzeugten Quelltext des Systems eingebunden wer den k nnen vgl beispielsweise Rum99 S 291 oder Schu99 S 184 87 Automatismen Kapitel 3 Werkzeuge f r Statecharts 88 Eine denkbare Variante ist es Ereignisse wie Interrupts oder in Java Excep tions zu programmieren die bei Eintreten an das Statechart weitergegeben und von diesem abgearbeitet werden In diesem Fall muss das komplette Programm als Teil des Statecharts programmiert werden Es w re m glich einige gr ere Funktionen separat zu halten und mittels externer Aktionen aufzurufen hierf
26. ck setToVisible boolean void Setzt die Angabe ob diese Aktion die Dialogkomponente sichtbar oder unsichtbar macht getToVisible boolean Gibt an ob diese Aktion die Dialogkomponente sichtbar oder unsichtbar macht save EasyFile Writer void berschreibt die Methode der Klasse Aktion Speichert die Aktion im EasyFileWriter exportQT EasyFileWriter gt void berschreibt die Methode der Klasse Aktion Exportiert den Quelltext f r diese Aktion in den EasyFileWriter Package score Aktionen 193 Package score Aktionen Kapitel D Programmdokumentation 194 D 3 20 Klasse SetVarAktion extends score Aktionen Aktion Diese Klasse spezialisiert die abstrakte Klasse Aktion als SetVarAktion Attribute HE HE FR o SAVE_KEY String der String der beim Speichern als Key f r diese Aktion benutzt wird PRINT_KEY String der String der beim Anzeigen als Key f r diese Aktion benutzt wird name String der Name der Variable die zu dieser Aktion geh rt sValue String der String Wert f r die Variable in dieser Aktion dValue double der Double Wert f r die Variable in dieser Aktion Value int der Integer Wert f r die Variable in dieser Aktion mode int Der Modus gibt an ob diese Aktion eine String Double oder Integer Aktion ist Die entsprechende Konstante wird aus der Klasse Variable bernommen setToVar boolean Gibt an ob der String Wert dieser Aktion als Variablenn
27. hei t jedoch nicht automatisch dass sich das System beim Betreten eines solchen Zu stands beendet zun chst reagiert es lediglich nicht mehr auf weitere Eingaben und scheint daher stehen zu bleiben Es ist jedoch naheliegend eben dieses Beenden f r einen oder mehrere Zust nde zu spezifizieren Diese Zust nde werden dadurch zu ter minalen Zust nden Bemerkenswerterweise treten diese Zust nde in Harels urspr ng licher Beschreibung Har87b nicht auf sie werden jedoch in den meisten weiteren Schriften zus tzlich definiert bei Harel selbst in Form der Terminal Konnektoren bei Horrocks und in UML als Endzust nde Insbesondere das aktive Beenden des Sy stems ist ein Argument daf r diese Elemente tats chlich zu den Zust nden und nicht etwa den Konnektoren die in Abschnitt 2 3 eingef hrt werden zu z hlen Nicht alle Verbindungen brauchen vollst ndige Ereignis Bedingung Aktion Gruppen zu besitzen Ist bei einer ausgehenden Verbindung eines Zustands kein Er eignis und eventuell auch keine Bedingung angegeben so wird dieser bergang im n chsten Zeitschritt auf jeden Fall ausgef hrt Ein solcher Zustand wird dann als tran sienter Zustand bezeichnet Er ist den unten beschriebenen Konnektoren sehr hnlich 6Diese Auflistung wird von Harel und Namaad in HN96 um das von ihnen verwendete Modell erg nzt 7vgl HN96 S 316 Sygl Hor99a S 64 f oder HK99a S 133 f beziehungsweise Rum99 S 76 9 vgl j
28. hnten Arten einbinden 3691 die Beschreibung der Zeit in der Simulation auf Seite 79 89 Automatismen Kapitel 3 Werkzeuge f r Statecharts 90 Teil Il Grundlagen von SCed H chste Vollendung scheint unvollkommen zu sein doch ihre Anwendung ist unersch pflich Lao Tse Tao Te Ting Kapitel 45 Kapitel 4 Die implementierte Fassung 4 1 Einleitung Die Form in der Statecharts im vorliegenden Programmpaket implementiert sind un terscheidet sich etwas von den in Kapitel 2 beschriebenden Fassungen In diesem Ka pitel soll daher unser Ansatz vorgestellt und die Gr nde f r unsere Entscheidungen dargelegt werden In vielen Punkten haben wir den in der Praxis bew hrten Ansatz des Programms Statemate bernommen Insbesondere benutzen auch wir eine diskrete Zeitskala und Ereignisse werden erst im n chsten Zeitschritt f r das System sichtbar Diese Vari ante hat unter anderem den deutlichen Vorteil dass es nicht auf die Reihenfolge der Abarbeitung von berg ngen oder Aktionen ankommt da sie sich innerhalb eines Zeitschrittes nicht gegenseitig beeinflussen Dieses Kapitel beschreibt nicht welche der in Kapitel 3 beschriebenen Werk zeuge implementiert und auf welche Weise diese umgesetzt wurden F r eine solche Darstellung sei auf das Benutzerhandbuch in Kapitel 5 beziehungsweise die Beschrei bung der Funktionsweise in Kapitel 6 verwiesen 4 2 Die Grundelemente 4 2 1 Zust nde Die Eigenschaften unserer Zust n
29. nnen nicht direkt er zeugt werden es k nnen stattdessen Aktionen ausgef hrt werden welche ein Ereignis generieren wir bezeichnen derartige Aktionen als Throw Aktionen Insofern besitzen alle Objekte welche in Harels Statechart Semantik Ereignisse generieren k nnen die M glichkeit Aktionen zu erzeugen Beispiel E T Abbildung 4 4 Beispiel zu Aktionen und Ereignissen Betrachten wir das Beispiel in Abbildung 4 4 Zustand A sei aktiv und im vorhe rigen Schritt wurde das Ereignis E generiert Die Transition wird nun also ausgef hrt Zustand A und Zustand B generieren Aktionen Voreingestellt generiert Zustand A die Aktion throw exit A Zustand B die Aktion throw enter B und der bergang generiert die Aktion T Weiterhin ist zu beachten dass wir uns auf genau ein Ereignis je Transition be schr nken da es die besondere Stellung des Ereignisses als ausl sendes Moment Trig ger einer Transition hervorhebt Warum nur ein Ereignis Wollte man mehr als ein Ereignis als Ausl ser f r eine Transition definieren muss man sich zuerst berlegen ob die Transition bei gleich zeitigem Eintreten durchgef hrt werden soll oder sobald eines eintritt Die M glich keit der Und Verkn pfung wollen wir ausschlie en Dies muss in einem Statechart im allgemeinen anders modelliert werden berg nge sollen durch ein Ereignis ausgl st werden und nicht durch die Kombination mehrerer Denkbar sind hier Abfragen von Zust nde
30. r den bergang von A auf B ist jedoch der Defaulteinstieg in Partition P2 notwendig S Abbildung 3 8 Notwendigkeit eines Defaulteinstiegs Der Verifikator sollte also sicherstellen dass in jedem Zustand und jeder Partiti on bei der ein Defaulteinstieg ben tigt wird ein solcher auch vorhanden ist Dies ist insbesondere beim globalen Wurzelzustand der Fall weil dadurch der Startzustand des Systems bestimmt wird Vollst ndigkeit l sst sich auch im Zusammenhang mit Ereignissen pr fen Da er zeugte Ereignisse nicht au erhalb des Statecharts sichtbar sind kann davon ausgegan gen werden dass sie innerhalb des Statecharts wirken sollen Wird aber ein Ereignis erzeugt das an keiner Verbindung verwendet wird so liegt vermutlich ein Fehler vor eventuell wurde lediglich vergessen den bergang vollst ndig zu spezifizieren Um gekehrt kann getestet werden ob alle Ereignisse die an mindestens einer Verbindung als Ausl ser notiert sind auch irgendwo erzeugt werden Hier kann die Antwort al lerdings nur dann zuverl ssig gegeben werden wenn die Ereignisse von Elementen des Statecharts erzeugt werden sollen Ereignisse die von anderen Programmteilen hereingereicht werden wie etwa Ereignisse die als Quelltext eingegeben wurden 2 lassen sich hierdurch allerdings nicht erfassen Eine Variante dieser Fragestellung ist die berpr fung ob alle Variablen die durch eine Aktion gesetzt werden auch irgendwann abgefragt werd
31. r den angegebenen Zustand g ltig ist isValidMove GrafTyp Point boolean Gibt zur ck ob die angegebene Bewegung f r das bergebene Objekt g ltig ist moveTo GrafPunkt Point2D Double int Bewegt den angegebenen Zustand an die in Zeichenkoordinaten angegebene Stelle Es wird davon ausgegangen dass diese Bewegung g ltig ist Die neue Tiefe des Zustandes wird zur ckgegeben moveTo GrafHook Point2D Double int Bewegt den Hook an die bergebene Position moveTo Partitioner Point2D Double int Bewegt den Partitioner an die bergebene Position moveTo GrafText Point2D Double int Bewegt den Text an die bergebene Position moveTo GrafTyp Point int Bewegt das bergebene Objekt an die angegebene Position Es wird davon ausgegangen dass diese Bewegung g ltig ist isValidCopy GrafZustand Point gt boolean Gibt an ob die bergebene Position f r eine Kopie g ltig ist copyStateTo GrafZustand Point TranslationWindow gt void Kopiert den angegebenen Zustand an die bergebene Stelle Der Benutzer wird mit dem berge benen TranslationWindow gebeten Ereignisse und Variablen umzubenennen Die Kontrolle geht dann an dieses Fenster das die Methode update entsprechend aufruft wenn es beendet wird delete GrafTyp gt void L scht den bergebenen Graf Typ deleteArrowOfHook GrafHook void Kapitel D Programmdokumentation Package score GrafSCM L scht den Pfeil der zum berg
32. r die einzelnen Elemente werden in Abschnitt 5 4 1 beschrieben Die Men zeile des Hauptfensters besteht aus den folgenden Men s File f r das Laden und Speichern des Statecharts au erdem k nnen aus diesem Men Ansichten gedruckt und das Programm verlassen werden Edit f r Undo Redo und Makros View zur Verwaltung der einzelnen Ansichten der Ereignis und Aktions Listen und des Dialog Editors Tools mit den Werkzeugen Verifikator Simulator und Quelltextexport Einige der Funktionen aus diesen Men s sind auch ber spezielle Tastenkombi nationen zu erreichen Diese sind hinter den Men eintr gen angegeben Das File Men Das File Men besteht aus den folgenden Funktionen New Alt N beginnt ein neues Statechart Das bisherige Statechart und die erzeugten Dialogkomponenten werden gel scht Open Alt O L dt ein neues Statechart ber ein Auswahlfenster Das bisherige Statechart und die erzeugten Dialogkomponenten werden gel scht Save Alt S Speichert das Statechart und den Dialog Wenn das Projekt bereits einen Namen besitzt wird dieser benutzt ansonsten wird der Benutzer um eine ent sprechende Eingabe gebeten Save As Alt Shift S Speichert das Statechart und den Dialog der Benutzer wird hierbei zun chst nach einem Namen f r das Projekt gefragt Print Bietet ein Untermen in dem alle momentan offenen Sichten aufgef hrt sind Wird eine dieser Sichten ausgew hlt so wird der darin angezeigte Zustand in das
33. rigen Pfeil bezieht Die Position dieses Textes bezieht sich immer auf den Hook zu dem er erzeugt wurde Double Hook Mit dieser Funktion werden zu einem Pfeil neue Hooks hinzugef gt Dies ist nicht bei Hooks m glich bei denen mehrere Abschnitte beginnen oder enden in diesem Fall ist der Men eintrag deaktiviert Arrow Actions Bietet die M glichkeit die Aktionen des bergangs zu modifizieren Trigger Event Hier ber kann das Ereignis ausgew hlt werden das den bergang ausl sen soll Delete Hook Diese Funktion l scht einen einzelnen Hook Das ist nicht m glich wenn es sich um einen Hook handelt der am Anfang oder Ende eines Pfeils liegt oder wenn mehrere Abschnitte bei ihm beginnen oder enden in diesen F llen ist dieser Men eintrag deaktiviert Delete Section Hier ber kann ein Abschnitt eines Pfeils entfernt werden Dies ist nicht m glich wenn mehrere Abschnitte bei dem ausgew hlten Hook beginnen oder enden in diesem Fall ist dieser Men eintrag deaktiviert Delete Arrow Mit diesem Men eintrag kann ein Pfeil komplett gel scht werden ygl Abschnitt 5 3 3 Kapitel 5 Benutzerhandbuch Der grafische Editor Konnektoren 00060 Abbildung 5 9 Defaulteinstieg Konnektor Historyeinstieg und tiefer Historyeinstieg in der Ansicht Unter dem Begriff Konnektoren fassen wir hier die Standard Konnektoren De faulteinstiege History und tiefe Historyeinstiege zusammen Sie alle werden durch einen Kreis dargeste
34. sentieren Der Verifikator kann pr fen ob Variablen getestet werden ohne dass sie irgendwo gesetzt werden Genauso kann er pr fen ob Va riablen gesetzt werden ohne dass sie irgendwo gepr ft werden Dialogvariablen sind von dieser Pr fung ausgeschlossen JAVA Java Bedingungen sind frei definierbare Java Funktionen mit booleschem R ckgabewert in der Form JAVA lt FUNCTION gt oder java lt FUNCTION gt Die se werden in der Simulation nicht getestet deshalb wird f r jede Java Bedingung automatisch eine Systemdialogkomponente vom Typ Checkbox erzeugt mit welcher der Wahrheitswert dieser Funktion eingestellt werden kann Im Quell textexport wird dann die eingetragene Funktion exportiert Der Editor erlaubt jedoch keine Zeilenumbr che so dass die Funktion in einer Zeile formuliert werden muss Es empfiehlt sich hier nur Platzhalterfunktionen einzutragen und die Funktionen sp ter im exportierten Quelltext zu formulieren Beispiel java boolean f1 Hier soll f1 stehen 5 7 Ereignisse Abbildung 5 14 Die Ereignisliste Die Ereignisse k nnen ber die Event Liste Abbildung 5 14 verwaltet werden Ereignisse werden in SCed nur durch ihren Wert in der Zeichenkette unterschieden Sie haben keine weiteren Eigenschaften Es werden f r die meisten Objekte beim Erschaf fen gleich entsprechende Ereignisse mit entsprechenden Namen miterzeugt welche man nat rlich nach Belieben ndern kann Ereignisse dienen einer Tran
35. showlDs gt boolean Gibt an ob Identifier gezeichnet werden showlDs boolean gt boolean Setzt die Angabe ob Identifier gezeichnet werden sollen showGrid boolean boolean Schaltet das Gitter f r diese Sicht ein oder aus showGrid gt boolean Gibt zur ck ob diese Sicht gerade ein Gitter anzeigt showHooks boolean boolean Schaltet die Hooks f r diese Sicht ein oder aus showHooks boolean Gibt zur ck ob diese Sicht gerade Hooks anzeigt getViewDimension gt Dimension Double Gibt die Gr e des Oberzustandes zur ck oder Null wenn diese Sicht sich auf den virtuellen Oberzustand bezieht getBoundingBox Dimension Double Gibt f r den virtuellen Oberzustand die Gr e einer umgebenden Box der Unterzust nde zur ck oder Null wenn es noch keine solchen Zust nde gibt F r andere Sichten wird die Gr e des Oberzustand zur ckgegeben SEOfView Dimension Double Gibt die Zeichenposition der rechten unteren Ecke zur ck insertNewState Point2D Double Point2D Double int Erzeugt einen neuen Zustand der durch die bergebenen Punkte beschrieben wird Diese sind in Zeichenkoordinaten gegeben Wenn diese Punkte keine g ltige Kombination darstellen wird eine negative Zahl zur ckgegeben insertNewConn Point2D Double Point2D Double int int 227 Package score GrafSCM Kapitel D Programmdokumentation 228 F gt einen neuen Konnektor vom bergebenen Typ
36. trachten Hierbei ist e Z die Menge der Zust nde e O die Unterzustandsfunktion e T die Partitionsfunktion e d die Defaulteinstiegsfunktion e H die Menge der Historyeinstiege mit deren Historyfunktionen e K die Menge der Kanten e E die Menge der Ereignisse e A die Menge der Aktionen und e Lpg eine aussagenlogische Sprache zur Beschreibung der Bedingungen Bemerkung Im Gegensatz zu einem endlichen Automaten fehlt hier das Analogon zur Zustands bergangsfunktion Diese ist f r Statecharts nicht einfach festlegbar Sie ist in den Kanten impliziert Wir werden das Verhalten ber der Zeit im Abschnitt 1 4 beschreiben 1 2 2 Die Menge der Zust nde Z Die Menge der Zust nde Z z zn mit nz N ist eine endliche Menge von unterscheidbaren Elementen 1 2 3 Die Unterzustandsfunktion F r jedes z Z ist o z C Z die Menge der direkten Unterzust nde von z Definition Atomare Zust nde 1 1 z ist atomarer Zustand gdw o z 0 Definition Eindeutigkeit des Oberzustands Es mu gelten 1 2 xE0 z gt VWyEZ x 0 y S y 2 Kapitel 1 Definition von Statecharts Formale Definition Lemma Fixpunktfreiheit Die Unterzustandsfunktion ist fixpunktfrei das hei t 1 3 VzeZz z amp olz Beweis siehe 1 9 Definition Transitive H lle der Unterzust nde Wir definieren induktiv die transitive H lle der Unterzustandsfunktion F r z Z ist 1 4 old z 1 5 og U
37. 159 Die Teemaschine Kapitel A Beispiele 160 e Ist der Ziehvorgang abgeschlossen flie t das Wasser in die Teekanne Dem Be nutzer wird mittels eines Popups angezeigt was sich nun in der Kanne befindet Wie in Abschnitt 76 auf Seite 69 beschrieben wird der entsprechende Text ber eine Variable gesetzt Dies geschieht mit den folgenden Aktionen set Tk Tee den Text f r das Fenster der Teekanne auf Die Kanne ist jetzt voll mit frischem Tee setzen set Tk Wasser den Text f r das Fenster der Teekanne auf Die Kanne ist jetzt voll mit hei em Wasser setzen set Tk Br he den Text f r das Fenster der Teekanne auf In der Kanne ist jetzt eine ziemliche Br he setzen set Tk iibergelaufen den Text f r das Fenster der Teekanne auf Die Kan ne ist gerade bergelaufen setzen Partition 1 Strom Strom EA an e y Abbildung A 4 Die Partition fiir den Ein Ausschalter Das Verhalten dieser Partition ist denkbar einfach denn sie modelliert haupts chlich die Checkbox Strom eingeschaltet Beim Start des Systems ist die Teemaschine ausgeschaltet Dies bleibt solange der Fall bis der Ein Ausschalter gedr ckt wird Ereignis EA Das System geht dann in den Zustand an ber Wird der Ein Ausschalter erneut bet tigt ist der Strom wieder ausgeschaltet Partiton 2 Ziehzeittimer Beim Start des Systems wird zun chst das Textfeld das die Zie
38. 9 dargestellt tl el al O t2 e2 a2 t3 C3 t4 C4 Abbildung 2 9 Unterschiede bei Simulation und Quelltext Wenn die Ereignisse e und e2 eingetreten die Bedingungen C3 und C4 aber nicht erf llt sind so ist der bergang von A auf B nicht m glich Der Simulator wird dies erkennen und den bergang nicht ausf hren Zum erzeugten Quelltext schreiben die Autoren 33ygl HK99a S 146 34vgl HN96 S 304 35 vgl HN96 S 303 36481 HN96 S 303 48 Kapitel 2 Varianten von Statecharts in der Literatur Er wird den Anfangsteil des bergangs ausf hren und erst nach Be treten von B feststellen dass keine atomaren Zust nde betreten werden k nnen an dieser Stelle wird er keinen Rollback auf A durchf hren Es ist theoretisch m glich Code zu erzeugen der unter diesen Umst nden den vorherigen Zustand wieder herstellt doch wir konnten keinen effizienten Weg finden dies zu tun Dieser Punkt scheint noch weitere Forschung zu verlangen 2 4 2 Determinismus und Priorit ten Wichtig ist f r jeden Zustand der mehrere ausgehende Verbindungen besitzt dass nur eine davon wirklich als bergang ausgef hrt wird Dies kann entweder dadurch si chergestellt werden dass sie mit unterschiedlichen Ereignissen versehen sind oder dadurch dass die Bedingungen die den Verbindungen zugeordnet sind sich gegen seitig ausschlie en Es kann jedoch Situationen geben in denen dies
39. AktionPropertyChange Reagiert auf die ButtonEvents D 3 10 Klasse AktionPropertyChange extends score util Observable implements java awt event ActionListener score util Observer Erstellt den Aktionseigenschaftsdialog Attribute HE HE Ho ldm LogDModell Referenz auf das logische Dialogmodell frame JFrame Das zugeh rige Frame typeSelect JComboBox Die Aktionstyp Combobox javaEditor JEditorPane Ein Editorfeld f r den Java SourceCode varName JTextField Textfeld f r Variablenname und Variablenwert varValue JTextField Textfeld f r Variablenname und Variablenwert checkbox JCheckBox generische Checkbox historyCon JList Liste aller Zust nde mit Historyeinstiegen Konstruktoren AktionPropertyChange LogDModell Konstruktor der eine neue Aktion behandelt NEW AktionPropertyChange LogDModell Aktion Konstruktor der eine vorhandene Aktion editiert init O void Initialisiert die Klasse update Observable Object gt void Observerfunktion setzt die Aktionen sendAction Aktion void Sendet die generierte Aktion an die Observer initializeComponents int gt void Initialisiert die Componenten f r eine Aktion vom Typ type updateFrame void Zeichnet den Frame neu actionPerformed ActionEvent gt void Wertet ButtonEvents aus 187 Package score Aktionen Kapitel D Programmdokumentation 188 D 3 11 Klasse AktKomplex extends score Lo
40. Anzahl der registierten Observer zur ck deleteObserver Observer void L scht einen Observer aus der Liste der registrierten Observer dieses Observables deleteObservers gt void L scht alle Observer aus diesem Observable notifyObservers void Ruft in allen registrierten Observern die Methode update mit dem Argument Null auf notifyObservers Object gt void Ruft in allen registrierten Observern die Methode update mit dem hier bergebenen Argument auf replaceBy Observable gt void Ersetzt dieses Observable in allen Observern durch das begebene Objekt Wird dieses Obserable selbst bergeben geschieht nichts wird Null bergeben bekommen die Observer den Aufruf dass dieses Observable gel scht wurde delete void Diese Methode teilt den Observern mit dass dieses Objekt nicht l nger existieren wird und daher nicht mehr zu beobachten ist Dies geschieht mittels des Aufrufs replaceObservable this null im Observer Die Observer werden jedoch nicht aus diesem Observable ausgetragen und k nnen daher auch sp ter mit einem notifyObservers aufgerufen werden Es wird hierbei NICHT auf die Methode replaceBy dieses Observables zugegriffen D 16 19 Klasse Pair extends java lang Object Diese Klasse h lt ein geordnetes Paar von Instanzen beliebiger Klassen Zugriffe erfolgen direkt auf die Instanzvariablen Attribute first Object das erste Objekt second Object das zweite Objekt
41. Au erdem wollen wir beschreiben wie Statecharts in der UML Unified Modelling Language dargestellt werden Dabei berufen wir uns auf Rum99 und HK99a Wei tere Erg nzungen schl gt Ian Horrocks in seinem Buch vor dessen Hauptanliegen allerdings nicht die Beschreibung von Statecharts sondern eher eine Anleitung zur Benutzung derselben ist Es ist bereits aus dieser Aufz hlung ersichtlich dass es keine standardisierte Fas sung gibt Vielmehr hat jeder Autor seine eigene Variante die sich von denen der anderen unterscheidet Obwohl diese Unterschiede meist nur in Details liegen kann dadurch gelegentlich unerwartetes Verhalten der Statecharts auftreten wie es Leveson et al in Lev95 beschreiben Die Autoren beziehen sich in diesem Fall auf eine von Pnueli und Shalev beschriebene Semantik Harel betont allerdings in HN96 dass diese Probleme in der von ihm eingef hrten Fassung und der von ihm durchgef hr ten Erweiterungen nicht auftauchen sondern eher eine Schw che dieser speziellen Variante sind In den folgenden Abschnitten werden wir nun einzeln auf die Grundelemente der Statecharts eingehen und deren Varianten vorstellen Es soll hierbei jedoch kein Alles flie t 2 vgl Har87b 3vgl HN96 S 294 vgl Hor99a Svgl Pnu91 37 Zust nde 38 Kapitel 2 Varianten von Statecharts in der Literatur Vergleich vorgenommen werden der feststellt welche Definition die bessere ist F r eine derartige Ge
42. Benutzen eines 1 N bergangs ist von Nichtdeterminismus leichter zu unterscheiden als das bei einer Vielzahl von Verbin dungen der Fall w re Die Notwendigkeit eines N N bergangs ist allerdings nicht gegeben da ein solcher bergang sich mit Hilfe eines Konnektors aus einem N 1 und einem 1 N bergang quivalent konstruieren l sst Es sei in diesem Zusammenhang erw hnt dass wir nur N 1 berg nge zulas sen die von Zust nden ausgehen nicht etwa von Konnektoren Dies ist jedoch keine Einschr nkung der Konstruktionsm glichkeiten Der in der Har87b beschriebene Historyeinstieg wird in Statemate als Konnek tor implementiert dieser Entscheidung haben wir uns angeschlossen da dadurch die M glichkeit entsteht den Historyeinstieg mit ausgehenden Verbindungen zu versehen Da der in Statemate angebotene Diagramm Konnektor keine logisch notwendige Funktion besitzt haben wir diesen Konnektor nicht implementiert 4 2 3 Ereignisse Aktionen und Bedingungen Die Verwendung von Ereignissen und Aktionen ist nicht einheitlich Wir entscheiden uns f r folgende Verwendungsweise 2vgl HP98b S 67 3vgl HP98b S 71 97 98 Die Grundelemente Kapitel 4 Die implementierte Fassung Die Ereignisse Ereignisse haben als einzige Eigenschaft ihre Unterscheidbarkeit Ihre Verwendung liegt allein in der notwendigen Kombination mit einer Transition denn jede Transition muss ein Ereignis als ausl sendes Moment besitzen Ereignisse k
43. CalledAction Gibt Null zur ck da diese Anfrage bei einem Zustand nicht genau genug spezifiziert ist getKompAction int AktKomplex Gibt die komplexe Aktion zur ck isTerminal boolean Gibt an ob der Zustand terminal ist d h ob er ausgehende Verbindungen besitzt Verbindungen die von Oberzust nden ausgehen werden dabei nicht beachtet isEndState boolean Gibt an ob der Zustand als Endzustand markiert ist setEndState boolean void Diese Methode setzt den Wert der angibt ob es sich bei diesem Zustand um einen Endzustand handelt Wird dadurch der Wert ge ndert wird ein Refresh aufgerufen exportQT EasyFileWriter gt void berschreibt die Methode der Klasse LogPunkt Exportiert den Quelltext f r diesen atomaren Zustand in den EasyFileWriter exportAtom EasyFileWriter void Schreibt Identifier Oberzustand und Aktionen dieses Zustands in den EasyFileWriter D 11 15 Klasse ZustKomplex abstrakte Klasse extends score LogSCM ZustandAtom Diese abstrakte Klasse liegt zwischen einem atomaren und den konkreten zusammengesetzten Zust nden Attribute subStates Vector H lt die direkten Unterzust nde dieses Zustands bei AND Zust nden sind dies die Partitionen Konstruktoren ZustKomplex Der Konstruktor erzeugt einen neuen leeren Vektor von Unterzust nden ZustKomplex LogPunkt Erschafft einen neuen ZustKomplex der einen alten logischen Punkt erset
44. Dadurch wird eine neue subsection begon nen Die Reihenfolge der Angaben ist Attribute Konstruktoren Methoden Weitere Informatio nen werden am Anfang ausgegeben Parameter classes der auszugebende Array von ClassDocs e printFields FieldDoc gt void Gibt die Attribute Felder eines Arrays aus Der Abschnitt wird durch fkmhead begonnen und besteht aus einer Itemize Umgebung 215 Package score Ereignisse Kapitel D Programmdokumentation 216 Parameter fields der auszugebende Array von FieldDocs e printConstructors ConstructorDoc boolean void Gibt einen Array von Konstruktordokumentationen aus Der Abschnitt wird durch fkmhead be gonnen und besteht aus einer Itemize Umgebung Parameter constructors der auszugebende Array von ConstructorDocs e printMethods MethodDoc void Gibt einen Array von Methodendokumentationen aus Der Abschnitt wird durch fkmhead begon nen und besteht aus einer Itemize Umgebung Parameter methods der auszugebende Array von MethodDocs e printMember ExecutableMemberDoc void Gibt die Informationen einer Methode oder eines Konstruktors aus Dazu z hlen der Kommen tar die Exceptions die geworfen werden k nnen und die Parameterliste Parameter mem das ExecutableMemberDoc auf das Bezug genommen wird D 8 Package score Ereignisse D 8 1 Klassenhierarchie java lang Object gt score LogSCM Log Component gt score Ereignisse
45. Double gt void Zeichnet ein gef lltes Oval mit der angegebenen Position und Gr e Die Vergr erung wird noch beachtet drawActiveRect Point2D Double Dimension Double void Zeichnet ein als aktiv markiertes abgerundetes Rechteck mit der angegebenen Position und Gr e Die Vergr erung wird noch beachtet fillActiveRect Point2D Double Dimension Double void Zeichnet ein als aktiv markiertes ausgef lltes abgerundetes Rechteck mit der angegebenen Po sition und Gr e Die Vergr erung wird noch beachtet drawMarkedRect Point2D Double Dimension Double gt void Zeichnet ein markiertes abgerundetes Rechteck mit der bergebenen Position und Gr e Die Vergr erung wird noch beachtet drawDottedLine double double double double void Kapitel D Programmdokumentation Package score Verifikator Zeichnet senkrechte oder waagrechte Linien gestrichelt Schr ge Linien werden durchgezogen gezeichnet Die Vergr erung wird noch beachtet drawLine double double double double void Zeichnet eine Linie zwischen den angegebenen Punkten Die Vergr erung wird noch beachtet drawRect double double double double void Zeichnet ein Rechteck mit der angegebenen Position und Gr e Die Vergr erung wird noch beachtet drawRect Point2D Double Dimension Double gt void Zeichnet ein Rechteck mit der angegebenen Position und Gr e Die Vergr erung wird noch beachtet drawHook P
46. E EEEE EH H Attribute delay int Wartezeit um auf Benutzeraktionen zu warten simModell SimSC Modell Referenz auf das Simulationsmodell time int Die Simulationszeit phase int Die Simulationsphase events Vector Die gesammelten Events actions Vector Die gesammelten Aktionen variables Hashtable Die Variablen um als VarServer zu arbeiten thread Thread Der Thread um Nebenl ufig zu laufen phaseFinished boolean Flag ob eine Phase abgeschlossen ist running boolean Flag ob die Simulation gerade l uft logger Logger Eine Referenz auf einen Logger um Meldungen auszugeben Konstruktoren SCRun Konstruktor macht nix Methoden init LogSCModell void Kapitel D Programmdokumentation Package score Simulator Das Simulationsmodell erstellen und die Ressourcen anfordern generateSCModell LogSC Modell SimSCModell Das Simulationsmodell aus einem logischen Modell erzeugen isActive LogPunkt boolean Pr fen ob ein Zustand Ip aktiv ist getSimBasic LogPunkt SimBasic Liefert den SimBasic zu einem logPunkt getSimBasic int SimBasic Implementation des Condition Askable Interfaces setPhase int gt void Die Phase setzen stepPhase gt void Eine Phase weiter setzen start gt void Den Ablauf starten Thread erzeugen stop void Den Ablauf stoppen run void Der Ablauf um nebenl ufigen Thread startSimulation void Die S
47. Komplexe Aktion kennzeichnet COMPLEX ACTION nr Die Methode execute ist entsprechend berladen Attribute ask ConditionAskable die Klasse die Variablen zur ckgibt evHolder EventHolder die Klasse in den aufgetretene Ereignisse eingetragen werden dlgManager DialogCompManager die Klasse die den Zugriff auf Dialogkomponenten verwal tet Konstruktoren ExportAktion String Kapitel D Programmdokumentation Erschafft eine neue ExportAktion mit dem bergebenen Aktions String execute Actor boolean berschreibt die Methode der Klasse AktKomplex F hrt diese Aktion aus Daf r wird die Methode executeCompAction aufgerufen die vom Quell textexport geliefert wird throwEvent Object void L st das bergebene Event aus indem es in den EventHolder eingef gt wird Diese Methode kann bei JAVA Aktionen benutzt werden variable String gt Variable Gibt die Variable mit dem angegebenen Namen zur ck visible int void Macht ein Dialogelement sichtbar invisible int void Macht ein Dialogelement unsichtbar on int void Schaltet ein Dialogelement ein off int void Schaltet ein Dialogelement aus executeCompAction String gt void Diese abstrakte Methode stellt das eigentliche Ausf hren einer Aktion parat Sie wird durch den Quelltextexport entsprechend durch eine switch Anweidung implementiert D 3 16 Klasse IncVarAktion extends score Aktionen SetV
48. Pflichtenheft f r das Programmpaket eine Beschreibung wie diese Arbeit unter den Autoren aufgeteilt wurde sowie die genaue Programmdoku mentation befinden sich im Anhang Wissenschaftliche Einordnung Statecharts werden dazu benutzt das Verhalten von interaktiven Systemen zu be schreiben und zu modellieren David Harel stellte sie in Har87b als Erweiterung von Zustands bergangs Diagrammen vor indem er die Konzepte der Tiefe und Pa rallelit t hinzuf gte Dadurch sind Statecharts den f r endliche Automaten blichen Zustands bergangs Diagrammen deutlich berlegen Frisch gewagt ist halb gewonnen w rtlich Die H lfte des Ganzen hat wer angefangen hat Inhaltsverzeichnis 14 Horrocks unternimmt diesen Vergleich mit einem relativ einfachen Modell eines CD Spielers und kommt zu dem Schluss dass Zustands bergangs Diagramme eine un bersichtlich hohe Anzahl von Zust nden und berg ngen brauchen wohingegen eine quivalente Formulierung in Statecharts sehr leicht zu verstehen ist In einem wei teren Beispiel ein Texteditor mit verschiedenen M glichkeiten Text zu formatieren gibt er konkrete Zahlen an Den 13 Zust nden und 16 Pfeilen des Statecharts st nden hier 96 Zust nde und 7776 Pfeile im entsprechenden Zustands bergangs Diagramm entgegen Es sei hier noch erw hnt dass Horrocks auch den Vergleich zur nat rlichsprach lichen Beschreibung der Verhaltensweise eines Systems zieht Dieser Form der Be
49. Seite 69 und Abschnitt 4 3 lOSiehe auch Abschnitt 2 8 auf Seite 54 MU siehe Abschnitt 6 5 2 auf Seite 145 Kapitel 4 Die implementierte Fassung weiteren Ereignissen wie dem Entnehmen einer Diskette etc dient die in der Imple mentation nicht durch einen Dialog realisiert werden Weiterhin werden die Komponenten in den Dialogen fortlaufend angeordnet oh ne die M glichkeit das Layout zu beeinflussen Jeder Dialogkomponente ist genau eine Variable zugeordnet mit deren Hilfe die se Komponente beeinflusst werden kann Die Dialogkomponenten Als Dialogkomponenten sind folgende Elemente vorgesehen wobei eine leichte Er weiterbarkeit aufgrund des objektorientierten Aufbaus gegeben ist Button Checkboxes Radiobuttons Zum Ausl sen von Aktionen jedoch mit unter schiedlicher vom Benutzer im Statechart zu modellierender semantischer Bedeutung Jedem Element ist genau eine Variable zugeordnet mit der die Be schriftung der Komponente ausgelesen werden oder gesetzt werden kann Textfelder L sen Aktionen aus wenn sie ge ndert werden und k nnen mit einer zu geh rigen Variable angesprochen werden die den Inhalt des Textfeldes enth lt Timer Sind nicht sichtbare Dialogkomponenten Diese k nnen im Dialog Editor er zeugt und ber die entsprechenden Aktionen angesprochen werden W hrend der Simulation sind sie als Buttons sichtbar Im Quelltextexport werden sie nicht als Dialogkomponenten exportiert Auch hier ist eine Vari
50. SimSCM SimBasic gt score SimSCM SimAND gt score SimSCM SimOR gt score SimSCM SimConn gt score SimSCM SimHist gt score SimSCM SimSCModell D 14 2 Exception NoTargetStateException extends java lang Exception Diese Exception wird geworfen wenn beim Aktivieren eines Zustandes kein zu aktivierende Unterzu stand festgestellt werden kann oder wenn der Oberzustand weder OR noch AND Zustand ist Konstruktoren NoTargetStateException String Erzeugt eine neue Exception mit dem angegebenen Text D 14 3 Klasse SimAND extends score SimSCM SimBasic Diese Klasse entspricht in der Simulation einem logischen AND Zustand Konstruktoren SimAND ZustAND SimBasic Erschafft einen neuen AND Simulatinspunkt aus dem bergebenen logischen AND Zustand Der Oberzustand wird dem bergebenen Identifier entsprechend gesetzt SimAND int int Erschafft einen neuen AND Simulationspunkt mit Hilfe von zwei Identifiern prepareTimestep gt void Bereitet einen Zeitschritt vor closeTimestep void Beendet einen Zeitschritt Dabei werden in allen AND Simulationspunkten die aktiviert wurden diejenigen Partitionen aktiviert die noch nicht als zuk nftig aktiv markiert sind activate gt void berschreibt die Methode der Klasse SimBasic Aktiviert diesen AND Simulationspunkt Dabei werden auch alle Partitionen aktiviert completeActivation void Vervollst ndigt die Aktivierung dieses AND Sim
51. Synch Zustand verbunden 2 3 2 Der Historykonnektor Der Historykonnektor tritt in s mtlichen betrachteten Schriften in praktisch einheitli cher Form auf Allerdings wird er meist in der Form eines History Einstiegs beschrie 28 yo HK99a S 132 oder Rum99 S 463 ff Anmerkung dies ist kein Tippfehler 29 vgl HK99a S 148 45 Verbindungen Kapitel 2 Varianten von Statecharts in der Literatur 46 ben Dieser Einstieg erm glicht es dem Architekten des Systems einen Zustand vor bergehend zu verlassen etwa um einen Interrupt abzuarbeiten und danach zur vorherigen Situation des Zustands zur ckzukehren Durch die Einf hrung von Kon nektoren in Statemate ist diese Funktionalit t sinnvollerweise in diese Gruppe von Elementen bertragen worden Eigentlich ist jedoch die Bezeichnung als Einstieg ungenau In den meisten Be schreibungen erh lt ein Zustand erst dann eine History wenn er zum ersten Mal be treten wurde Daher kann es passieren dass noch keine History vorhanden ist wenn der Historyeinstieg benutzt werden soll Das Verhalten des Systems wird in diesem Fall durch den Begriff Einstieg nicht intuitiv erkl rt Wird stattdessen ein Konnek tor benutzt ist eine derartige Beschreibung m glich wie im Folgenden beschrieben wird Historykonnektoren brauchen im Gegensatz zu AND und OR Konnektoren keine ausgehenden Verbindungen zu besitzen d rfen dies aber was bei einem Historyeins
52. Variable VARIABLE_INTEGER int CONST Konstante f r eine Variable vom Typ Integer VARIABLE_DOUBLE int CONST Konstante f r eine Variable vom Typ Double VARIABLE_STRING int CONST Konstante f r eine Variable vom Typ String doRefresh boolean Gibt an ob ein refresh durchgeleitet werden soll getType int 181 Package score Aktionen Kapitel D Programmdokumentation R ckgabewert int des Typs dieser Instanz Gibt den Typ dieser Instanz zur ck isGrafTyp boolean R ckgabewert true wenn es ein grafisches Objekt ist sonst false Gibt zur ck ob dieser Typ ein grafisches Objekt ist isDialogTyp boolean R ckgabewert true wenn es ein Dialogobjekt ist sonst false Gibt zur ck ob dieser Typ ein Dialogobjekt ist toString String berschreibt die Methode der Klasse Object Gibt eine Stringrepr sentation zur ck refresh Observable void F hrt einen refresh durch refresh void F hrt einen refresh durch D 3 Package score Aktionen D 3 1 Klassenhierarchie java lang Object gt score Aktionen AktionEdit gt score Aktionen CalledAction gt score LogSCM LogComponent gt score Aktionen AktKomplex gt score Aktionen ExportAktion gt score Aktionen Aktion gt score Aktionen ClearHistoryAktion gt score Aktionen DeepClearHistoryAktion gt score Aktionen JavaAktion gt score Aktionen SetDialogOnAktion gt score Aktionen SetDialog Visib
53. Verifikator 309 VProperties 310 VProperty Window 310 VWindow 311 VWindow VerifMesg 311 ZoomGraphics 307 ZustAND 268 ZustandAtom 268 ZustKomplex 269 ZustOR 270 Konnektor 31 42 115 AND 43 OR 43 Diagrammkonnektor 43 History 45 Ausg nge 46 deep 46 in SCed 97 in UML 44 Schleife 72 Universal 97 Kriterien Abgrenzung 172 Kann 172 muss 171 L LogDM 142 logisches Dialogmodell 142 logisches Statechart Modell 137 M Menge der Aktionen 25 der Ereignisse 24 Stichwortverzeichnis der Historyeinstiege 24 der Kanten 25 der Zust nde 20 Modell in SCed grafisch 138 logisch 137 Quelltext 141 Simulation 141 N Namensraum in SCed 95 O Oberzustand 34 35 Eindeutigkeit 20 Optimierer 83 orthogonale Komponente 39 P Parametrisierung 39 AND 40 OR 40 in SCed 94 Partitionsfunktion 22 Pfeil ung ltiger 71 Pflichtenheft 171 Popup 119 Priorit t strukturell 50 Zahl 49 Q Quelltext Aktion 87 Bedingung 87 Ereignis 87 Generator 86 in der Simulation 79 zum Statechart 65 Quelltextexport 126 149 R Race 76 Radiobutton 67 Rahmenbedingung 52 325 Stichwortverzeichnis 326 Redo 125 150 objektbezogen 63 S Scope 50 Simulation Ablauf 145 Simulationsablauf 145 Simulator 77 123 144 Verwaltete Daten 144 Speichern 150 Statechart 20 Editor 57 143 Kommunikation mit Dialog 68 Konfiguration eines 31 mit Dialog 65 mit
54. Zustand enth lt Nun wird hier also der Default Einstieg benutzt und damit Zu stand J aktiviert Wie beim blichen Aktivieren wird auch hier zun chst in die Hierar chie hinabgestiegen und beim anschlie enden aufsteigenden Durchlauf die jeweiligen Sgenauer gesagt werden die Zust nde als im n chsten Zeitschritt aktiv markiert Kapitel 6 Funktionsweise der Module Der Verifikator A C P1 gt D F y y tl E z G I N a Bern 6 f J Abbildung 6 9 Ablauf der Aktivierung im Simulationsmodell Zust nde aktiviert was sich bei diesem Beispiel jedoch auf den Zustand J beschr nkt Im Statechart sind nun also die Zust nde A C D E G Hund J aktiviert und es kann mit der Simulation fortgefahren werden 6 6 Der Verifikator Zur Funktionsweise des Verifikators muss nicht viel erl utert werden da er haupts chlich aus einzelnen Test Routinen besteht Die Auswahl des Benutzers wel che Tests durchgef hrt werden sollen wird in der Klasse VProperties gespeichert die dem Verifikator bergeben wird Die Ausgabe erfolgt im VWindow in dem auch den einzelnen Warnungen und Fehlermeldungen die entsprechenden dargestellten Objekte zugeordnet sind 6 7 Quelltextexport Die Aufgabe des Quelltextexports ist der Simulation sehr hnlich Prinzipiell soll das was w hrend der Simulation geschieht in einem eigenst ndigen Programm durchgef hrt werden Von diesem An
55. angegebenen Pfeil hinzu addEvent int int gt String Setzt das bergebene Ereignis als Trigger des angegebenen Pfeils save String String Kapitel D Programmdokumentation Package score control Speichert das logische und grafische Statechart Modell unter dem angegebenen Dateinamen store String Speichert das Statechart in einen String der im MainWindow auf den undoStack gelegt wird endLoad gt String schlie t den Ladevorgang ab exportQT String String Exportiert den Quelltext des Statecharts enableRefresh boolean void Erm glicht oder verhindert das Refresh der Sichten refresh gt String Fiihrt ein Refresh der Sichten aus clearAll gt String L scht s mtliche Informationen des Editors prepareForUndo void Bereitet alles fiir ein Undo vor finishUndo void Beendet einen Undo Vorgang getUndoString UndoStack String Gibt das letzte zum Undo gespeicherte Statechart als String zur ck Dieser String entspricht den Befehlen beim Speichern auf Festplatte D 5 6 Klasse CommandPort extends java lang Object implements score control Logger Diese Klasse stellt die Schnittstelle f r Kommandoaktionen dar Attribute com Commander Referenz auf einen Commander project File Das aktuelle Projekt parser Parser Referenz auf einen Parser Konstruktoren CommandPort File Commander Konstruktor init
56. auch Verbindungen zu beachten die auf Unterzust nden enden 20yg Seite 68 Tester 73 Tester 74 Kapitel 3 Werkzeuge f r Statecharts ist aber sp ter durch eine Aktion sichtbar gemacht wird Offensichtlich kann dies nicht sichergestellt werden ohne dass s mtliche M glichkeiten durchgegangen werden Ein hnliches Problem kann selbstverst ndlich auch auftreten wenn das System in einer Gruppe von Zust nden gefangen wird In diesem Fall ist jeder einzelne Zu stand leicht zu verlassen aber Zust nde die au erhalb dieser Gruppe liegen k nnen nicht wieder betreten werden Obwohl dies zun chst nach einem Fehler klingt ist es auch denkbar dass genau dieses Verhalten gew nscht ist Der Verifikator sollte also eine derartige Konstruktion zulassen wenn sie vom Benutzer nicht als fehlerhaft an gesehen wird Beim Test ob Zust nde verlassen werden k nnen muss dar berhinaus beachtet werden dass ein Zustand auch dann verlassen wird wenn dies bei einem Oberzustand geschieht Bei AND Zust nden reicht es sogar dass ein von einer einzigen Partition ausgehender bergang m glich ist In Abbildung 3 7 kann beispielsweise jeder Zu stand verlassen werden obwohl dies bei den Zust nde D und E nicht gleich offensicht lich ist Zustand D wird etwa bei Eintreten des Ereignisses f verlassen da sein Ober zustand C eine entsprechende Verbindung besitzt Zustand E wird durch das Ereignis g verlassen da der von Zustand F ausgehende
57. bergang den gesamten AND Zustand B deaktiviert Hier ist anzumerken dass weder E noch einer seiner Oberzust nde eine ausgehende Verbindung besitzt Abbildung 3 7 alle Zust nde k nnen verlassen werden Vollst ndigkeit Weitere Fragen die berpr ft werden k nnen ergeben sich aus dem Umfeld des Defaulteinstiegs Zun chst einmal sollte jeder OR Zustand einen Unterzustand als De faulteinstieg markiert haben Dies ist jedoch nicht bei jedem Zustand wirklich notwen dig wird der Zustand lediglich durch Verbindungen betreten die bei einem Unterzu stand enden so w rde ein Defaulteinstieg niemals benutzt werden 21 Zustand D wird selbstverst ndlich ebenfalls beim Eintreten von g verlassen wenn er noch aktiviert sein sollte Kapitel 3 Werkzeuge f r Statecharts Eine hnliche Situation ergibt sich bei den orthogonalen Komponenten eines AND Zustands Hier wird der Defaulteinstieg allerdings nicht nur dann notwendig wenn der AND Zustand selbst direkt betreten werden kann sondern auch wenn es ei ne Verbindung gibt die nur in einigen aber nicht allen orthogonalen Komponenten endet Durch einen solchen bergang wird der AND Zustand und damit alle Partitio nen aktiviert bei Partitionen die nicht direkt an diesem bergang beteiligt sind wird daf r der Defaulteinstieg benutzt In Abbildung 3 8 wird beispielsweise in Partition P1 kein Defaulteinstieg ben tigt da jeder Pfeil einen Endzustand in P1 besitzt F
58. bergeben bekommen den Nachteil dass der grafische Verlauf der eingef gten Verbindung relativ willk rlich ist Es l sst sich beispielsweise nicht angeben wo die Abschnitte des Pfeils sich treffen oder ob in einigen Bereichen Zust nde umgangen werden m ssen die auf dem direkten Weg st ren Eine bessere Methode ist es Pfeile durch ausgew hlte Punkte in kleinere Ab schnitte einzuteilen Dies l st auf der einen Seite das Problem der Positionierung da derartige Punkte die wir Hooks nennen wollen beliebig verschoben werden k nnen 61 62 Grafische Editoren Kapitel 3 Werkzeuge f r Statecharts Der bergang verbindet sie in der festgelegten Reihenfolge und kann so vom Benutzer ganz beliebig durch das Statechart gef hrt werden Mit diesen Hooks lassen sich nun s mtliche Pfeile durch die im letzten Abschnitt beschriebene Anklicken Loslassen Methode zeichnen Wird etwa ein bergang ben tigt der bei zwei Zust nden A und B beginnt und bei einem Zustand C endet so wird zun chst ein Pfeil zwischen den Zust nden A und C gezeichnet ein Hook auf diesem Pfeil eingef gt und dann der Zu stand B mit diesem Hook verbunden Dieses Vorgehen wird in Abbildung 3 3 a bis c dargestellt In einem vierten Schritt kann dann der Pfeil so positioniert werden dass er den W nschen des Benutzers entspricht b c Abbildung 3 3 Einfiigen eines 2 1 Pfeiles Der Inspektor Der Aufbau der Zustandshierarchie mit dem gr
59. da von ausgegangen dass dieser Pfeil einen solchen besitzt getPosOfConnOut GrafModellSicht Vector Gibt die Zeichenkoordinaten der Nachbarzust ndes eines Out Connect Hook zur ck Es wird davon ausgegangen dass dieser Pfeil einen solchen besitzt getStartStates Vector Kapitel D Programmdokumentation Package score GrafSCM Gibt einen Vector mit den Startzust nden dieses Pfeils zur ck Dieser ist weder Null noch leer getEndStates Vector Gibt einen Vector mit den Endzust nden dieses Pfeil zur ck Dieser ist weder Null noch leer hasHookOutside GrafPunkt gt boolean Gibt an ob einer der Abschnitte einen Hook besitzt der au erhalb des bergebenen Punktes liegt hasStartOutside GrafPunkt gt boolean Gibt an ob einer der Startzust nde au erhalb des bergebenen Punktes liegt hasEndOutside GrafPunkt boolean Gibt an ob einer der Endzust nde au erhalb des bergebenen Punktes liegt getSectStartingAt GrafPunkt gt GPAbschnitt Gibt die Abschnitte zur ck die bei dem bergebenen Punkt beginnen oder Null wenn es keine solchen gibt getSectEndingAt GrafPunkt gt GPAbschnitt Gibt die Abschnitte zur ck die bei dem bergebenen Punkt enden oder Null wenn es keine solchen gibt getCoordsOfSecondTo GrafModellSicht GrafPunkt Point2D Double Gibt die Zeichenkoordinaten des zweiten Punktes nach dem bergebenen Zustand zur ck oder Null wenn dieser Punkt nicht als Start
60. das Statechart weiterzugeben Die zweite Methode hat den Vorteil dass alle externen Ereignisse lediglich ein einziges Feld im Systemdialog beanspruchen andererseits ist die Bedienung einer solchen Liste in diesem Zusammenhang m gli cherweise nicht so leicht zug nglich Es sollte dabei allerdings beachtet werden dass dem Benutzer nicht die M glich keit gegeben werden sollte interne Ereignisse auszul sen wie etwa das Verlassen ei nes Zustands exit Im eigentlichen System wird dieses Ereignis nur in bestimm ten Situationen auftreten k nnen nicht zu jedem beliebigen Zeitpunkt Au erdem set zen interne Ereignisse bereits Aktionen des Statecharts voraus n mlich in diesem Fall dass der entsprechende Zustand verlassen wurde die nicht eingetreten sind wenn der Benutzer dieses Ereignis gezielt ausl st Durch diese Einschr nkung wird die Anzahl der Ereignisse gegen ber der Gesamtanzahl deutlich reduziert Besonders komfortabel f r den Benutzer w re es eine Grenze festlegen zu k nnen und erst wenn die Anzahl der Ereignisse diesen Wert bersteigt diese als Auswahlliste anzuzeigen Auch bei externen Ereignissen ist es denkbar dass sie eine bestimmte Kombi nation von aktiven Zust nden innerhalb des Statecharts erfordern bevor sie eintreten k nnen So wird etwa ein Temparatursensor in einem Wassertank nicht melden dass das Wasser zu kochen beginnt wenn sich kein Wasser im Tank befindet Der Konstruk teur des Statecharts k
61. des Kreises rad Radius des Kreises intersectBeam Point2D Double Point2D Double double double double double Point2D Double R ckgabewert Schnittpunkt des Strahls mit der Strecke oder Null falls sie sich nicht schneiden Schneidet einen Strahl der durch einen Anfangspunkt und einen weiteren Punkt gegeben ist durch den er verlaufen soll mit einer Strecke die durch die Koordinaten ihres Anfangs bzw Endpunktes gegeben ist Parameter center Startpunkt des Strahls aim Punkt durch den der Strahl verl uft D 16 26 Klasse ZoomGraphics extends java lang Object Diese Klasse erm glicht das einfache Zeichnen bestimmter grafischer Objekte mit einer eingestellten Vergr erung Die protected Methode mit dem Zusatz Here erwarten Punkte bei denen diese Ver gr erung bereits eingerechnet ist Konstruktoren ZoomGraphics Graphics double Erschafft eine neue ZoomGraphics die mit dem angegebenen Zoom in die bergebene Klasse Graphics zeichnet getZoom gt double Package score util 307 Package score util 308 Kapitel D Programmdokumentation Gibt die eingestellte Vergr erung zur ck scale double int Rechnet den bergebenen Wert so um dass er zur Vergr erung passt drawStringHere String int int void Zeicnet einen String an die bergebene Stelle drawLineHere int int int int void Zeichnet eine Linie zwischen den bergebenen Punkten dra
62. die bergebene Dialogkomponente anschaltet execute boolean berschreibt die Methode der Klasse Aktion Startet den Timer setDigKomponente DigKomponente gt void Setzt die Dialogkomponente f r diese Aktion getDlgKomponente gt DlgKomponente Gibt die DialogKomponente dieser Aktion zur ck setToOn boolean gt void Setzt die Angabe ob diese Aktion die DialogKomponente anschaltet getToOn gt boolean Gibt zuriick ob diese Aktion die DialogKomponente anschaltet save EasyFile Writer void berschreibt die Methode der Klasse Aktion Speichert die Aktion im EasyFileWriter exportQT EasyFileWriter gt void berschreibt die Methode der Klasse Aktion Exportiert den Quelltext f r diese Aktion in den EasyFileWriter D 3 19 Klasse SetDialogVisibleAktion extends score Aktionen Aktion implements score Aktionen DialogAktion Diese Klasse spezialisiert die abstrakte Klasse Aktion als SetDialogVisibleAktion Konstruktoren SetDialogVisibleAktion DlgKomponente boolean Erschafft eine neue Aktion die die bergebene Dialogkomponente sichtbar oder unsichtbar wer den l sst execute gt boolean berschreibt die Methode der Klasse Aktion Macht die Dialogkomponente sichtbar oder unsichtbar setDigKomponente DigKomponente gt void Setzt die Dialogkomponente auf die sich diese Aktion bezieht getDlgKomponente gt DlgKomponente Gibt die Dialogkomponente dieser Aktion zur
63. die ein Token w hrend das Parsens repr sentiert Konstruktoren Token int Konstruktor Token int boolean Konstruktor Token int int Konstruktor Token int double Konstruktor Token int Point2D Double Konstruktor Token int Dimension Double Konstruktor Token int String Konstruktor getType int Liefert den Typ des Tokens toString gt String berschreibt die Methode der Klasse Object Liefert einen String des Tokens D 6 Package score DEditor D 6 1 Klassenhierarchie java lang Object gt java awt event MouseAdapter gt score DEditor DialogEditor gt score util Observable gt score DEditor DlgKompSelektor D 6 2 Klasse DialogEditor extends java awt event MouseAdapter implements score util Observer java awt event ActionListener java awt event WindowListener Erstellt ein Fenster in dem das Erstellen neuer Dialogkomponenten und das L schen erm glicht wird Attribute undo UndoManager Referenz auf den UndoManager Konstruktoren DialogEditor LogDModell 213 Package score doclet Kapitel D Programmdokumentation 214 Konstruktor Parameter modell das logische Dialog Modell replaceObservable Observable Observable boolean Ersetzt das Observable actionPerformed ActionEvent void Implementation f r ActionListener Interface update Observable Object gt void Implementation f r Observer Interface mouseP
64. die m glichen Partitioner f r eine Unterteilung an den gegebenen Koordinaten zur ck Muss entsprechend implementiert werden da in der un berschriebenen Form keine Partition akzeptiert wird moveTo GrafZustand Point2D Double boolean void Verschiebt diesen grafischen Punkt zu einem neuen Oberzustand Dieser muss bereits als logi sches Gegenst ck einen OR Zustand besitzen Der angegebene Offset ist der Offset im neuen Oberzustand moveTo GrafZustand Point2D Double void Bewegt diesen Punkt an die neue Stelle und ruft danach ein notifyObservers auf copyToNewSuper GrafZustand Hashtable gt GrafZustand Diese abstrakte Methode muss so implementiert werden dass sie den GrafPunkt in den neuen Oberzustand kopiert und dabei die bergebenen Hashtables entsprechend f llt checkArrowsForCopy Hashtable gt void F llt die bergebenen Hashtables so dass alle eingehenden und ausgehenden Pfeile dieses Graf Punkts mit Ereignissen und Variablen beachtet wurden completeCopy Hashtable GrafZustand Vector void Beendet den Kopiervorgang Wird diese Methode nicht berschrieben hei t dies dass die erfor derlichen Pfeile eingef gt werden translate Hashtable GrafPunkt Gibt die bersetzung dieses grafischen Punktes anhand der bergebenen Hashtables zur ck Ist dieser Punkt nicht in den Hashtables aufgef hrt wird ein Fehler ausgegeben und Null zur ckge geben getDepthTo GrafPunkt int ber
65. dieser Aktion als Integer zur ck getlD gt int Gibt die ID dieser atomaren Aktion zur ck getAll gt Vector Gibt einen Vector aller atomaren Aktionen zur ck getAction int Aktion Gibt die atomare Aktion mit dem angegebenen Identifier zur ck getActors int Vector Gibt einen Vector der Actors f r die atomare Aktion mit dem angegebenen Identifier zur ck getActors Vector Kapitel D Programmdokumentation Package score Aktionen Gibt einen Vector der Actors dieser atomaren Aktion zur ck hasActors boolean Gibt zur ck ob diese atomare Aktion Actors eingetragen hat addActor Actor void F gt zu dieser atomaren Aktion den bergebenen Actor hinzu removeActor Actor void Entfernt den bergebenen Actor aus der Liste der Actors dieser atomaren Aktion compareTo Object int Implementiert das Comparable Interface delete void berschreibt die Methode der Klasse Observable L scht diese Aktion d h sie wird aus dem Hashtable entfernt equals Object boolean berschreibt die Methode der Klasse Object Vergleicht den Identifier execute boolean F hrt diese Aktion aus Muss entsprechend implementiert werden toString String berschreibt die Methode der Klasse Object Stellt diese Aktion als String dar wird f r die Ausgabe in den Listen ben tigt und muss entspre chend implementiert werden save EasyFileWriter gt void S
66. e Der Zeitz hler wird auf O gesetzt e Die Historyhierarchie wird geleert Externe Aktionen sammeln Es werden externe Aktionen vom Benutzer gesammelt wie zum Beispiel das Dr cken von Buttons Die dabei generierten Aktionen werden zur Aktionsmenge hinzugef gt Diese Phase wird beendet wenn der Zeitschritt abgelaufen ist durch eine Uhr oder durch einen manuellen Schritt Befehl Externe Aktionen auswerten e Die in der vorherigen Phase gesammelten Aktionen werden ausgef hrt und die dabei generierten Ereignisse zur Ereignismenge hinzugef gt e Die Aktionsmenge wird geleert berg nge berechnen Aus der Ereignismenge dem logischen Statechartmodell und dem Simulationsmodell werden die Transitionen ermittelt berg nge ausf hren e Die berechneten berg nge werden dem Simulationsmodell zum Setzen bergeben Zur Aktionsmenge werden die dabei generierten Aktionen hin zugef gt e Die Historyhierarchie wird implizit vom Simulationsmodell angepasst berg nge abschliessen e Die Zeit wird um eine Einheit erh ht e Die Ereignismenge wird geleert e Die Ansichten werden aktualisiert Interne Aktionen auswerten e Die in der Phase bergange ausf hren gesammelten Aktionen werden abgearbeitet und dabei generierten Ereignisse zur Ereignismenge hinzu gef gt e Die Aktionsmenge wird geleert Fahre fort mit Externe Aktionen sammeln Dieser Ablauf wird in Abbildung 6 8 dargestellt Dabei stellt die mittlere Achse die
67. ein insertNew1_1Arrow GrafPunkt GrafPunkt Point2D Double Point2D Double void F gt einen neuen 1 1 Pfeil zwischen den bergebenen Grafischen Punkten ein insertNewReflectiveArrow GrafPunkt gt void F gt zum bergebenen Punkt einen neuen r ckbez glichen Pfeil hinzu insertNewText Point2D Double String int F gt einen neuen Text an der angegebenen Position hinzu Hiermit werden Texte nur in Zust nden eingef gt nicht aber Texte zu Hooks connectin GrafHook GrafPunkt Point2D Double gt void F gt zum bergebenen Hook eine neue eingehende Verbindung hinzu connectOut GrafHook GrafPunkt Point2D Double void F gt zum bergebenen Hook eine neue ausgehende Verbindung hinzu getDepthToTop GrafTyp int Gibt die Tiefe des bergebenen Objektes zum Oberzustand zur ck isValidMove GrafPunkt Point2D Double gt boolean Gibt zur ck ob der angegebene Zustand an die angegebene Stelle bewegt werden darf isValidMove Partitioner Point2D Double boolean Gibt zur ck ob der angegebene Partitioner an die angegebene Stelle bewegt werden darf isValidMove GrafHook Point2D Double boolean Gibt zur ck ob der angegebene Hook an die angegebene Stelle bewegt werden darf isValidSize GrafPunkt Dimension Double boolean Gibt zur ck ob die angegebene Gr e f r den bergebenen GrafPunkt g ltig ist isValidSize GrafPunkt Dimension gt boolean Gibt zur ck ob die angegebene Gr e f
68. einem 1 1 Pfeil getSource LogPunkt Gibt den LogPunkt zur ck von dem dieser Pfeil ausgeht getDest Vector Gibt einen Vector mit allen LogPunkten zur ck bei denen dieser Pfeil endet setSource LogPunkt void Setzt den Startpunkt auf den bergebenen LogPunkt addDest LogPunkt void F gt den bergebenen LogPunkt zu den Endpunkten hinzu removeDest LogPunkt gt void Entfernt den bergebenen LogPunkt aus der Liste der Endzust nde redirect LogPunkt LogPunkt boolean void 263 Package score LogSCM Kapitel D Programmdokumentation 264 berschreibt die Methode der Klasse LogPfeil Ersetzt alle Start und Endpunkte die dem ersten LogPunkt entsprechen durch den zweiten Ist der Parameter all auf false gesetzt wird nur der erste Endpunkt ersetzt get1 1 O gt LogPfeil berschreibt die Methode der Klasse LogPfeil Wenn nur ein einziger Endzustand vorhanden ist wird ein 1 1 Pfeil zur ckgegeben der diesem 1 N Pfeil entspricht Start und Endzust nde werden auf den neuen Pfeil umgesetzt und dieser alte Pfeil aus der Liste aller LogPfeil entfernt Sind jedoch mehrere Endzust nde vorhanden wird Null zur ckgegeben delete void berschreibt die Methode der Klasse LogPfeil L scht diesen LogPfeil dabei wird er auch aus allen Start und Endzust nden entfernt exportQT EasyFileWriter boolean berschreibt die Methode der Klasse LogPfeil Exportiert den
69. einfacher Anrufbeantworter A 2 2 Elemente des Dialogs Der Benutzerdialog enth lt die folgenden Komponenten Ein Aus Diese Checkbox stellt den Ein und Ausschalter des Anrufbeantworters dar Stop Die Stop Taste die den Anrufbeantworter in den Wartezustand zur cksetzt Abspielen Mit diesem Knopf werden aufgezeichnete Nachrichten wiedergegeben Anzahl In diesem Textfeld zeigt der Anrufbeantworter an wie viele Nachrichten auf gezeichnet sind Dieses Feld kann nicht vom Benutzer ver ndert werden PlayTimer Dieser Timer stoppt die Zeit die f r das Abspielen von Ansagen oder Nachrichten ben tigt wird Diese Funktion wird in diesem einfachen Modell ben tigt da f r alle diese Vorg nge generell ein Zeitraum von 10 Sekunden angenommen wird L schen Durch Dr cken dieses Knopfes werden alle aufgezeichneten Nachrichten gel scht Der Anrufbeantworter reagiert nur auf zwei externe Ereignisse Das Eingehen eines neuen Anrufs und das Signal dass der Anrufer wieder aufgelegt hat Um diese in der Simulation erzeugen zu k nnen besitzt der Systemdialog die zwei Kn pfe Neuer Anruf meldet dem Anrufbeantworter den Beginn eines eingehenden Anrufs Auflegen beendet einen eingehenden Anruf Der komplette Dialog der Simulation ist in Abbildung A 10 dargestellt User Dialog Ein Aus Stop Abspielen TIMER PlayTimer 10 L schen System Dialog Neuer Anruf Auflegen Abbildung A 10
70. etwa das Ver lassen eines Zustands ein Ereignis ausl st Mit Hilfe der statischen Verzweigungen l sst sich diese Reihenfolge ndern wie in Abbildung 2 5 dargestellt wird Auf das Ereignis werden in dieser Reihenfolge die Ereignisse bzw Aktionen exit C x exit A y entered B z und entered D generiert Abbildung 2 5 Reihenfolge von Aktionen bei statischen Verzweigungen 22 vgl HN96 S 302 Bvgl HK99a S 133 24Um dem Leser einen Eindruck dieser Darstellung zu geben benutzen wir Synchronisationsbalken jedoch im Beispiel der Abbildung 2 6 vgl HK99a S 146 f 2691 Abschnitt 2 8 2 nach Rum99 Konnektoren Kapitel 2 Varianten von Statecharts in der Literatur Bei dynamischen Verzweigungen wird die ausgehende Verbindung gew hlt nachdem die Aktionen der eingehenden Verbindungen ausgef hrt wurden Hitz und Kappel gehen dabei nicht darauf ein was passiert wenn durch diese Aktion keine der Bedingungen der ausgehenden Verbindungen mehr erf llt ist dies l sst sich je doch einfach sicherstellen wenn man vorschreibt dass genau eine der Bedingungen die spezielle Bedingung else sein muss die immer dann wahr ist wenn alle anderen angegebenen Bedingungen falsch sind Statische Verzweigungen mit mehreren ausgehenden Verbindungen sind trotz ih res Namens nicht die beste Wahl f r Verzweigungen aufgrund von Abfragen Derartige berg nge sollten in UML eher durch Entscheidungsknoten modelliert werd
71. gt eine atomare Aktion zu dieser komplexen Aktion hinzu Dabei kann es vorkommen dass eine atomare Aktion mehrfach auftritt addAll AktKomplex gt void F gt zu dieser komplexen Aktion alle atomaren Aktionen der bergebenen komplexen Aktion hinzu removeAction Aktion gt void Entfernt eine atomare Aktion aus dieser komplexen Aktion Auch wenn sie mehrfach enthalten war ist sie danach nicht mehr enthalten updateTranslators Hashtable void F gt zu den bergebenen bersetzungstabellen die Ereignisse und Variablen hinzu die in den atomaren Aktionen dieser komplexen Aktion benutzt werden translatelnto Hashtable AktKomplex void Kapitel D Programmdokumentation Package score Aktionen F gt eine bersetzung dieser komplexen Aktion in die bergebene komplexe Aktion ein Thro wAktionen SetVar und IncVarAktionen werden neu erschaffen wenn das Ereignis bzw eine der Variablen ersetzt werden m ssen ansonsten werden die alten atomaren Aktionen bernommen equals AktKomplex boolean Gibt zur ck ob die enthaltenen atomaren Aktionen dieser und der bergebenen komplexen Akti on bereinstimmen Dies ist essentiell die Methode Vector equals save EasyFileWriter String void Speichert diese komplexe Aktion in den EasyFileWriter Parameter target String der angibt bei welchem Actor und an welche Stelle diese komplexe Aktion beim Laden wieder eingef gt werden muss exportAll
72. hrt adoptSize Dimension Double void Setzt die Gr e so dass sie zur bergebeben neuen Gr e des Oberzustands passt isValidMove Point2D Double boolean Gibt zur ck ob der bergebenen Punkt eine g ltige Bewegung angibt Dabei wird je nach Aus richtung des Partitioners nur die X bzw Y Koordiante beachtet moveTo Point2D Double void Bewegt diesen Partitioner an die angegebene Position Dabei wird je nach Ausrichtung dieses Partitioners nur die X bzw Y Koordinate beachtet resizeH double double double double void Verl ngert oder verk rzt diesen Partitioner wenn er durch die angegebene Bewegung betroffen ist resizeV double double double double void Verl ngert oder verk rzt diesen Partitioner wenn er durch die angegebene Bewegung betroffen ist save EasyFileWriter void Speichert diesen Partitioner im EasyFileWriter D 9 18 Klasse SuperList extends java lang Object Diese Klasse stellt die Liste der Oberzust nde eines Zustands dar und erm glicht es den tiefsten gemein samen Oberzustand zu finden Konstruktoren SuperList GrafPunkt Erschafft einen neue Liste die durch die Oberzust nde des bergebenen Punktes initialisiert wird SuperList SuperList Kopiert den noch zu beachtenden Teil einer SuperList Methoden consider GrafPunkt gt int Betrachtet zus tzlich einen weiteren neuen Grafischen Punkt Gibt die Position des tiefsten ge mei
73. ist jedoch nicht das Arbeiten mit dem Programm zu erl utern F r eine derartige Einf hrung sei auf das Benutzerhandbuch in Kapitel 5 verwiesen Zun chst wird beschrieben auf welche Weise das Statechart modelliert wurde und wie die Dialogkomponenten im Speicher gehalten werden Die darauf folgenden Abschnitte besch ftigen sich mit einzelnen Modulen insbesondere den beiden Edito ren dem Simulator und dem Quelltextexport Das Kapitel schlie t mit einem Ausblick wie das vorliegende Programm erwei tert werden k nnte und erw hnt kurz mit welchem Aufwand diese Erweiterungen verbunden w ren 6 2 Die Datenstruktur des Statecharts 6 2 1 berblick Die Spezifikationen des Statecharts werden in zwei parallelen Modellen gehalten die unterschiedliche Daten speichern Diese beiden Modelle sind das Logische Statechart Modell LogSCM und das Grafische Statechart Modell GrafSCM Der Schwerpunkt des logischen Modells liegt auf der Struktur des Statecharts welcher Zustand ato mar oder komplex ist und welche Unterzust nde enth lt oder bei welchen Zust nden berg nge beginnen und enden und welche Ereignisse Bedingungen und Aktionen ihnen zugeordnet sind In diesem Modell werden Partitionen durch OR Zust nde mo delliert wie es auf Seite 58 vorgeschlagen wurde Das grafische Modell h lt die Daten die f r die Darstellung des Statecharts relevant sind die Gr e der Zust nde und ihre Position aus welchen Abschnitten die Pfeile be
74. jede Folge von m glichen Zust nden durchgegangen werden da sie sonst nicht verneint werden kann Offen sichtlich ist das Problem hnlich umfangreich wie die bereits erw hnten Der Verifi kator kann jedoch wieder eine vereinfachte Variante berpr fen indem er sicherstellt dass jeder Zustand eingehende Verbindungen besitzt oder zumindest als Defaultein stieg seines Oberzustands markiert ist Obwohl dies noch keine Garantie daf r ist dass er wirklich erreichbar ist stellt es doch eine notwendige Bedingung daf r dar Ebenso l sst sich berpr fen ob jeder Zustand verlassen werden kann Daf r reicht es allerdings nicht aus dass jeder nicht terminale Zustand ausgehende Ver bindungen besitzt Es k nnte durchaus sein dass das Ereignis das diesen bergang ausl st zu einem Knopf geh rt der momentan unsichtbar ist Damit kann das Er eignis nicht eintreten und diese Verbindung ist praktisch nicht vorhanden Allerdings kommt es hierbei darauf an ob Dialogkomponenten anhand einer Tabelle oder mittels Aktionen sichtbar und unsichtbar gemacht werden In der tabellarischen Form l sst sich diese Bedingung relativ leicht abschlie end berpr fen in der zweiten Varian te kann es durchaus sein dass die notwendige Dialogkomponente zun chst unsichtbar 1 Hjerbei wird von einer Strukturellen Priorit t ausgegangen wie sie von Harel und Namaad f r neuere Versionen von Statemate beschrieben wird vgl auch Seite 50 lhierbei sind
75. modelliert werden kann Die Unterschiede zwischen den drei Arten von OR Konnektoren sind demzufolge auch nicht logischer Natur die Einf hrung der drei Typen wird von Harel und Politi wie folgt begr ndet Die einzelnen Konnektoren sind dazu gedacht die Unterscheidung zwischen verschiedenen Verhaltensweisen optisch hervorzuheben ein C Konnektor condition deutet eine Verzweigung auf Grund von Bedingun gen an ein S Konnektor Switch Konnektor verzweigt durch Ereignisse und Vereinigungs Konnektoren werden f r alle brigen F lle benutzt Wir haben uns daher daf r entschieden diese Konnektoren zu einem Typ zusammen zufassen dem Universal Konnektor AND Konnektoren bieten den Vorteil dass sie sich in nat rlicher Weise auf meh rere Partitionen eines AND Zustands gleichzeitig beziehen k nnen Wir haben uns wegen der parallelen Natur dieser berg nge daf r entschieden diese Funktionalit t nicht zu den Konnektoren sondern zu den Verbindungen zu z hlen Deshalb haben wir neben den blichen 1 1 berg ngen noch zwei weitere Typen definiert N 1 und 1 N berg nge die von mehreren Startzust nden ausgehen beziehungsweise bei mehreren Endzust nden aufh ren Bei der Simulation und Verifikation ergeben sich dadurch Vorteile gegen ber der Modellierung mit mehreren einzelnen Verbindungen und Kon nektoren So wird beim Verlassen des AND Zustands S mittels eines N 1 bergangs nur ein Ereignis exit S erzeugt und das
76. nun weitere Werkzeuge diskutieren Dabei werden wir immer davon ausgehen dass diese mit einem Statechart Editor zu sammenarbeiten wie er hier beschrieben wurde 3 1 2 Der Dialog Editor Statecharts modellieren interaktive Systeme Obwohl ein solches System v llig oh ne die Hilfe eines Computers auskommen kann wird es sich doch oft um Software handeln die mit dem Benutzer ber Bildschirm Tastatur und Maus in Verbindung steht In diesem Fall geschieht die Kommunikation meist mittels eines Benutzerdia logs Zum Entwurf eines solchen Dialogs ist es naheliegend einen eigenen Editor anzubieten Die Frage wie ein Dialog Editor das Erstellen eines allgemeinen Dialogs unterst tzen kann und das Problem gute Benutzerschnittstellen zu erstellen sollen hier jedoch nicht besprochen werden Vielmehr geht es darum welche Funktionen ein Dialog Editor im Zusammenhang mit Statecharts bieten sollte Der Einfachheit halber sei hier angenommen dass es sich lediglich um einen ein zigen Benutzerdialog handelt Die berlegungen lassen sich jedoch direkt auf mehrere Dialoge erweitern Interaktion Im allgemeinen wird der Dialog mit dem Statechart ber Ereignisse Bedingungen und Aktionen in Verbindung stehen Wird ein Knopf des Dialogs gedr ckt oder ein Feld ausgew hlt so sendet der Dialog ein Ereignis an das System das mittels des Statecharts modelliert wird Das Statechart oder vielmehr das System reagiert dar auf mit einem bergang in einen
77. object Nothing Abbildung 5 1 Inspektor bei Start des Programms Beim Start des Programms ffnet sich automatisch der Inspektor Abbildung 5 1 mit der Men leiste sowie eine grafische Ansicht Abbildung 5 2 Der Dialog Editor die Simulation sowie weitere Werkzeuge k nnen bei Bedarf ge ffnet werden Der Inspektor istin gewisser Hinsicht das Hauptfenster des Programms Er enth lt die Men leiste aus der s mtliche weiteren Programmmodule gestartet werden k nnen Neben dieser enth lt der Inspektor ein Informationsfeld in dem die Eigenschaften der markierten Objekte angezeigt werden Manche Eigenschaften k nnen auch von hier direkt editiert werden Einige Objekte werden durch Buttons dargestellt Durch Dr cken dieses Buttons wird dieses Objekt als markiertes Objekt ausgew hlt Im folgenden m chten wir kurz die M glichkeiten vorstellen die der Inspektor f r die verschiedenen Objekte bietet Die Beispiele zeigen in der Regel ein maximales Inspektorfeld also ein Feld in dem m glichste viele verschiedene Felder angezeigt werden Felder die nicht belegt sind werden nicht angezeigt So gibt es beispielsweise f r einen atomaren Zustand kein Feld welches die Unterzust nde anzeigt 106 Kapitel 5 Benutzerhandbuch Der Inspektor WZJEI View 1 Top Level B O i D O ee amp Text a v Grid v Haaks IDs vj Labels 0 O Depth 4 o gt Zoom 4 100 gt Abbildung 5 2 Grafische Ansicht 5 3 1 I
78. oder wahr sind und so den Gesamtzustand des externen Systems leichter erkennt Analog zu den Ereignissen ist es auch hier nicht sinnvoll den Benutzer den Wahrheitswert von internen Bedingun 30yg Seite 68 3lvgl Abschnitt 2 6 32Dieses Dialogelement wurde bereits auf Seite 67 erw hnt Tester 81 Tester 82 Kapitel 3 Werkzeuge f r Statecharts gen wie etwa der Abfrage in die angibt ob ein bestimmter Zustand aktiviert ist w hlen zu lassen K nnen Dialogelemente vom Statechart deaktiviert werden so kann dies auch f r im Systemdialog repr sentierte externe Bedingungen geschehen Hierzu ist jedoch anzumerken dass in diesem Sinne deaktivierte Bedingungen keinesfalls einen festge legten Wahrheitswert wie etwa falsch besitzen ist eine Checkbox deaktiviert kann sie lediglich nicht mehr umgeschaltet werden sondern beh lt ihren momentanen Zu stand bei Auch dies kann in einigen F llen sinnvoll sein beispielsweise wenn es sich um die Anfrage handelt ob momentan eine l ngere Prozedur bearbeitet wird die sich nicht abbrechen l sst wie etwa das Aufheizen eines Brennofens f r Ton Es ist allerdings zu bemerken dass das explizite ndern des Wahrheitswerts einer externen Bedingung durchaus als externes Ereignis angesehen werden kann In diesem Fall kann die Bedingung durch ein Zustandspaar innerhalb des Statecharts modelliert und das externe Ereignis wie alle anderen externen Ereignisse verwaltet werden An dererseit
79. s es e ao ee 5 4 Der grafische Editor o o es eao eo ss a einen ee 5 4 1 ZEIchenHlache sos ran ta E R N 5 4 2 Werkz ugleist e 2 od er ten a 5 4 3 Die Eigenschaftsleiste ooo nne cg crans es 59 Der Disiog B lter s sos sor aor e a uone ae ee OE h SS Untypische Dialogkomponenten 53 2 Kommunikation ber Variable DO Bedinsinsen u pa wenn nee een Ih EPICII SE o a Ge A A A E 5 8 ARO ur a erg 5 9 Der Simulator 5 10 Undo Redo SAL QUEMENT o a 4 4 ee eh 5 11 1 Exportieren des StatechartS oao aaa 5 11 2 Methoden der Quelltextsegmente 5 12 Erweitern des Programms um neue Dialogkomponenten 5 13 Der Yerukator lt a 0 5 5 wa Biken ee Bin a 5131 Del cio iia pea aE ea 5 13 22 Diegipzelin n TE ociosa a 6 Funktionsweise der Module 6 1 berblick a 6 2 Die Datenstruktur des Statecharts 6 2 1 berblick osscar nenea en en 6 2 2 Das Logische Statechart Modell 6 2 3 Das Grafische Statechart Modell 6 2 4 Das Simulations und Quelltextmodell 0 3 Das logische Dialogmodell 22 2 22H 22H 64 Der Eilitor 2 4 2er sen a ee ee 6 3 Dersiniulater e 204 eh ana dales raten aaa 6 5 1 Verwaltete Daten 6 5 2 Der Simulationsablauf 6 5 3 Aktivieren in der Zustandshierarchie 6 6 Der Verifikator 6 7 VDEIRERI
80. unterhalb des Oberzustands liegt delete void berschreibt die Methode der Klasse GrafTyp L scht diesen Hook Wenn es sich um einen Start oder Endhook handelt wird auch der entspre chende Abschnitt gel scht wenn es sich um einen Connecthook handelt wird der gesamte Pfeil gel scht deleteSection void L scht den Abschnitt zu dem dieser Hook geh rt deleteArrow void Kapitel D Programmdokumentation Package score GrafSCM L scht den Pfeil zu dem dieser Hook geh rt delScope gt int Gibt zuriick welche Objekte von diesem Hook aus gel scht werden k nnen mayDeleteHook gt boolean Gibt zuriick ob dieser Hook aus seinem Abschnitt herausgel scht werden darf ohne dass dadurch der gesamte Abschnitt gel scht werden muss mayDeleteSection boolean Gibt zur ck ob der Abschnitt zu dem dieser Hook geh rt gel scht werden darf ohne dass da durch der gesamte Pfeil gel scht werden muss translate Hashtable GrafPfeil GrafHook Gibt eine bersetzung dieses Hooks zur ck die zum bergebenen Pfeil geh rt save EasyFileWriter void Speichert diesen Hook im EasyFileWriter D 9 6 Klasse GrafKonnektor extends score GrafSCM GrafPunkt Diese Klasse stellt einen Konnektor dar Alle drei Typen von Konnektor sind hier zusammengefasst Attribute UNIVERSAL int CONST Konstante f r Universal Konnektoren HISTORY int CONST Kontante f r History Konnek
81. void Schlie t den FileWriter flush void Gibt ein flush an den FileWriter weiter Package score util Kapitel D Programmdokumentation 300 D 16 11 Klasse EasyStringWriter extends score util EasyFileWriter Diese Klasse erweitert den EasyFileWriter derart dass er nicht in ein File sondern in einen String schreibt Konstruktoren EasyStringWriter Erschafft einen neuen EasyStringWriter mit einem leeren Buffer Methoden isFileWriter boolean berschreibt die Methode der Klasse EasyFileWriter Gibt zur ck dass es sich nicht um einen EasyFileWriter handelt doWrite String void berschreibt die Methode der Klasse EasyFileWriter Schreibt den bergebenen String in den Buffer und h ngt ein Leerzeichen an writeln void berschreibt die Methode der Klasse EasyFileWriter Schreibt einen Zeilenumbruch in den Buffer insertFile String gt void berschreibt die Methode der Klasse EasyFile Writer F gt ein File mit dem angegebenen Namen ein Diese Methode ist noch nicht implementiert getString String Gibt den erzeugten String zur ck close void berschreibt die Methode der Klasse EasyFileWriter Setzt die Methode des EasyFileWriters au er Kraft flush void berschreibt die Methode der Klasse EasyFileWriter Setzt die Methode des EasyFileWriters au er Kraft D 16 12 Klasse FlatButton extends javax swing JButton implements java awt ev
82. voll der Knopf des Fensters gedr ckt Ereignis Tk so wird es wieder geschlossen das System bleibt jedoch wegen des History Einstiegs im selben Zustand Durch Leeren der Teekanne Ereignis TkLeer kann das Fenster ebenfalls geschlossen werden das System geht dann wieder in den Zustand leer ber War die Kanne bereits gef llt wenn das Wasser aus dem Ziehbeh lter abflie t so l uft die Kanne ber Dies wird wieder durch eine entsprechende Meldung angezeigt Da auch der Zustand bergelaufen ein Unterzustand von voll ist kann das Fenster ebenfalls durch Dr cken des OK Knopfes geschlossen werden A 1 4 Unterschiede des Modells zur echten Teemaschine Um das Modell einfach zu halten gibt es f r den Wassertank und das Teesieb nur jeweils zwei Zust nde voll oder leer Es ist dadurch nicht m glich den Tank beispiels weise nur zur H lfte zu f llen auch die St rke des Tees kann au er ber die Ziehzeit nicht variiert werden Obwohl es mit der echten Teemaschine nat rlich m glich ist ei ne halbe Kanne sehr starken Tee durchlaufen zu lassen und den Rest dann mit hei em Wasser aufzuf llen kann unser Modell diesen Vorgang nicht nachstellen Mit der Hil fe von Variablen die den F llgrad der einzelnen Teile der Teemaschine angeben lie e es sich entsprechend erweitern wir haben uns jedoch daf r entschieden in diesem Beispiel darauf zu verzichten A 2 Eineinfacher Anrufbeantworter A 2 1 Beschreibung des Systems Dieses Bei
83. von diesem Zustand selbst erzeugt wurde Diese Kon struktion ist also ein Analogon zu einem transienten Zustand also einem Zustand der garantiert im n chsten Zeitschritt verlassen wird wenn die immer wahre Kantenbedingung angegeben ist 1 2 10 Die Sprache der Bedingungen Lg Die Sprache der Bedingungen L y ist eine Sprache der Aussagenlogik Diese besteht wie jede aussagenlogische Sprache aus 1 aussagenlogischen Variablen pn f a mE N 2 den logischen Zeichen und V 3 den technischen Zeichen und 3ansonsten w rde dieser Zustand nie wieder verlassen werden 26 Kapitel 1 Definition von Statecharts Grafische Definition Bemerkungen e Die aussagenlogischen Variablen p repr sentieren den Wahrheitswert von Be dingungen die im Statechart getestet werden sollen wie zum Beispiel die Frage ob ein Zustand aktiv ist e Weitere logische Operationen wie A etc folgern wir aus und V in der blichen Weise 1 3 Grafische Definition In diesem Abschnitt wollen wir die grafische Darstellung der eben eingef hrten Ele mente definieren 1 3 1 Zust nde Abbildung 1 2 Atomarer Zustand mit Identifikation A Zust nde werden durch an den Ecken abgerundete Rechtecke dargestellt Bei atomaren Zust nden enthalten diese nur die Identifikation ansonsten auch die Un terzust nde siehe Abbildungen 1 2 und 1 3 Bei Zust nden vom Typ ANDkann die Identifikation auch direkt ber dem Zustand stehen
84. welche Vorg nge sich automatisieren lassen 3 1 Grafische Editoren 3 1 1 Der Statechart Editor Das wohl grundlegendste Werkzeug bei der Konstruktion von Statecharts ist ein gra fischer Editor der genau auf diese Konstruktionsaufgabe zugeschnitten ist Selbst verst ndlich sollte ein solcher Editor die Grundfunktionen eines Editors besitzen wie etwa Laden und Speichern Hinzuf gen Modifizieren und L schen der Elemente ei nes Statecharts und so weiter F r die unterschiedlichen Editierfunktionen sollte es geeignete Kn pfe geben mit denen der Benutzer das Statechart komfortabel bearbei ten kann Da es bereits eine Vielzahl von guten grafischen Editoren gibt soll hier auf den Aufbau einer leicht benutzbaren Oberfl che nicht weiter eingegangen werden Wir wollen uns stattdessen einigen Details zuwenden die in dieser Form lediglich bei Statechart Editoren auftreten So ist etwa das Speichern und Laden von Statecharts aufwendiger als das von Text oder unabh ngigen grafischen Objekten da Statecharts eine nichtlineare Struktur besitzen Es stellt sich von vornherein das Problem wie die Zust nde und ihre Zusam menh nge im Editor am besten verwaltet werden Die hierarchische Struktur die f r Statecharts typisch ist wird am nat rlichsten durch einen Baum beschrieben Dabei steht allerdings bei keinem Knoten fest wie viele direkte Nachfolger er haben kann Bei atomaren Zust nden die den Bl ttern des Baumes entsprechen gibt es se
85. wenn die bergebeben Koordinaten nicht in diesem Punkt liegen wird SwingConstants TRAILING definiert isSECorner double double int double int Kapitel D Programmdokumentation Package score GrafSCM berschreibt die Methode der Klasse GrafPunkt Gibt 1 zur ck wenn der Punkt in der N he der rechten unteren Ecke liegt 1 wenn das nicht der Fall ist und O wenn dieser Zustand nicht betroffen ist getObjectAt double double int double gt GrafTyp berschreibt die Methode der Klasse GrafPunkt Gibt den grafischen Punkt zur ck der sich an den angegebenen Koordinaten relativ zur linken oberen Ecke dieses Zustands befindet Bei der Suche wird bis in die angegebene Tiefe weiterge gangen Eine Tiefe von 0 hei t dass nur dieser Zustand betrachtet werden soll aber nicht seine Unterzust nde oder Pfeile Gibt Null zur ck wenn kein entsprechendes Objekt gefunden wird getPointOrPartitionAt double double GrafPunkt berschreibt die Methode der Klasse GrafPunkt Gibt den grafischen Punkt an den angegebenen Koordianten zur ck draw int Painter Point2D Double GrafModellSicht gt void berschreibt die Methode der Klasse GrafPunkt Zeichnet diesen grafischen Punkt und Unterzust nde bis zur angegebenen Tiefe Eine Tiefe von 0 hei t dabei dass nur dieser Zustand gezeichnet werden soll Der angegebene Offset ist der Punkt an dem die linke obere Ecke dieses Zustands effektiv gezeichnet werden soll drawArrowsCrossing
86. wie viele Nachrichten bereits aufge zeichnet wurden Kapitel A Beispiele Ein einfacher Anrufbeantworter PlayNr Diese Variable wird nur im Zustand play calls benutzt Hier gibt sie die Nummer der Nachricht an die momentan abgespielt wird Die Ereignisse in diesem Statechart entsprechen den Dialogkomponenten Im ein zelnen sind dies EA das Ereignis dass der Ein Ausschalter gedr ckt wurde STOP entspricht der Stop Taste PLAY wird vom Knopf Abspielen ausgel st played der Timer erzeugt dieses Ereignis wenn die Zeit abgelaufen ist DELETE steht f r das Dr cken des L schen Knopfes CALL signalisiert einen neuen eingehenden Anruf ber den Knopf Neuer Anruf HANGUP gibt dem Anrufbeantworter an dass der Anrufer aufgelegt hat dies wird durch den Knopf Auflegen ausgef hrt Zustand init Dieser Zustand wird nur am Anfang der Ausf hrung einmal betreten und sofort wieder verlassen Er dient dazu die benutzten Variablen zu initialisieren dies geschieht beim Betreten durch die folgenden Aktionen set MaxAnz 3 Der Speicherplatz des Anrufbeantworters wird auf drei Nachrich ten festgelegt set Anrufe 0 Es sind noch keine Nachrichten aufgezeichnet visible Anzahl FALSE Das Textfeld das die Anzahl der eingegangenen Anrufe anzeigt wird deaktiviert so dass der Benutzer hier keine Werte eingeben kann Zustand off Dieser Zustand gibt lediglich an dass der Anrufbeantworter ausgeschaltet ist Er
87. z _ deaktiviert wurde e F r alle i ET ist e ein intern generiertes Ereignis z B durch eine Transition generiert e F r alle i EX ist e ein extern generiertes Ereignis z B durch ein Dialogele ment generiert 1 2 8 Die Menge der Aktionen A Die Menge der Aktionen A a an f r na N na gt ng bezeichnet die im Statechart m glichen Aktionen F r alle i lt ng ist a die Aktion das Ereignis e zu erzeugen Alle a mit i gt ng beschreiben Aktionen die keine Ereignisse erzeugen zum Beispiel das L schen einer History oder Kommunikation mit der Benutzerschnittstelle 1 2 9 Die Menge der Kanten X Eine Kante k K im Statechart wird durch ein Tupel V N e A beschrieben Hier bei ist 0 4 V C Z die Menge der Startzust nde und 0 4 N C Z U H die Menge der Zielzust nde e ist das Ereignis das den bergang ausl st q ist eine aussagenlogische Formel mit q Lg und A CA ist die Teilmenge der dabei erzeugten Aktionen Definition bergangsbedingung Ein bergang findet in einem Zeitschritt statt gdw e ist eingetreten alle v V sind aktiv und ist erf llt Integrit tsbedingungen f r einen bergang Kantenanfang von einem Unterzustand Wenn V gt 1 dann ex z Z so dass Yv E V v E o z und es gilt 1 20 Yw EV vE T z Aw E T z Av w gt i j wobei n 2 Ti 2 Th 2 Das hei t Wenn es mehr als einen Startzustand gibt dann existiert ein g
88. 1 verweist Dies gibt an dass der eingef llte Tee zum ersten Mal benutzt wird Beim Eintreten des Ereignisses Wasser zur Teekanne WzTk wird der Zu stand zieht wieder verlassen und der Zustand alt betreten Dadurch wird angezeigt dass der Tee im Ziehbeh lter nicht mehr frisch ist Wird das Ereignis WzZ ausgel st w hrend dieser Zustand aktiv ist wird der Zustand x betreten der ein Unterzustand von zieht ist der Tee wird nicht zum ersten Mal verwendet Auch dieser Zustand wird durch das Ereignis WzTk verlassen Wird im Zustand alt das Ereignis Tee ausgel st ist damit der Tee wieder entfernt und das System geht in den Zustand leer ber Solange sich Wasser im Ziehbeh lter befindet kann Tee weder eingef llt noch entfernt werden das hei t das Ereignis Tee kann nicht ausgel st werden Dies wird in Partition 5 dadurch gel st dass die entspre chende Checkbox des Benutzerdialogs unsichtbar gemacht wird Partiton 5 Wasser im Ziehbeh lter Zun chst ist kein Wasser im Ziehbeh lter Wenn jedoch das Ereignis Wasser zum Ziehbeh lter WzZ ausgel st wird wird er durch das Wasser aus dem Tank gef llt In diesem Moment wird die Stoppuhr f r die Ziehzeit gestartet Da der Ziehbeh lter nun voll ist kann momentan kein Tee entfernt oder eingef llt werden daher wird die Kapitel A Beispiele WassetmZiebehalter voll erter visibbelff lse exitvisibledd rue TI WZTk Abbildung A 8 Die Parti
89. 17 1 Klassenhierarchie java lang Object gt score Verifikator VProperties gt score Verifikator VProperty Window gt score Verifikator VWindow gt score Verifikator VWindow VerifMesg gt score Verifikator Verifikator D 17 2 Klasse Verifikator extends java lang Object Der Verifikator f hrt die berpr fungen des Statecharts durch Die einzelnen Routinen sind in privaten Methoden abgelegt Welche Tests ausgef hrt werden wird aus den VProperties die beim Erschaffen bergeben werden ausgelesen 309 Package score Verifikator Kapitel D Programmdokumentation Konstruktoren 310 Verifikator VProperties GrafSCModell LogDModell Erschafft einen neuen Verifikator und beginnt die berpr fung mit der in den bergebenen VPro perties gesetzten Auswahl Methoden wasOKlastTime GrafSCModell LogDModell boolean Gibt zur ck ob das bergebene Grafische Modell in Ordnung war Wenn es sich seit dem letzten Test nicht ge ndert hat wird kein erneuter Test durchgef hrt D 17 3 Klasse VProperties extends java lang Object In dieser Klasse werden die Einstellungen f r einen Testlauf gespeichert Attribute option boolean voreingestellte Auswahl der Test Optionen lab String CONST Namen der Text Optionen KEEP_GOING int CONST Kennzeichner der einzelnen Test Optionen DO_DEF_ENTRIES int CONST Kennzeichner der einzelnen Test Optionen DO_HISTORY int CONST Kennzeichner der
90. 6 8 Klasse Dimension s sss 2 2 000 2a keri na na 298 D 16 9 Klasse Dimension Double 298 D 16 10 Klasse EasyFileWriter o 299 D 16 11 Klasse EasyStringWriter 300 D 16 12 Klasse FlatButton 300 D 16 13 Klasse FlatRadioButton o 300 D 16 14 Klasse Intersect sse 28 82 8a a ra 301 D 16 15 Klasse La TEX Sting iaa ade 301 D 16 16 Klasse MetaPostGraphics o 301 D 16 17 Klosse NumPield i oau a see era 303 D 16 18 Klasse Observable o 303 D 16 19 Klasse Pait ocacion 22a ana rei 304 D 16 20 Klasse Scale coco cisco a re 304 D 16 21 Klasse StrmpChesk os 08 ecs 2 we ne a see 305 D 16 22 Klasse TextEditField 2 20 scada 05 305 D 16 23 Klasse Triplet lt a ooe 2 u 0 00 2 00 wu 0 a u E 306 D 16 24 Klasse UndoSt ck 2 cu sa 2a su ta san aa 306 D 16 23 Klasse VerAnithmetik 4 4 8 44 22 4a adden 307 D 16 26 Klasse ZoomGraphics o 307 D 17 Package score Verifikator co eo ca conres caera Eiga 309 D 17 1 Kl ssenhierarchie s gt s gt sosser 02 02 0 00 309 D1N2 Klasse Verhkator 2 uw ann ae as Ra 309 D 17 3 Klasse VPropertles e eso coo ss 310 D 17 4 Klasse VPropertyWindow 2 2 2222 onen 310 D 17 3 Klasse VWindow u a a raaa das 311 D 17 6 Klasse VWindow VerifMesg 2 22222200 311 E Aufteilung dieser Arbeit 313 Abbildungsverzeichnis 317 D
91. A Abbildung 1 3 Zusammengesetzter Zustand Typ OR Die Partitionierung der zusammengesetzten Zust nde vom Typ AND werden durch gestrichelte Linien an den Partitionsgrenzen dargestellt siehe Abbildung 1 4 Keine zwei Zust nde d rfen sich berlappen und kein Zustand darf eine Partitions grenze schneiden Dies entspricht der formalen Definition der Eindeutigkeit des Ober zustands siehe Gleichung 1 2 sowie der disjunkten Zerlegung von Unterzust nden durch siehe Abschnitt 1 2 4 27 28 Grafische Definition Kapitel 1 Definition von Statecharts Abbildung 1 4 Zusammengesetzter Zustand mit Partitionierung Typ AND Ereignis Bed Aktion Abbildung 1 5 Ein einfacher bergang von A nach B 1 3 2 berg nge Die berg nge werden durch Pfeile zwischen den Zust nden dargestellt Die Pfeile sind beschriftet mit Ereignis Bedingung Aktion siehe Abbildungen 1 5 und 1 7 Wenn die Bedingung die immer wahre Bedingung ist kann sie mit den Klammern ent fallen Wenn die auszuf hrende Aktionsmenge leer ist kann sie mit dem Schr gstrich auch entfallen Die Pfeile d rfen keine Partitionsgrenzen schneiden Sie d rfen Zustandsr nder nur dann schneiden wenn sie einen inneren Zustand eines zusammengesetzten Zu stands erreichen wollen oder von einem solchen ausgehen Zur Erl uterung betrachten wird die Abbildung 1 6 Die Transition unter dem Ereignis El ist fehlerhaft denn
92. A ia 2 7 Aktionen Ze sw Dar a ern be a 28 DEE ZEIBEEN o sss a de a a a a i 2 81 Kontinuierlich synchron oder asynchron 2 8 2 Delays und Time Outs 2 2 2 2 Connor Werkzeuge f r Statecharts Grahsche Editoren eoe oa sea DA A da DA AL A E La Der Statechart Editor o ooo o 3 1 2 Der Diatog Editar 2 22 222 208 e pa io iea 3 13 Der Programmstruktur Editor 32 Tester oo 24 6 2 e we a er ae 3 Der Veribkalat sae ans fe sa en ee S 3 2 2 Der Simulator ae e si wa e a e 33 Aufomalsmen ess 34 a rie 2a sa a a a 33 Der Opfer es aso 2 20 un ac he a 3 32 Der Quelltext Generator ooo Grundlagen von SCed Die implementierte Fassung Al BEmleit ng 4 08 era ee 42 Die Grundelsmenle oy aa ac ad area 4 2 1 Zust nde a ran wre ea ee S 4 2 2 Bonner eo ee a usa Beine 4 2 3 Ereignisse Aktionen und Bedingungen 4 2 4 Die Variablen 2 222 ines idas ea a 4 2 5 DIDI ne a aan ee es are 43 Die Dialoge oo cosita a a i Benutzerhandbuch Sd Installation cocida aa aa E E 5 2 berblick ber das Programm SCed 2 2 222 22 3 3 Derlispeki f 24 2 4 2 202 da 0a a aE a a a a dl Inspektor f r einen Zustand 2 2 2200 nenn NETOS Inspektor f remen Pfeil ooon sr sc con 004 57 57 57 66 69 71 71 77 83 83 86 91 93 93 93 93 97 97 101 102 102 3 3 Inspektor f r einen Text o 5 3 4 Weitere Elemente im Inspektor 3 33 Men
93. ATCOND_COMP_VAR int CONST Kosntante falls es sich um eine CompVar Bedingung handelt Konstruktoren BedAtomar int Setzt den Typ f r die neu erschaffene Bedingung delete void berschreibt die Methode der Klasse Bedingung L scht diese atomare Bedingung d h sie wird aus dem Vector entfernt getID gt int Gibt den Identifier dieser Bedingung zur ck getAtomType int Gibt den Typ der Bedingung zur ck save EasyFileWriter void berschreibt die Methode der Klasse Bedingung Speichert die Bedingung im EasyFileWriter Muss entsprechend implementiert werden exportAtom EasyFileWriter void Exportiert den Quelltext dieser atomaren Bedingung in den EasyFileWfriter Muss entsprechend implementiert werden exportQT EasyFileWriter void berschreibt die Methode der Klasse Bedingung Exportiert diese Bedingung in den EasyFileWriter Diese Methode wird im Zusammenhang mit der switch Anweisung benutzt die s mtliche auch komplexen Bedingungen f r die Pfeile ex portiert F r eine atomare Bedingung entspricht dies lediglich einem Aufruf der entsprechenden switch Anweisung der atomaren Bedingungen Der eigentliche Export geschieht in der Methode exportAtom startExport void Initialisiert den Export d h es wird zun chst keine Bedingung f r den Export markiert exportAll EasyFileWriter void Exportiert alle Bedingungen die vorher zum Export markiert wurden indem ihre
94. CModell gt void berschreibt die Methode des Observable indem der Aufruf an den enthaltenen virtuellen Ober zustand weitergereicht wird replaceObservable Observable Observable boolean Implementation des Observer Interfaces getLogic gt LogSCModell Gibt das zugeh rige logische Statechart Modell zur ck getTopLevelState GrafTopLevelZust Gibt den virtuellen Oberzustand zuriick getView int GrafModellSicht Gibt eine Sicht auf den angegebenen Zustand zur ck Ist dies kein Zustand wird Null zur ckge geben Die Sicht wird mit der maximalen Tiefe des Zustands initialisiert getView int int GrafModellSicht Gibt eine Sicht auf den angegebenen Zustand zur ck die mit der bergebenen Tiefe initialisiert wird getViewOfActive GrafModellSicht Gibt eine Sicht auf das momentan aktive Objekt zur ck Ist dies kein Zustand wird Null zur ck gegeben getView gt GrafModellSicht Gibt eine Sicht auf das gesamte Statechart zur ck getAll Vector Package score GrafSCM 239 Package score GrafSCM Kapitel D Programmdokumentation 240 berschreibt die Methode der Klasse AbstractModell Gibt einen Vector aller grafischen Punkte und grafischen Pfeile zur ck Der virtuelle Oberzustand ist darin nicht enthalten editedSinceChecked boolean Gibt an ob im Grafischen Modell seit der letzten berpfr fung nderungen vorgenommen wur den editedSinceChecked boolean gt boolea
95. Das entsprechende wird beim logishen Punkt wiederholt redirectArrowsTo GrafPunkt void Lenkt Pfeile die vorher bei diesem Punkt anfingen oder aufh rten auf einen anderen Punkt um addHook GrafHook gt void F gt einen Hook zu diesem Punkt hinzu removeHook GrafHook void Entfernt einen Hook aus diesem Punkt getPosOfNeighbours GrafModellSicht Vector Gibt die Zeichenkoordinaten der Nachbarknoten dieses Punktes zur ck getPosOfOwnHooks GrafModellSicht gt Vector Gibt die Zeichenkoordinaten der Hooks zuriick die auf diesem Punkt liegen Die Reihenfolge entspricht der von getPosOfNeighbours getPosOfCrossingPairs GrafModellSicht Vector Gibt einen Vector zuriick der in Paaren die Zeichenkoordinaten der Hooks enth lt deren Verbin dung die Grenzen dieses States schneidet getHooksJustOutside Vector Gibt einen Vector von Hooks zur ck die gerade au erhalb dieses GrafPunktes liegen addHooksJustOutside Vector GrafPunkt gt void F gt zum bergebenen Vector die Hooks hinzu die gerade au erhalb des bergebenen GrafPunk tes liegen getOwnHooks gt Vector Gibt alle Hooks zur ck die auf dem Rand dieses Zustands liegen isIn double double gt boolean Testet die Koordinaten die bez glich dieses Punktes angegeben sind Diese Funktion erzeugt kein neues Objekt getObjectAt double double int double GrafTyp Gibt den grafischen Punkt zuriick der sich an den angegebenen Koo
96. Dekrement Schrittweite setzen actionPerformed ActionEvent gt void Die Nummer nach ButtonKlick setzen addActionListener ActionListener void Einen ActionListener eintragen setActionCommand String void Das ActionCommand setzen removeActionListener ActionListener void Einen ActionListener austragen D 16 18 Klasse Observable abstrakte Klasse extends java lang Object Diese abstrakte Klasse ersetzt die entsprechende Klasse java util Observable und erweitert sie um zus tzliche Zugriffsmethoden auf die Observer Insbesondere ist dies die Methode replaceBy die dem Observer mitteilt dass dieses beobachtete Objekt durch ein anderes zu ersetzen ist Au erdem gibt es die Methode delete die den Observern analog mitteilt dass dieses Objekt zu entfernen ist addObserver Observer void F gt einen Observer zu diesem Observable hinzu hasChanged boolean 303 Package score util Kapitel D Programmdokumentation 304 Gibt zur ck ob sich dieses Observable ge ndert hat setChanged void Setzt die Angabe dass sich dieses Observable ge ndert hat setObserversChanged void Setzt die Angabe dass sich dieses Observable ge ndert hat F r den Fall dass ein Observer wieder Observable ist wird dieser Aufruf in der Hierarchie nach oben durchgegeben clearChanged void Setzt die Angabe dass sich dieses Observable nicht ge ndert hat countObservers int Gibt die
97. Der Konstruktor inizialisiert die Sammlungen der eingehenden und ausgehenden Verbindungen von denen anfangs noch keine vorhanden sind Der Typ dieser abstrakten Klasse wird auf einen ung ltigen Wert gesetzt Der Identifier wird mit dem n chsten Wert initialisiert LogPunkt LogPunkt Dieser Konstruktor ersetzt einen logischen Punkt in jeglicher Hinsicht durch einen neuen Der einzige Unterschied zwischen den beiden Punkten ist der Typ der bei dem neuen Zustand noch auf einen ung ltigen Wert gesetzt ist Der neue Punkt wird mit dem alten Identifier in allLogPunkt eingef gt LogPunkt int LogPunkt Erschafft einen LogPunkt als Oberklasse des SimBasic in der Simulation Der LogPunkt wird in diesem Fall nicht zum Hashtable der LogPunkte hinzugef gt getLogPunkt int LogPunkt Gibt den logischen Punkt mit der angegebenen Nummer zuriick Wenn kein solcher Punkt exi stiert wird Null zur ckgegeben getAll gt Collection Gibt eine Collection mit allen logischen Punkten zur ck getAllStatesWithHistory boolean Vector Liefert Vector aller Zust nde mit History bzw DeepHistory swapldents LogPunkt LogPunkt void Vertauscht Identifier von zwei logischen Punkten getlD gt int Gibt den Identifier dieses logischen Punktes zur ck getldent gt String 265 Package score LogSCM Kapitel D Programmdokumentation 266 Gibt eine eindeutige lesbare Bezeichnung dieses logischen Punktes zur ck
98. DlgKomponente Erstellt eine grafische Komponente save EasyFileWriter void berschreibt die Methode der Klasse D gKomponente Speichert den Button setLabel String void berschreibt die Methode der Klasse DlgKomponente Setzt den Label des Buttons exportQT EasyFileWriter gt void berschreibt die Methode der Klasse D gKomponente Exportiert den Quelltext D 10 5 Klasse DIgCheckbox extends score LogDM DlgKomponente Eine Checkbox Konstruktoren DigCheckbox Kontruktor mit DefaultAktion DigCheckbox String Konstruktor setzt den Label Methoden setVisible boolean void 251 Package score LogDM Kapitel D Programmdokumentation berschreibt die Methode der Klasse D gKomponente Setzt sichtbar oder unsichtbar setOn gt void berschreibt die Methode der Klasse DlgKomponente Setzt die Checkbox auf selected setOff gt void berschreibt die Methode der Klasse D gKomponente Setzt die Checkbox auf deselected isSelected boolean Pr ft ob die Checkbox selected ist toString String berschreibt die Methode der Klasse D gKomponente Gibt einen String mit CHECKBOX ID und Label aus createComponent Component berschreibt die Methode der Klasse D gKomponente Erzeugt eine Java Checkbox save EasyFileWriter gt void berschreibt die Methode der Klasse D gKomponente Speichert die Checkbox setLabel String void berschreibt die Method
99. ERBAR esca a e eh 6 8 Das Kommandointerface Laden und Speichern 59 AMD u a week a da a a e II Anhang Beispiel und Programmdokumentation A Beispiele Al Die Teemaschid uc ca es eante ga iaa ee A 1 1 Beschreibung des Systems Inhaltsverzeichnis 109 109 110 112 112 115 118 118 119 120 120 121 122 123 125 126 126 126 127 127 127 128 135 135 135 135 137 138 141 142 143 144 144 145 147 149 149 150 150 153 Inhaltsverzeichnis B C D A 1 2 Elemente des Dialogs lt lt A 1 3 Umsetzung in ein Statechart A 1 4 Unterschiede des Modells zur echten Teemaschine A 2 Ein einfacher Anrufbeantworter o 22 2 o o A 2 1 Beschreibung des Systems A 22 ElementedesDialogs 2 22 22 eaae A 2 3 Umsetzung in ein Statechalt gt o sa ec casae ioa A 2 4 M glichkeiten der Verfeinerung Pflichtenheft Bi Zi elbes mmu ng s c sanii ranea a a a are B l l Muss Kriterien oaoa ea ea naar B 1 2 KannKriterien 2 2 0 doi aea va do eoa B 1 3 Abgrenzungskriterien 2 2222 Be ESM ge a ee en ante er B 2 1 Anwendungsbereiche B22 ZIDE o e ws 3 ana irradia A B3 Umgebung a ee B31 SoftWare u ee ds dd B32 Hardware 20 0 8 02 00 ds a AAA Grammatik des Datenformats Programmdokumentation PA a AIN D 1 1 Klassenhierarchie u er na n
100. Ereignis gt score util Observable gt score Ereignisse EreignisEdit gt score Ereignisse InlineEventDialog gt score Ereignisse EventDialog D 8 2 Interface EventAskable Dieses Interface wird von der Klasse implementiert die den Ereignissen sagt ob sie gerade eingetreten sind occurred Ereignis gt boolean Gibt true zur ck wenn dieses Ereignis gerade eingetreten ist D 8 3 Klasse Ereignis extends score LogSCM LogComponent implements java lang Comparable Diese Klasse stellt ein Ereignis dar Attribute ask EventAskable Das Interface bei dem Ereignisse anfragen k nnen ob sie gerade eingetreten sind Konstruktoren Ereignis String Kapitel D Programmdokumentation Package score Ereignisse Erschafft ein neues Ereignis mit dem angegebenen Namen delete void berschreibt die Methode der Klasse Observable L scht dieses Ereignis aus dem Hashtable aller Ereignisse und l st ein Refresh aus getAll Vector Gibt einen Vector aller Ereignisse zur ck getlD gt int Gibt den Identifier dieses Ereignisses zur ck compareTo Object int Implementiert das Comparable Interface getEvent int Ereignis Gibt das Ereignis mit dem angegebene Identifiert zur ck setName String gt void Setzt den Namen dieses Ereignisses getName String Gibt den Namen dieses Ereignisses zuriick provideAnswers EventAskable void Setzt die Klasse die ang
101. Ereignissen und Aktionen zusam mengefasst werden k nnen Sollen sie dennoch in das Statechart integriert werden gibt es nur eine L sung der Benutzer muss die M glichkeit erhalten auch beliebigen Quelltext in das Statechart eingeben zu k nnen Hierf r bietet es sich an eine Gruppe von Aktionen Bedingungen und eventuell Ereignissen einzuf hren deren Funktionen vom Benutzer frei programmiert werden k nnen Der Code einer Aktion wird dann 65 66 Grafische Editoren Kapitel 3 Werkzeuge f r Statecharts ausgef hrt wenn diese Aktion aufgerufen wird derjenige einer Bedingung wird be nutzt um den Wahrheitswert der Bedingung festzustellen und durch so programmierte Ereignisse k nnen dem System nderungen an berwachten Eigenschaften oder Kom ponenten melden Wird Quelltext im Statechart erlaubt so stellt sich jedoch die Frage wo er benutzt wird Bietet das System die M glichkeit das konstruierte Statechart zu simulieren so k nnte der Quelltext bereits dabei benutzt werden Kann aus dem Editor heraus ausf hrbarer Programmtext erzeugt werden der dem Statechart entspricht so sollte insbesondere hierbei explizit eingegebener Quelltext beachtet werden Die M glich keiten und Probleme die sich daraus ergeben sollen im Zusammenhang mit den ent sprechenden Werkzeugen in Abschnitt 94 f r die Simulation beziehungsweise Ab schnitt 3 3 2 f r den Quelltextexport genauer betrachtet werden In den folgenden Abschnitten wollen wir
102. Eric R Schellhammer und Benjamin B Hargarten Werkzeuge zur Entwicklung von Statecharts f r interaktive Systeme Diplomarbeit im Studiengang Mathematik mit Studienrichtung Informatik schell informatik uni hannover de hargarten informatik uni hannover de Universit t Hannover Institut f r Informatik Fachgebiet Datenbanken und Informationssysteme Pr fer Prof Dr U Lipeck Zweitpr fer Prof Dr R Parchmann 5 Oktober 2000 Erkl rung Hiermit versichern wir dass wir diese Arbeit selbst ndig verfasst haben und keine anderen als die angegebenen Quellen und Hilfsmittel verwendet wurden Hannover 5 Oktober 2000 Eric R Schellhammer Hannover 5 Oktober 2000 Benjamin B Hargarten Now hear me speak with a prophetic spirit Shakespeare King John Inhaltsverzeichnis I 1 2 Diskussion der Statecharts vom theoretischen Standpunkt 15 Definition von Statecharts 17 1 1 Grundlegende Definitionen os cs 2 o nennen 17 1 11 F st nde css da res iaa A A 18 1 1 2 berg nge Transitionen o o 19 1 2 Formale Denit s sasos soa a near A 19 1 2 1 SECDE u u a ee dd 20 1 2 2 Die Menge der Zust nde Z o o 20 1 2 3 Die Unterzustandsfunktion 2 2 222000 20 1 2 4 Die Partitionsfunktion TT 2 2 2 520 2 aa 22 125 Die Defaulteinstiegsfunktion d 24 1 2 6 Die Historyfunktion h und die Menge der Historyeinstiege H 24 1 2 7 Die Menge der Ereignisse E
103. Erstellt einen neuen Stack mit maximaler Kapazit t maxSize Methoden push Object gt Object berschreibt die Methode der Klasse Stack F gt ein Objekt in den Buffer clearBuffer void L scht den Buffer isBufferEmpty boolean Pr ft ob der Buffer Empty ist setMaxSize int void Setzt die maximale Stackgr e trimSize gt void Setzt die ggf die Gr e commit gt void F gt den Buffer in den Stack Kapitel D Programmdokumentation D 16 25 Klasse VecArithmetik extends java lang Object Diese Klasse stellt einige Funktionen zum Rechnen mit Vektoren zur Verf gung sub Point Point Point Subtrahieren add Point Point Point Addieren add Dimension Double double Dimension Double Addieren add Dimension Double Dimension Dimension Double Addieren add Dimension Double Dimension Double Dimension Double Addieren closerThan Point2D Double Point2D Double double boolean Gibt zur ck ob der Euklidische Abstand der beiden Punkte weniger ist als epsilon closerThan Point2D Double double double double boolean Gibt zur ck ob der Euklidsche Abstand zwischen Punkt und Koordinaten weniger ist als epsilon putOntoCircle Point2D Double Point2D Double double Point2D Double Gibt den Punkt auf dem Kreis zur ck der dem bergebenen Punkt am n chsten ist Parameter loc Punkt der verlegt werden soll center Mittelpunkt
104. Es ist allerdings nicht notwendig den Quelltext der Aktionen in der Simulation auszuf hren um diese Unstimmigkeiten zu vermeiden Vielmehr sollte darauf geach tet werden dass in den Quelltext von Aktionen keine Befehle eintragen werden die das Statechart beeinflussen sondern nur solche die sich auf den Rest des Systems aus wirken M ssen Variablen oder Bedingungen in ihrem Wert ge ndert werden so sollte dies nicht Teil der externen Aktion sein sondern als zus tzliche interne Aktion spe zifiziert werden Auf diese Weise entspricht die Simulation dem erzeugten Quelltext ohne dass der Benutzer externe Aktionen selbst ausf hren m sste 3 3 Automatismen 3 3 1 Der Optimierer Eine wiinschenswerte Funktion im t glichen Entwurf ist es vorhandene manuelle Entw rfe automatisch zu optimieren Zuerst muss man hier definieren was man un ter Optimieren versteht In Abgrenzung zur automatischen Generierung soll die Op timierung ein bereits vorhandenes Statechart in ein funktions quivalentes Statechart berf hren welches bez glich eines Optimierkriteriums besser oder gar optimal ist Optimierkriterien k nnen sein e Anzahl der Zust nde L nge der Kanten Fl che des Statecharts Tiefe des Statecharts Anzahl der verwendeten Variablen Weitere Kriterien sind denkbar Zu Beachten ist hier eine Unterscheidung zwi schen Optimierungen des logischen Aufbaus und Optimierungen des grafischen Lay outs Optimierung des grafischen
105. File output 1 geschrieben Diese Ausgabe findet im METAPOST Format statt 2siehe hierzu Abschnitt 5 11 110 Kapitel 5 Benutzerhandbuch Der Inspektor Quit Alt Q Beendet das Programm Das Edit Men Das Edit Men bietet die folgenden Aktionen Undo Alt U Nimmt die letzten nderungen im Statechart oder im Dialog zur ck Wenn diese Funktion nicht ausgew hlt werden kann ist dieser Men eintrag de aktiviert Redo Alt Shift U Stellt die letzten zur ckgenommenen nderungen im Statechart oder im Dialog wieder her nderungen die nach dem letzten Undo vorgenom men wurden werden dabei allerdings berschrieben k nnen aber mittels Undo wieder hergestellt werden Wenn diese Funktion nicht ausgew hlt werden kann ist dieser Men eintrag deaktiviert Align Size Mit dieser Funktion werden alle momentan markierten Konnektoren auf die gleiche Gr e gebracht SCed orientiert sich dabei am kleinsten der markier ten Konnektoren Sind weitere Elemente markiert bleiben diese unber hrt Insert Radiobuttons Mit diesem Men eintrag wird ein Makro angesteuert das eine vom Benutzer w hlbare Anzahl von Radiobuttons sowohl in den Dialog als auch in das Statechart einf gt Ereignisse und Aktionen werden entsprechend erzeugt und gesetzt Insert Checkboxes Mit diesem Men eintrag wird ein Makro angesteuert das eine vom Benutzer w hlbare Anzahl von Checkboxes sowohl in den Dialog als auch in das Statechart einf gt Ereignisse und A
106. Front void Holt das Fenster nach vorne print void Canvas drucken updatePanePositionLabel void Aktualisiert den Label mit der relativen Position des Feldes init void Initialisiert die Komponenten des Editors initPane JPanel Erstellt die Panel und das grafische Layout getViewName String Liefert die Nummer dieser Ansicht setNewModell GrafSCModell void Ein neues grafisches Modell f r diesen Editor setzen windowActivated WindowEvent gt void berschreibt die Methode der Klasse WindowAdapter berschreibt den WindowAdapter Aktualisiert die ToolLeiste windowClosing WindowEvent void berschreibt die Methode der Klasse WindowAdapter berschreibt den Window Adapter dipose dispose void L scht den Eintrag im MainWindow toolCommand Point Point void F hrt ein Werkzeug Kommando aus toolCommand GrafTyp GrafTyp Point2D Double Point2D Double void F hrt ein Werkzeug Kommando aus toolCommand Partitioner void F hrt ein Werkzeug Kommando aus toolCommand GrafPunkt void F hrt ein Werkzeug Kommando aus toolCommand Point GrafZustand void F hrt ein Werkzeug Kommando aus toolCommand Point GrafTyp void Fiihrt ein Werkzeug Kommando aus toolCommand Dimension Double GrafPunkt void F hrt ein Werkzeug Kommando aus toolCommand Point boolean void Fiihrt ein Werkzeug Kommando aus printError String void E
107. GrafModellSicht void Die Sicht neu setzen update Observable Object void Auf eine Modell nderung reagieren neuzeichnen D 13 14 Klasse SCEditor extends java awt event WindowAdapter implements score util ErrorPrinter Der Editor f r das grafische Statechartmodell Kapitel D Programmdokumentation Package score SCEditor Attribute viewNumber int Laufende Nummer dieser Ansicht nfDrawDepth NumField Feld in dem die Darstellungstiefe verwaltet wird nfZoom NumField Feld in dem die Darstellungstiefe verwaltet wird father MainWindow Riickw rtsreferenz auf das Hauptfenster editFrame J Frame Frame in dem der Editor dargestellt wird gscv GrafModellSicht Grafische Modellsicht canvas SCCanvas Die Scrollebene cbGrid JCheckBox CheckBox f r das Gitter cbHooks JCheckBox CheckBox f r das Gitter cbIDs JCheckBox CheckBox f r das Gitter cbLabel JCheckBox CheckBox f r das Gitter TOOLCOUNT int CONST Konstante f r die Anzahl m glicher Werkzeuge TOOL_CURSOR int CONST Symbolische Konstante f r das Werkzeug TOOL_STATE int CONST Symbolische Konstante f r das Werkzeug TOOL_VPARTITIONER int CONST Symbolische Konstante f r das Werkzeug TOOL_HPARTITIONER int CONST Symbolische Konstante f r das Werkzeug TOOL_ARROW int CONST Symbolische Konstante f r das Werkzeug TOOL_REFLEXIV int CONST Symbolische Konstante f r das Werkzeug TOOL_DEFAULT_CONNECTOR int CONST
108. GrafPunkt Gibt den GrafPunkt an der angegebenen Position zuriick diese Methode erwartet unskalierte Mauskoordinaten getPointAt Point GrafPunkt Gibt den GrafPunkt an der angegebenen Position zuriick diese Methode erwartet unskalierte Mauskoordinaten getPointAt Point2D Double double GrafPunkt Gibt den Zustand zur ck der sich an den angegebenen Zeichenkoordinaten befindet Ist das Ob jekt kein Zustand oder wird kein Objekt gefunden wird Null zur ckgegeben getPointAt Point2D Double gt GrafPunkt Gibt den grafischen Punkt zur ck der sich an den angegebenen Zeichenkoordinaten befindet Wird eine Partition gefunden so wird der zugeh rige AND Zustand zur ckgegeben getPointOrPartitionAt Point2D Double GrafPunkt Gibt den grafischen Punkt zuriick der sich an den angegebenen Zeichenkoordinaten befindet Hierbei werden auch Partitionen beachtet getKoordsOfSub Point2D Double GrafPunkt Point2D Double Gibt die Zeichenkoordinaten eines Punktes zuriick der in lokalen Koordinaten von point angege ben ist getLocalOffset Point Point2D Double Gibt den Offset zur ck den der bergebene unskalierte Punkt im untersten sichtbaren Zustand hat getLocalOffset Point2D Double gt Point2D Double Gibt den Offset zur ck den der bergebene Punkt im untersten sichtbaren Zustand hat localizeToSub Point2D Double GrafPunkt Point2D Double 229 Package score GrafSCM Kapi
109. GrafTyp void Setzt die Referenz dieses GrafTextes setReference GrafTyp Point2D Double void Setzt die Referenz und den Offset dieses GrafTextes draw Painter Point2D Double GrafModellSicht void Zeichnet diesen GrafText in den bergebenen Painter der bergebene Offset ist die Position der Referenz saveAll EasyFileWriter void Speichert alle GrafTexte save EasyFileWriter void Speichert diesen GrafText D 9 14 Klasse GrafTopLevelZust extends score GrafSCM GrafZustand Diese Klasse ist der virtuelle Oberzustand der schon bei leerer Zeichenfl che vorhanden ist Konstruktoren GrafTopLevelZust Erschafft einen neuen Zustand mit der Gr e 0 getView GrafModellSicht berschreibt die Methode der Klasse GrafZustand Gibt eine neue Sicht auf den Oberzustand zur ck F r diesen Zustand werden die Einstellungen nicht gespeichert isin double double boolean berschreibt die Methode der Klasse GrafPunkt Gibt immer true zur ck da nach definition jeder Wert in diesem Zustand enthalten ist getObjectAt double double int double GrafTyp 241 Package score GrafSCM Kapitel D Programmdokumentation 242 berschreibt die Methode der Klasse GrafZustand Gibt den grafischen Punkt zur ck der sich an den angegebenen Koordinaten befindet Bei der Suche wird bis in die angegebene Tiefe weitergegangen Eine Tiefe von 0 hei t dass nur die Zust nde auf oberster Ebene b
110. Inc Variable Diese Aktion erh ht die Variable um den angegebenen Wert Auch ne gative Werte sind m glich Bei Zeichenkettenvariablen wird die Zeichenkette an die vorhandene Variable angeh ngt Set Variable Diese Aktion setzt eine Variable auf einen Wert Der Typ der Variablen String Integer oder Double kann beliebig wechseln und wird wenn m glich entsprechend konvertiert Set Dialog Element Visible Diese Aktion macht eine Dialogkomponente sichtbar oder unsichtbar Der Timer ignoriert diese Aktion Dialog On und Off Diese Aktion schaltet eine Dialogkomponente an oder aus Was dies bedeutet h ngt von der Dialogkomponente ab Timer Beim Timer wird mit dieser Aktion der Timer gestartet bzw gestoppt Checkboxes und Radiobuttons Diese Komponenten werden mit der On Off Aktion selektiert oder deselektiert 122 Kapitel 5 Benutzerhandbuch Der Simulator alle anderen Komponenten ignorieren diese Aktion Sollte aus diesem Fenster eine Aktion zum L schen ausgew hlt werden so wird gepr ft ob diese Aktion von Komponenten noch benutzt wird Wenn dies der Fall ist wird eine entsprechende Warnung ausgegeben Wird die Aktion trotzdem gel scht so wird sie automatisch auch aus allen Komponenten ausgetragen die sie benutzen El Action Properties ctian Type Set Variable Variable Var Cancel Ok Abbildung 5 16 Das Aktionen Eigenschaftsfenster Wenn eine neue Aktion erzeugt oder eine vorhandene ed
111. Konnektor modelliert werden kann wenn sie berhaupt notwendig sein sollte l Dies wird auch schon in Schu99 gefordert vgl beispielsweise dort S 182 Das genannte Problem l sst sich auf das Erf llbarkeitsproblem der Aussagenlogik SAT zur ckf hren das nach dem Satz von Cook NP vollst ndig ist vgl zum Beispiel Sch93 S 149 Es sei hier noch erw hnt dass auch das UML Werkzeug Rose der Rational Software Cooperation diese Fragestellung nicht berpr ft vgl Schu99 S 185 Kapitel 3 Werkzeuge f r Statecharts Gl cklicherweise ist es einfacher zu berpr fen ob von einem Zustand mehre re Verbindungen ausgehen die von demselben Ereignis ausgel st werden Ist dies der Fall kann zumindest eine Warnung an den Benutzer weitergegeben werden Wenn die ser dann feststellt dass sich die angegebenen Bedingungen gegenseitig ausschlie en und das System deshalb durchaus deterministisch ist kann er die Warnung beiseite legen Dass diese Frage bei gr eren Statecharts allerdings weniger offensichtlich sein kann als es zun chst klingt soll das folgende Beispiel darstellen So kann etwa in Ab bildung 3 6 der Zustand C niemals erreicht werden weil bei Eintreten des Ereignisses e der Zustand A bereits verlassen wird J N A Abbildung 3 6 Konflikte bei identischen Ereignissen Dieses Beispiel f hrt direkt auf die umfassendere Frage ob alle Zust nde des Statecharts erreichbar sind Zu ihrer Beantwortung muss
112. Layouts Unter der Optimierung des grafischen Layouts verstehen wir die Anordnung der Komponenten des Statecharts auf minimaler Fl che Da jedoch die Elemente des Statecharts per definition erst einmal gar keine Gr e haben m ssen sondern nur Re pr sentationen eines logischen Modells sind mu man Ihnen zu Beginn einer solchen Optimierung minimale Dimensionen zuweisen Dann wiederum ist dieses Problem je doch weitgehend quivalent zu dem Problem des automatischen Schaltungsentwurfs 83 Automatismen Kapitel 3 Werkzeuge f r Statecharts und es gibt damit ein gut erforschtes Gebiet dessen Methoden und Ergebnisse hierauf angewendet werden k nnen Ein Beispiel zeigt Abbildung 3 10 Abbildung 3 10 Optimierung des grafischen Layouts Optimierung des logischen Aufbaus Die Optimierung des logischen Aufbaus eines Statecharts soll ein in gewisser Hinsicht einfacheres Statechart generieren welches die gleiche Funktion erf llt Abh ngig vom Optimierkriterium sind folgende berlegungen hilfreich z 3 z 4 Abbildung 3 11 Optimierung nach Anzahl der Zust nde Optimierung nach Anzahl der Zust nde In Anlehnung an endliche Automaten kann man hier versuchen Zust nde zu verschmelzen Aufgrund der M glichkeit Va 3 siehe hierzu auch Br 93 und Len90 84 Kapitel 3 Werkzeuge f r Statecharts Automatismen riablen in einem Statechart zu testen und zu setzen kann man jedoch auch jedes Statechart i
113. Methode ex portQT aufgerufen wurde D 4 5 Klasse Bedingung extends java lang Object Diese Klasse stellt eine Bedingung dar Package score Bedingungen 197 Package score Bedingungen Kapitel D Programmdokumentation 198 Attribute ask ConditionAskable Das Interface bei dem atomare Bedingungen ihren Wahrheitswert erfra gen k nnen COND_TRUE int CONST Konstante falls es sich um die immer wahre Bedingung handelt COND_BASIC int CONST Konstante falls es sich um eine atomare Bedingung handelt COND_ANBD int CONST Konstante falls es sich um eine AND Bedingung handelt COND_OR int CONST Konstante falls es sich um eine OR Bedingung handelt COND_NOT int CONST Konstante falls es sich um eine NOT Bedingung handelt Konstruktoren Bedingung Erschafft eine immer wahre atomare Bedingung Methoden delete void L scht diese Bedingung getType int Gibt den Typ dieser Bedingung zur ck Sollte es sich um eine atomare Bedingung handeln ist dadurch noch nicht feststellbar welche atomare Bedingung es ist provideAnswers ConditionAskable void Setzt die Klasse die den Wahrheitswert dieser Bedingung liefert isTrue boolean Gibt zur ck ob diese Bedingung erf llt ist Muss entsprechend implementiert werden getCheckedVars Vector void Sammelt alle berpr ften Variablen im bergebenen Vector toString String berschr
114. N Pfeil mit angegebenen Identifier Hookvector fiir den Startabschnitt Konnek torHook und Endabschnitten aus dem angegebenen Vector createArrowN_1 int Vector Triplet Vector String Erschafft einen N 1 Pfeil mit angegebenem Identifier Startabschnitten aus dem angegebenen Vec tor KonnektorHook und Hookvector f r den Endabschnitt parseHook GrafPfeil Triplet gt GrafHook 205 Package score control Kapitel D Programmdokumentation 206 bersetzt das Triplet in einen Hook Format ID des GrafPunkt Anchors Position TextID createEvent int String String Erschafft ein neues Ereignis mit dem angegebenen Identifier und Text createActionClearHist int int gt String Erschafft eine neue ClearHistoryAktion mit dem angegebenen Identifier zum angegebenen Zu stand createActionDeepClear int int String Erschafft eine neue DeepClearHistoryAktion mit dem angegebenen Identifier zam angegebenen Zustand createActionSetVisible int int boolean String Erschafft eine neue SetVisibleAktion mit dem angegebenen Identifier zum angegebenen Dialog element createActionDialogOn int int boolean String Erschafft eine neue SetDialogOnAktion mit dem angegebenen Identifier zur angegebenen Dia logkomponente createActionSetVarVar int String String boolean String Erschafft eine neue SetVariableAktion mit dem angegebenen Identifier zur angegebenen String Variable createActionSetVar int Str
115. NST Konstanten f r die Vergleichsoperatoren UNEQUAL int CONST Konstanten f r die Vergleichsoperatoren LESS_OR_EQUAL int CONST Konstanten f r die Vergleichsoperatoren GREATER_OR_EQUAL int CONST Konstanten f r die Vergleichsoperatoren Konstruktoren Variable String Konstruktor Variable String String Konstruktor Variable String int Konstruktor Variable String double Konstruktor checkDialogVar void Pr fen ob dies eine Dialogvariable ist inc String gt void Variable erh hen inc int void Variable erh hen inc double void Variable erh hen set String void Variable setzen set int void Variable setzen set double void Variable setzen inc Variable void Variable erh hen set Variable void 294 Kapitel D Programmdokumentation Package score util Variable setzen getName String Den Namen der Variablen auslesen getString String String Repr sentation der Variablen liefern getDouble double Double Repr sentation der Variablen liefern getint int Integer Repr sentation der Variablen liefern compare int int boolean Variable vergleichen compare int String gt boolean Variable vergleichen compare int double boolean Variable vergleichen compare int Variable boolean Variable vergleichen compareTo Object
116. ONNLIN int CONST Konstante f r mittlere Hooks die mehrere eingehende Verbindungen haben CONN_OUT int CONST Konstante f r mittlere Hooks die mehrere ausgehende Verbindungen haben DELSCOPE_HOOK int CONST Konstante die angibt dass nur dieser Hook gel scht werden soll DELSCOPE_SECTION int CONST Konstante die angibt dass der Abschnitt dieses Hooks gel scht werden soll DELSCOPE_ARROW int CONST Konstante die angibt dass der Pfeil dieses Hooks gel scht werden soll GrafHook GrafPfeil GrafPunkt int Point2D Double Erschafft einen neuen Hook zum bergebenen Pfeil Er hat den bergebenen HookTyp und bez glich des bergebenen Punktes den angegebenen Offset GrafHook GrafPfeil GrafPunkt int Point2D Double Integer Erschafft einen neuen Hook dessen Pfeil den Text mit dem angegebenen Identifier als Label zugewiesen bekommt setHookType int void Setzt den HookTyp gem den Konstanten dieser Klasse getArrow GrafPfeil Gibt den Pfeil zur ck zu dem dieser Hook geh rt getOffset Point2D Double Gibt den Offset dieses Hooks bez glich seines Oberzustands zur ck setTo GrafPunkt Point2D Double void Bewegt diesen Hook zum angegebenen Oberzustand mit dem bergebenen Offset Es findet kei nerlei Pr fung statt moveTo double double GrafPunkt void Bewegt den Hook an die angegebene Stelle bez glich des bergebenen Punktes Der Hook wird in den entsprechenden Zu
117. Parser extends score control AbstractParser Parsed eine Bedingung Konstruktoren BedParser Logger Erzeugt einen inneren Parseraufruf BedParser Scanner Logger Erzeugt einen neuen BedParser Methoden parse int berschreibt die Methode der Klasse AbstractParser Startet einen Parse Vorgang getCondition gt Bedingung Liefert die erzeugte Bedingung createCondition String Bedingung Erzeugt eine Bedingung aus einem String 204 Kapitel D Programmdokumentation Package score control D 5 5 Klasse Commander extends java lang Object Diese Klasse wird haupts chlich f r das Laden der Modelle benutzt Hier kann der Interpreter die gele senen Daten in einheitlicher Form abgeben und die entsprechenden Aktionen werden in den Modellen ausgef hrt Au erdem k nnen hier Makros einprogrammiert werden Auch Speichern und Undo sind ber diese Klasse m glich Konstruktoren Commander MainWindow Erschafft einen neuen Commander zum bergebenen MainWindow insertCheckboxes int void Erschafft n Checkboxes und f gt sie ein insertRadiobuttons int void F gt n Radiobuttons in das DialogModell und das Statechart ein createBasicState int String Dimension Double boolean String Erschafft einen atomaren Zustand mit angegebenem Identifier Name und Gr e createORState int String Dimension Double String Erschafft einen OR Zustand mit angegebenem Iden
118. Partitioner teilen w rde Es wird davon ausgegangen dass diese Punkte in der Reihenfolge links rechts bzw oben unten angegeben sind Der angegebene Offset ist der Zeiche noffset des Oberzustandes in der Sicht in der gerade gearbeitet wird getSuper gt GrafZustand Gibt den Zustand zur ck in dem dieser Partitioner installiert ist draw Painter boolean Zeichnet den Partitioner in den Painter es wird davon ausgegangen dass der Partitioner noch nicht installiert ist und es wird der intern gemerkte Offset bentuzt Ist dieser Null wird false zur ckgegeben ansonsten true draw Painter Point2D Double boolean Zeichnet den Partitioner in den Painter wobei der bergebene totale Offset benutzt wird Ist der Partitioner noch nicht installiert wird false zur ckgegeben ansonsten true isin double double double boolean Gibt zur ck ob die bergebenen Koordinaten auf diesem Partitioner liegen Ist der Partitioner noch nicht installiert wird false zur ckgegeben isIn double double boolean Gibt zuriick ob die angegebenen Koordinaten direkt auf dem Partitioner liegen getObjectAt double double double GrafTyp Gibt diesen Partitioner zuriick falls die Koordinaten auf ihm liegen install GrafModellSicht gt int Installiert diesen Partitioner in seinen Oberzustand Gibt 1 zur ck wenn kein Oberzustand ge setzt ist oder der Partitioner bereits installiert wurde ansonsten die Tiefe des Partit
119. Pfeils dar Sie ist ein Vector von Hooks Sie kann sowohl ein Anfangs als auch ein Endabschnitt sein Attribute DROP_NONE int Konstante die angibt dass beim Speichern kein Punkt ausgelassen werden soll DROP FIRST int Konstante die angibt dass beim Speichern der erste Punkt ausgelassen wer den soll weil es sich um den KonnektorHook des Pfeils handelt DROP LAST int Konstante die angibt dass beim Speichern der erste Punkt ausgelassen werden soll weil es sich um den KonnektorHook des Pfeils handelt Konstruktoren GPAbschnitt GrafPfeil Erschafft einen neuen Abschnitt zum bergebenen Pfeil der noch keine Hooks enth lt GPAbschnitt GrafPunkt GrafPunkt GrafPfeil Point2D Double Point2D Double Erschafft einen Abschnitt mit gegebenem Start und Endpunkt zum bergebenen Pfeil GPAbschnitt GrafPunkt GrafHook GrafPfeil Point2D Double Point2D Double Erschafft einen Abschnitt mit gegebenem Startpunkt und Endhook zum bergebenen Pfeil GPAbschnitt GrafHook GrafPunkt GrafPfeil Point2D Double Point2D Double Erschafft einen Abschnitt mit gegebenem Starthook und Endpunkt zum bergebenen Pfeil Methoden getinitialPos GrafPunkt GrafTyp Point2D Double Point2D Double Point2D Double Gibt die Position zur ck den ein Hook auf dem bergebenen Punkt haben muss wenn der Pfeil durch klicken an den bergebenen Positionen in den bergebenen Punkten bestimmt wurde Der zweite Punkt d
120. Point Obere linke untere Rechte Ecke und ein Offset c Color Farbe HE 3d visible boolean Ist dieser Rubber momentan sichtbar draw void Rubber zeichnen erase void Rubber l schen getPos Point Position auslesen getA gt Point Liefer Obere linke Ecke getB gt Point Liefer untere rechte Ecke setA Point void Setzt obere linke Ecke setB Point void Setzt untere rechte Ecke getOffset gt Point Liefert den Zeichenoffset setOffset Point void Setzt den Zeichenoffset getSize Dimension Liefert die Gr e moveTo Point void Bewegt an Position p moveToX int void Bewegt in X Richtung moveToY int void Bewegt in Y Richtung setSize Dimension void Setzt die Gr e neu 274 Kapitel D Programmdokumentation Package score SCEditor D 13 4 Klasse Painter extends java lang Object Stellt die Hilevel Zeichenroutinen zur Verf gung Attribute sim Simulation Referenz auf die Simulation COLOR_DEFAULT Color CONST Vordefinierte Farbkonstanten COLOR_COMPLEX Color CONST Vordefinierte Farbkonstanten COLOR_ACTIVE Color CONST Vordefinierte Farbkonstanten COLOR_MARKED Color CONST Vordefinierte Farbkonstanten Konstruktoren Painter ZoomGraphics GrafModellSicht Konstruktor Methoden drawState Point2D Double GrafZustand gt void E
121. Prinzip ein eigenst ndiges System ist und die zugeh rigen Statecharts voneinander unabh ngig sind Soll ein Teil des Systems mehrfach instanzi iert werden so kann man dieses Modul aus dem Rest des Systems einfach auskoppeln Hierbei ist nat rlich gesondert festzulegen wie die einzelnen Module miteinander kommunizieren Es ist einerseits denkbar beispielsweise die Ereignisse die von einem Modul an ein bestimmtes anderes weitergegeben werden sollen ber eine Eingabe Methode des empfangenden Moduls zu bertragen Das erfordert jedoch dass jedes einzelne Modul Zugriff auf alle anderen Module hat mit denen es kommunizieren soll Andererseits w re eine Art Bus System denkbar in das Ereignisse eingespeist und von den Modulen die darauf reagieren sollen abgeholt werden Welche dieser Varianten implementiert wird steht in engem Zusammenhang mit der Rahmenbedingung die f r das Statechart gelten soll Wichtig ist jedoch auch die Frage wie die einzelnen Module im Statechart Editor getrennt werden Wird eine sehr strikte Trennung vorausgesetzt so w re es am sinn vollsten die einzelnen Module nicht im selben Statechart anzuzeigen sondern sie wie einzelne Statecharts zu behandeln Ist die Trennung weniger streng so dass Pfeile etwa Modulgrenzen kreuzen k nnen so entstehen zus tzliche Probleme Es wird bei spielsweise ein globaler Namensraum notwendig um die Bez ge von Ereignissen und Aktionen innerhalb des Statecharts konsistent
122. Punkt void Vertauscht die Namen von zwei GrafPunkten setSuper GrafZustand Point2D Double gt void Setzt den Oberzustand und den Offset getSuper gt GrafZustand Gibt den Oberzustand zuriick setOffset Point2D Double void Setzt den Offset dieses Punktes getOwnOffset gt Point2D Double Gibt den Offset dieses Punktes bez glich seines Oberzustandes wieder setLogic LogPunkt void Setzt das logische quivalent dieses Punktes Hierbei erh lt auch der grafische Punkt seinen Iden tifier der dem logischen entspricht getLogic LogPunkt Gibt das logische quivalent dieses grafischen Punktes zur ck renewldent void Stellt sicher dass dieser Grafische Punkt unter seinem Logischen Identifier zu finden ist setName String boolean Setzt den Namen dieses Punktes Gibt true zur ck falls eine nderung stattgefunden hat getName String Gibt den Namen dieses Punktes zur ck Kann Null sein getSize Dimension Double Gibt die Gr e des Zustandes zuruck setSize Dimension Double void Setzt die Gr e des grafischen Punktes Es wird davon ausgegangen dass diese Gr e g ltig ist Mit dieser Methode werden haupts chlich die Hooks an diesem Zustand umgesetzt getCenter Point2D Double Gibt den Mittelpunkt dieses Punktes zur ck hasSubPoints boolean Gibt an ob dieser Punkt Unterpunkte hat solange diese Methode nicht berschrieben wird gibt sie imme
123. Punkt abstrakte Klasse extends score GrafSCM GrafIyp implements score util Observer Diese Klasse stellt das grafische quivalent eines logischen Punktes dar Ein grafischer Punkt hat eine linke obere Koordinate und eine Gr e Attribute Ip LogPunkt H lt das logische Gegenst ck zu diesem grafischen Punkt size Dimension Double Gibt die Gr e dieses grafischen Punktes an superState GrafZustand der Oberzustand dieses Punktes ownOffset Point2D Double der eigene Offset bez glich des Oberzustands sect int CONST Gibt an wie breit der Anteil des Punktes ist der zum Rand gerechnet wird Ein Wert von 10 hei t dabei dass ein Zehntel des Zustands gew hlt ist Konstruktoren GrafPunkt Dimension Double Erschafft einen grafischen Punkt der die bergebene Gr e hat update Observable Object gt void L st ein Refresh aus replaceObservable Observable Observable boolean Implementation des Observer Interfaces getGrafPunkt int GrafPunkt Gibt den grafischen Punkt mit dem angegebenen Identifier zur ck getGrafPunkt String GrafPunkt Gibt den grafischen Punkt mit dem angegebenen Namen zur ck Ist kein solcher Punkt vorhanden oder ist der Name nicht eindeutig so wird Null zur ckgegeben getAll gt Collection Kapitel D Programmdokumentation Package score GrafSCM Gibt eine Collection aller grafischen Punkte zur ck swapNames GrafPunkt Graf
124. Quelltext 65 Speicherstruktur 57 Werkzeuge 57 zu Dialogkomponenten 67 Zustand eines 31 statische Reaktion 39 Synchronisationsbalken 44 Systemdialog 80 Aktion 82 Bedingung 81 Ereignis 80 T Temporale Auswertung 31 Testen 77 Tiefe 22 Vergr erung 58 global 60 partiell 59 Time Out 55 Timer 119 Transition 19 28 113 U bergang 19 28 46 1 N 97 ausloserfrei 50 Erweiterungen 50 hinzuf gen 61 N 1 97 triggerless 50 zusammengesetzt 47 hinzuf gen 61 Umgebung Hardware 173 Software 173 Undo 125 150 objektbezogen 63 Unterzustand 34 Partition 22 transitive H lle 21 Fixpunktfreiheit 21 Unterzustandsfunktion 20 Symmetriefreiheit 22 yV Variable 120 in SCed 101 zu Dialogkomponenten 69 103 Verbindung siehe bergang 46 Verifikator 71 149 W Werkzeug 57 Editor Dialog 66 Programmstruktur 69 Statechart 57 Optimierer 83 Quelltextgenerator 86 Simulator 77 Verifikator 71 Werkzeugleiste 115 Z Zeichenfl che 112 Zeit 102 in der Simulation 79 Modell 54 asynchron 55 kontinuierlich 54 synchron 55 Zielbestimmung 171 Zielgruppe 172 Zustand 18 27 112 AND 18 23 39 OR 18 22 39 Aktivieren 147 atomar 18 20 38 Partition 22 Erreichbarkeit 73 Erweiterungen 40 Hierarchie 39 in SCed 93 nichtatomar Partition 22 parametrisiert 39 Pseudozustand 44 Synch 45 terminal 38 transient 38 berschneidend 40 unsicher 41 Stichwort
125. Quelltext f r diesen LogPfeil in den EasyFileWriter D 11 10 Klasse LogPfeil_N_1 extends score LogSCM LogPfeil Diese Klasse stellt eine logische Verbindung dar Sie besitzt einen Start und einen Zielzustand Konstruktoren LogPfeil_N_1 Der Pfeil besitzt am Anfang weder Start noch Endzustand LogPfeil_N_1 Vector LogPunkt Der Pfeil besitzt die Startzust nde des Vectors und als Endzustand den bergebenen logischen Punkt Es wird davon ausgegangen dass er Vector ebenfalls logische Punkte enth lt LogPfeil_N_1 LogPfeil_1_1 Erschafft einen neuen N 1 Pfeil aus einem 1 1 Pfeil getSource Vector Gibt einen Vector zur ck der s mtliche LogPunkte enth lt von denen dieser Pfeil augeht getDest gt LogPunkt Gibt den LogPunkt zur ck bei dem dieser Pfeil endet addSource LogPunkt gt void F gt einen weiteren LogPunkt als Startpunkt hinzu removeSource LogPunkt gt void Entfernt den bergebenen LogPunkt aus der Liste der Startzust nde setDest LogPunkt void Setzt den Endpunkt dieses Pfeils auf den angegebenen LogPunkt redirect LogPunkt LogPunkt boolean void berschreibt die Methode der Klasse LogPfeil Ersetzt alle Start und Endzust nde die dem ersten LogPunkt entsprechen durch den zweiten Ist der Parameter all auf false gesetzt wird nur der erste Startpunkt ersetzt get1 1 O gt LogPfeil berschreibt die Methode der Klasse LogPfeil Wenn nur ein einzige
126. U o yEen z 1 18 mii ee Das hei t in n z liegen alle Elemente der Partition n z sowie deren s mtliche auch indirekten Unterzust nde Damit ist T eine Partitionierung s mtlicher Unter zust nde eines Zustands Beispiel Abbildung 1 1 Beispiel Statechart zur Erl uterung von und T Um die Funktionen 7 und O zu erl utern betrachten wir Abbildung 1 1 Die Menge der Zust nde ist hier Z A B C D E F G H 1 J K L M F r alle z Z sind nun 7 und O wie folgt definiert Die Erl uterung der grafischen Definition folgt in Abschnitt 1 3 23 24 Formale Definition Kapitel 1 Definition von Statecharts a EEE Ka a ra EME ME CELE GEH T Ar ON IC OR D AND F ATOM G ATOM FE ATOM 7 ATOM Y ATOM Er ER BE os lt g 1 2 5 Die Defaulteinstiegsfunktion d Mit Hilfe der Defaulteinstiege wird festgelegt welche Unterzust nde von zusammen gesetzten Zust nden aktiviert werden sollen wenn der komplexe Zustand aktiviert wird und dabei f r einige Partitionen kein aktivierter Zustand angegeben ist Die Defaulteinstiegsfunktion d ordnet jedem Zustand z Z die Menge seiner Defaulteinstiege zu F r atomare Zust nde ist d z 0 F r komplexe Zust nde ist d z C o z wobei aus jeder Partition von r z genau ein Element in d z enthalten sein mu Die M chtigkeit der Defaulteinstiegsmenge d z i
127. Variable Pr ft ob diese Variable zu einer DialogComponenten geh rt D 12 3 Klasse StateChart abstrakte Klasse extends score Simulator SCRun implements score LogDM DialogCompsServer score LogDM DialogCompManager Java awt event ActionListener Java awt event WindowListener score Ereignisse EventAskable score control Logger Diese Klasse f hrt den Ablauf des Statechart im exportierten Programm durch Sie erweitert daf r SCRun und implementiert die DialogComponentenzugriff Interfaces Attribute dlg Hashtable Hashtable in der die DialogKomponenten gehalten werden Der Key ist hierbei die JComponent f r den Zugriff mit Visible und der Value die JComponent f r den Zugriff mit Variablen Konstruktoren StateChart Konstruktor Methoden getComponentWithld int Object Implementation des DialogCompServer Interfaces setPhase int void 271 Quelltext Export Kapitel D Programmdokumentation 272 berschreibt die Methode der Klasse SCRun Setzt die Phase auf phase setDigVisible int boolean gt void Implementation des DialogCompServer Interfaces setOn int gt void Implementation des DialogCompServer Interfaces setOff int void Implementation des DialogCompServer Interfaces occurred Ereignis boolean Implementation des EventAskable Interfaces createDialogs void berschreibt die Methode der Klasse SCRun Erzeugt die Dialoge fetchDlgActions gt vo
128. View extends score util Observable implements score util Observer java awt event ActionListener Java awt event WindowListener Stellt die Attribute eines MarkableTyp dar Wird vom Inspektor benutzt Attribute frame JFrame Der Frame in dem der PropertyView dargestellt wird font Font Der Font f r den Inspektor tabPane JTabbedPane Die TabbedPane f r die markierten Objekte observable Observable Das zu berwachende Observable noUpdate boolean true wenn kein Update durchgef hrt werden soll shownHash Hashtable Hashtable f r die dargestellten Objekte Konstruktoren PropertyView Observable Konstruktor PropertyView Observable JFrame Konstruktor PropertyView Konstuktor setUndoManager UndoManager void Setzt den UndoManager replaceObservable Observable Observable boolean Methode die beim Ersetzen des Obervables aufgerufen wird initRedraw void Ein Neuzeichnen vorbereiten d h die Ressourcen anfordern redrawPane void Die TabbedPane darstellen saveChangedFields gt void Textfelder auslesen und sie Werte speichern redraw gt void Alles neuzeichnen showField MarkableTyp void Felder zeichnen showFields Variable void Felder zeichnen showFields Partitioner void Felder zeichnen showFields DlgKomponente void Felder zeichnen showFields GrafText void Felder zeichnen showFields GrafPfe
129. WzTk das Wasser flie t in die Teekanne Die berg nge sowie das Betreten oder Verlassen von Zust nden k nnen die in der folgenden Liste genannten Aktionen aufrufen In den Zust nden sind diejenigen Aktionen die ausgel st werden wenn der Zustand betreten wird durch die Angabe enter gekennzeichnet und solche die beim Verlassen ausgel st werden durch exit e Der Benutzerdialog wird ber die folgenden Aktionen beeinflusst visible ZZ boolean das Eingabefeld f r die Ziehzeit sichtbar beziehungswei se unsichtbar machen visible Tee boolean die Checkbox die angibt ob Tee eingef llt ist oder nicht sichtbar beziehungsweise unsichtbar machen visible Tk boolean das Popup in dem der Zustand der Teekanne angegeben wird anzeigen oder schlie en e Im Zusammenhang mit dem Timer f r die Ziehzeit werden die folgenden Ak tionen benutzt set ZZ 15 den Wert der Ziehzeit auf 15 Sekunden setzen set TI ZZ die Uhr mit dem Wert der Ziehzeit initialisieren on TI die Uhr starten off TD die Uhr anhalten TI das Ereignis Stoppuhr abgelaufen ausl sen e Wenn bestimmte Phasen der Teezubereitung abgeschlossen sind flie t das Was ser in andere Beh lter der Teemaschine Dies wird durch die folgenden zwei Aktionen dargestellt WzZ das Ereignis Wasser zum Ziehbeh lter ausl sen WzTKk das Ereignis Wasser zur Teekanne ausl sen vgl hierzu die Diskussion der externen Ereignisse in der Simulation auf Seite 80
130. Zeitmodell in demselben Zeitschritt vgl HN96 S 320 f Kapitel 3 Werkzeuge f r Statecharts angegebenen Bedingungen das System deterministisch machen recht hnlich und da her ebenso schwer zu beantworten An dieser Stelle sei aber erw hnt dass der Begriff Determinismus sich durch aus von Races unterscheidet Determinismus bezieht sich auf die Auswahl von berg ngen die von einem aktiven Zustand und seinen Oberzust nden ausgehen Von mehreren m glichen berg ngen wird immer genau einer ausgef hrt und der Architekt des Statecharts kann verschiedene M glichkeiten geboten bekommen daf r zu sorgen dass dies der gew nschte ist Races treten ber das Statechart verteilt auf da sie sich auf eine Menge von Aktionen beziehen die alle ausgef hrt werden Das Bereinigen von Races ist vergleichsweise aufwendig und kann gr ere Umstrukturie rungen erfordern um die Zugriffe auf das betroffene Objekt auf mehrere Zeitschritte zu strecken 3 2 2 Der Simulator Interaktion mit dem Statechart Editor Wie bereits im letzten Abschnitt erw hnt ist es f r einen Verifikator praktisch nicht m glich etwa die Konsistenz von Bedingungen an ausgehenden Verbindungen oder hnlich komplexe Fragestellungen zu berpr fen Andererseits sollten solche Proble me nicht erst beim Einsatz des Programms auffallen Hier ist die Durchf hrung einer Simulation unumg nglich Der Simulator sollte den Gesamtzustand des Statecharts al
131. a warn a DU Rise Sta ci a ea A E D 2 Package score AbstractModell o o o D21 Kl ssenhierarchie co crercrsosris rra D 2 2 Klasse AbstraciModell lt D 2 3 Klasse MarkableTyp D 3 Package se re Aktionen 2 22 2 2 ren cra sa D3 1 Klassenhierarchie 2 22er lt lt nn D32 Interlsce Adler coos 2 2a ae ae Hear A D 3 3 Interface DialogAkti d s ooe 2 2 208 00 2800 2 34 Interlase EventHolder o e ca ea e 0 au ou 22 58 D 3 5 Interface HistoryAktion 2 2222 2 nennen D 36 Klasse Aktion 2 cecco ciedra sehe D 3 7 Klasse AktionDialog 2 2222 none D 3 8 Klasse AktionEdit lt lt D 3 9 Klasse AktionPropertYy o o D 3 10 Klasse AktionPropertyChange D 3 11 Klasse AktKomplex o 2 22244 20 28 24 425 D312 Klasse CalledActi h sic areas anna D 3 13 Klasse ClearHistoryAktion D 3 14 Klasse DeepClearHistoryAktion D3 L5 Klasse ExpertAktien s 22 082000 ea a 171 171 171 172 172 172 172 172 173 173 173 175 D 4 DS D 6 D 7 D 8 Inhaltsverzeichnis D 3 16 Klasse IncVarAktion 2 222222 Coon 191 D 3 17 Klasse JavaAktion 2 22 22 mono 192 D 3 18 Klasse SetDialogOnAktion 2 222 22 192 D 3 19 Klasse SetDialogVisibleAktion 2 22 22 2200 193 D 3 20 Klasse SetVarAktion 2 2 22 2 mono 194 D321 Klass
132. a97 Rum99 Harel David Naamad A The Statemate Semantics of Statecharts ACM Transactions on Software Engineering and Methodology pp 293 333 1996 Harel David Politi Michal Modeling Reactive Systems with Statecharts McGraw Hill 1998 Horrocks Ian Constructing the User Interfaces with Statecharts Addison Wesley 1999 Java 2 Platform Standard Edition v1 2 2 API Specification http java sun com products jdk 1 2 docs api index html Sun Mi crosystems Inc 2000 Grund und Aufbauwortschatz Latein 1 Aufl Klett 1999 Lengauer T Combinatorical Algorithms for Integrated Circuit Layout Wiley Teubner 1990 Leveson N G et al Requirements specification for process control sy stems IEEE Trans Softw Eng 20 pp 684 707 1994 Mackensen Lutz Gro es Handbuch der Zitate und Redensarten Buch und Zeit Nickel Ulrich A Einsatz von UML Statecharts und SDL Spezifi kation von Steuerungssoftware f r Fertigungssysteme http www uni paderborn de fachbereich AG schaefer ag_dV ISILEIT Magdeburg zip Oesterreich Bernd Hrsg Erfolgreich mit Objektorientierung Vorge hensmodelle f r die objektorientierte Softwareentwicklung Oldenbourg Wissenschaftsverlag 1999 Ottmann Thomas und Widmayer Peter Algorithmen und Datenstruktu ren BI Wissenschafts Verlag 1990 Oram Andrew und Talbott Steve Managing Projects with make O Reilly amp Associates 1991 Pnueli A Shalev M What is in a st
133. able zugeordnet die den Timerwert enth lt Popups Sind Fenster die eine Meldung enthalten Hier kann der Text mit Hilfe der zugeordneten Variable gesetzt werden Weiterhin kann mit Hilfe der Aktion serVisible die Sichtbarkeit der Aktion ge ndert werden Dabei wird bei der Komponente Popup das Fenster sichtbar oder unsichtbar w hrend die anderen Komponenten enabled oder disabled werden Auf den Timer hat diese Aktion keinen Einfluss Die Dialoge 103 Die Dialoge Kapitel 4 Die implementierte Fassung 104 Wer fragt ist ein Narr f r f nf Minuten Wer nicht fragt bleibt es ein f r allemal Deutsches Sprichwort Kapitel 5 Benutzerhandbuch 5 1 Installation Um das Programm auf einem UNIX System zu installieren f hren sie das Script install lt directory gt aus wobei lt directory gt f r das Zielverzeichnis steht Sie ben tigen dazu Schreibrechte f r das Zielverzeichnis Das Installationsscript ben tigt die bash Shell Auf Ihrem System mu ein lauff higes Java 2 vorhanden sein Um die exportier ten Programme zu bersetzen ben tigen sie auch ein JDK mindestens Version 1 2 2 sowie das Programm make Unter anderen Systemen wie zum Beispiel MacOS oder Windows m ssen Sie noch einige Anpassungen vornehmen und die Dateien manuell kopieren 5 2 berblick ber das Programm SCed Mit dem Programm SCed lassen sich Statecharts konstruieren testen simulieren und als Quelltext exportieren Au erdem si
134. abschnitten und einen von Endabschnitten sowie ein logisches quivalent Bei einem 1 1 ber gang sind keine Endabschnitte vorhanden GPAbschnitt Diese Klasse stellt den oben erw hnten Abschnitt eines grafischen Pfeils dar Sie erbt von der Java Klasse Vector und ist damit als Vektor von GrafHooks implementiert GrafHook Die Hooks sind die Ecken eines grafischen Pfeils sie besitzen keine Ent sprechung im logischen Modell Hooks gibt es in f nf verschiedenen Formen als Start beziehungsweise Endhook als normaler mittlerer Hook und als Hook an dem mehrere Abschnitte zusammenkommen oder von dort ausgehen GrafText Mit dieser Klasse k nnen Texte zum Statechart hinzugef gt werden Wenn sich der Text auf einen GrafPfeil bezieht wird hierin auch verwaltet ob der angezeigte Text mit den Eigenschaften des Pfeil bereinstimmt Kapitel 6 Funktionsweise der Module Die Datenstruktur des Statecharts LogPunkt SimSCM SCRun 1 SimSCModell SimBasic SimKonn SimOR SimAND SimHist Abbildung 6 4 Klassen berblick des Pakets SimSCM 6 2 4 Das Simulations und Quelltextmodell Das Simulationsmodell wird erst beim Start einer Simulation aus dem logischen Mo dell erschaffen Anders als in den beiden anderen Modellen gibt es hier nur Zust nde keine berg nge Diese werden w hrend der Simulation von der Steuer
135. afischen Editor und das Ziehen der Ver bindungen zwischen Zust nden wurde in den letzten Abschnitten beschrieben Das Statechart enth lt aber noch viele weitere Informationen die den dargestellten Objek ten zugeordnet werden k nnen So k nnen Zust nde beispielsweise Ereignisse oder Aktionen ausl sen wenn sie betreten oder verlassen werden m glicherweise d rfen sie auch statische Reaktionen enthalten oder sie sind als Endzustand markiert Sind dar berhinaus Parametrisierungen und Mehrfachinstantiierungen eines Zustands er laubt so m ssen auch diese Informationen verwaltet werden Ganz hnlich k nnen auch nicht alle Eigenschaften der Verbindungen im Statechart angezeigt werden denn die meisten Bedingungen und Aktionen werden daf r zu lang sein Es muss also eine M glichkeit geben diese Attribute sowohl bei Zust nden als auch bei Verbindungen au erhalb des Statecharts anzeigen und ndern zu K nnen Besonders bersichtlich kann dies geschehen wenn ein separates Fenster ge ffnet wird das Informationen zum momentan markierten Objekt des Statecharts darstellt In einem solchen Fenster k nnten diese Informationen dann auch ge ndert werden Statt eines neuen Fensters ist diese Funktion die wir im folgenden mit dem Begriff Inspektor bezeichnen wollen auch durch einen reservierten Bereich des Hauptfensters m glich sofern es ein solches gibt Die Informationen zu Zust nden und Pfeilen stellen selbstverst ndlich unter schie
136. age String Konstruktor Animatedlmage magelcon Konstruktor Methoden setDelay int void Die Verz gerung zwischen zwei Bildern setzen reset gt void Die Animation resetten start void Die Animation starten stop gt void Die Animation stoppen run gt void Die Animation l uft addlmage String void Ein Bild hinzuf gen addlmage Imagelcon gt void Ein Bild hinzuf gen D 16 6 Klasse BlackLabel extends javax swing JLabel Stellt einen speziell Konfigurierten Label dar Konstruktoren BlackLabel String Konstruktor BlackLabel String int Konstruktor D 16 7 Klasse Compare extends java lang Object Diese Klasse enth lt eine Vergleichsfunktion Konstruktoren Compare Default Konstruktor Methoden isSimilar Point Point int boolean Pr ft ob zwei Punkte a und b mit einer Toleranz tolerance gleich sind 297 Package score util Kapitel D Programmdokumentation 298 D 16 8 Klasse Dimension extends java awt Dimension innere Klassen Dimension Double Diese Klasse erweiter java awt Dimension um Double Werte wie Point2D Double Konstruktoren Dimension Konstruktor Dimension Dimension Konstruktor Dimension int int Konstruktor D 16 9 Klasse Dimension Double extends java awt geom Dimension2D Innere Klasse fiir einen Double Dimensions Wert Attribute width double Breite height double H h
137. al Gewisserma en wird also jeder aktive Zustand nach seiner Reaktion auf jedes eintre tende Ereignis gefragt Es gibt dabei die folgenden M glichkeiten Einerseits kann eine ausgehende Verbindung des Zustands durch das eingetre tene Ereignis ausgel st werden In diesem Fall h ngt es von der dieser Verbindung zugeordneten Bedingung ab ob tats chlich ein bergang stattfindet Je nach dem wird der Zustand dann deaktiviert oder bleibt aktiviert Andererseits kann es vorkommen dass zu einem Ereignis keine entsprechende Verbindung gefunden wird die von dem aktiven Zustand ausgeht In diesem Fall h ngt die Reaktion des Statecharts von der gew hlten Rahmenbedingung ab Bei der schwachen Rahmenbedingung wird davon ausgegangen dass ein Zu stand dessen ausgehende Verbindungen das Ereignis nicht nutzen vom Eintreten die ses Ereignisses unber hrt ist und daher weiterhin aktiv bleibt Dies ist beispielsweise in UML generell der Fall wie im letzten Absatz zitiert gehen Ereignisse verloren wenn ihnen keine Transition zugeordnet ist 4vgl etwa Pnu91 2vg HK99a S 130 Mit Transition ist hier selbstverst ndlich ein bergang gemeint Bygl HK99a S 129 oder Rum99 S 73 Auch hier steht Transition f r bergang Kapitel 2 Varianten von Statecharts in der Literatur Bedingungen Dem steht die starke Rahmenbedingung entgegen die fordert dass jeder Zustand eine explizite Reaktion auf jedes Ereignis parat h lt Damit wird es notwen
138. ame interpretiert werden soll varserver VarServer der Variablenserver f r alle Aktionen die sich auf Variablen beziehen Konstruktoren SetVarAktion String String Erschafft eine neue Aktion die eine String Variable setzt SetVarAktion String int Erschafft eine neue Aktion die eine Integer Variable setzt SetVarAktion String double Erschafft eine neue Aktion die eine Double Variable setzt SetVarAktion SerVarAktion CopyConstructor set String int void Macht diese Aktion zu einer Integer Aktion mit den bergebenen Spezifikationen set String String gt void Macht diese Aktion zu einer String Aktion mit den bergebenen Spezifikationen set String double void Macht diese Aktion zu einer Double Aktion mit den iibergebenen Spezifikationen setName String void Setzt den Namen der Variablen setCheckVar String void Setzt den Namen der Variablen deren Wert bernommen wird Alle anderen Angaben werden entsprechend gesetzt d h vorherige Angaben String Double Integer werden berschrieben setVarServer VarServer void Setzt die Simulation aus der die Aktion die Variable erh lt setsToVariable boolean Sagt dieser Aktion dass sie die bergebene Variable auf den Wert einer anderen Variablen setzen soll Dies geht nur dann wenn sie vorher auf einen String gesetzt hat in diesem Fall wird der String nun als Variablenname verwendet isString boolea
139. anager Damit ist das Pro gramm auf Sun Workstations unter Solaris sowie x86 PCs unter Linux ausf hrbar Ein Betrieb unter Windows ist wohl m glich wird aber aufgrund der Unterschiede im OS nicht garantiert Weiterhin m ssen f r die bersetzung exportierte Statecharts und die Installationsprogramme das Programm make und die bash Shell B 3 2 Hardware Die Rechner m ssen mit einem grafischen Bildschirm Tastatur und Maus ausgestattet sein Umgebung 173 Umgebung Kapitel B Pflichtenheft 174 Sapienti sat Plautus Der Perser 729 Anhang C Grammatik des Datenformats In diesem Anhang wird die komplette Grammatik der Sprache beschrieben die zum Speichern der Statecharts verwendet wird command createState createKonnektor insertState addView addPartitiner createArrow createEvent createAction addCondition addAction addEvent create Text addText createState CREATE stateType identification createKonnektor CREATE konnType identification createDialog CREATE digType id name VISIBLE SYSTEM insertState INSERT id IN stateld offset addView ADD VIEW stateld depth zoom GRID HOOKS LABEL 1D addPartitioner ADD PARTITIONEP stateld first second createArrow CREATE ARROW create1 1 create1 N createN 1 createEvent CREATE EVENT eventld text createAction
140. anderen Zustand und l st gegebenenfalls Aktionen aus Diese Aktionen k nnen unter anderem dazu f hren dass sich der Dialog ndert indem etwa weitere Kn pfe sichtbar oder Textfelder gel scht werden ber Bedingun gen k nnen auch Anfragen an den Dialog formuliert werden wie etwa die Frage ob ein bestimmtes Textfeld momentan leer ist Der Benutzer braucht eine komfortable M glichkeit diese Zusammenh nge zu formulieren und nachzuvollziehen Der Dialog Editor muss also deutlich machen wel che Ereignisse von den einzelnen Komponenten des Dialogs erzeugt werden und diese sollten vom Benutzer auf einfache Weise in das Statechart bernommen wer Kapitel 3 Werkzeuge f r Statecharts Grafische Editoren den k nnen hnlich zum Inspektor der im Abschnitt 3 1 1 f r die Elemente des Statecharts beschrieben wurde lie e sich hier ein Inspektor f r die Dialogkomponen ten vorstellen Darin sollten die verschiedenen Ereignisse angegeben sein die von der ausgew hlten Komponente erzeugt werden k nnen und die Aktionen durch die sie beeinflusst werden kann Wenn der Statechart Editor dann ebenfalls einen Inspektor besitzt k nnte man hier etwa eine Drag and Drop Funktionalit t anbieten durch die der Benutzer sich Ereignisse Bedingungen und Aktionen im Statechart zusammen bauen kann Repr sentation Das Statechart stellt den Zustand des Systems und daher auch den Zustand des Dia logs dar In anderen Worten den Komponenten des Dialo
141. ann solche Zusammenh nge mit Blick auf die Simulation entwe der vernachl ssigen da der Benutzer der den Test durchf hrt mit diesem Wissen den Knopf f r das entsprechende Ereignis nicht bet tigen wird Wenn der Benutzerdialog aber ohnehin die M glichkeit bietet Dialogelemente mittels Aktionen zu deaktivie en so kann auf diese Weise auch der Systemdialog der Situation angepasst werden Dies sollte jedoch mit Blick auf den Quelltextexport nur in seltenenen F llen genutzt werden da das erzeugte Programm dadurch mit zus tzlichen Aktionen und eventuell sogar weiteren berg ngen ausgestattet wird die nur in der Simulation eine Bedeu tung haben Bedingungen Bedingungen sind nach der gebr uchlichen Definition von Statecharts boolesche Ausdriicke Sie besitzen daher immer einen Wahrheitswert der entweder wahr oder falsch ist Prinzipiell besitzen sie diesen Wert auch dann wenn sie nicht ab gefragt werden er kann also vom verwendeten Zeitmodell unabh ngig sein Um diese Eigenschaft in einem Dialog nachzuvollziehen bietet sich eine Checkbox an hn lich wie bei Ereignissen stellt sich hier die Frage ob s mtliche externe Bedingungen nebeneinander dargestellt werden oder in einer Liste mit deren Hilfe der Benutzer den Wahrheitswert der einzelnen Bedingungen ausw hlen kann Das Anzeigen aller Bedingungen hat hier jedoch den Vorteil dass der Benutzer m glicherweise schnel ler berblickt welche der Bedingungen momentan falsch
142. arAktion Diese Klasse spezialisiert die abstrakte Klasse Aktion als SetVarAktion Konstruktoren IncVarAktion String String Erschafft eine neue Aktion die eine String Variable setzt IncVarAktion String int Erschafft eine neue Aktion die eine Integer Variable setzt IncVarAktion String double Erschafft eine neue Aktion die eine Double Variable setzt IncVarAktion IncVarAktion CopyConstructor execute gt boolean berschreibt die Methode der Klasse SerVarAktion Setzt den Wert der Variablen exportQT EasyFileWriter gt void berschreibt die Methode der Klasse SerVarAktion Exportiert den Quelltext f r diese Aktion in den EasyFileWriter Package score Aktionen 191 Package score Aktionen Kapitel D Programmdokumentation D 3 17 Klasse JavaAktion extends score Aktionen Aktion Diese Klasse spezialisiert die abstrakte Klasse Aktion als JavaAktion Sie enth lt einen Popup f r die Simulation der auch den Kurznamen dieser Aktion enth lt Konstruktoren JavaAktion String String DlgPopup Erschafft eine neue Aktion mit dem bergebenen Quelltext init String String DlgPopup void Initialisiert diese JavaAktion mit einem Namen Quelltext und einem Popup delete gt void berschreibt die Methode der Klasse Aktion L scht diese Aktion und das zugeh rige Popup getPopup gt DigPopup Gibt das Popup dieser JavaAktion zur ck execute gt boolean bers
143. archie der Simulation 2 22 2 om mon 145 6 8 bersicht des Simulationsablaufs 2 2 2 2 222 22 147 6 9 Ablauf der Aktivierung im Simulationsmodell 149 6 10 Hierarchie des QuelltextexportS 2 2 Como nn 150 A l Die Teemaschine die simuliert wird 156 A 2 Die Dialoge der Teemaschine 2 2 2 2m er un 00 gt 157 A 3 Die Gesamtansicht der Teemaschine 158 A 4 Die Partition f r den Ein Ausschalter 160 316 Abbildungsverzeichnis A 5 Die Partition f r die Stoppuhr 2 2 2 2 on onen 161 A 6 Die Partition f r den Wassertank 161 A 7 Die Partition die den Tee im Ziehbeh lter beschreibt 162 A 8 Die Partition die das Wasser im Ziehbeh lter beschreibt 163 A 9 Die Partition f r die Teekanne 163 A 10 Der Simulationsdialog des Anrufbeantworters 2 22 2 165 A 11 Die Gesamtansicht des Anrufbeantworters 166 A 12 Verhalten bei einem ankommenden Anruf 169 A 13 Das Abspielen von Anrufen 2 2 Cm nun 170 317 Abbildungsverzeichnis 318 Der Brunnen der Vergangenheit ist tief Thomas Mann Literaturverzeichnis Abd93 Abdelhamid Rames Das Vieweg KTEX Buch Vieweg 2 Aufl 1993 Alh98 Alhir Sinan Si UML in a nutshell O Reilly 1998 Bal99 Balzert Heide Lehrbuch der Objektmodellierung Analyse und Entwurf Spektrum 1999 Be
144. arf auch ein GrafHook sein getArrow GrafPfeil Gibt den Pfeil zur ck zu dem dieser Abschnitt geh rt splitAt GrafHook gt GPAbschnitt Spaltet den Abschnitt am gegebenen Hook auf und gibt das neue Endst ck zur ck Liegt der bergebene Hook nicht in diesem Abschnitt wird Null zur ckgegeben doubleStart void Verdoppelt den ersten Hook doubleMid GrafHook void Package score GrafSCM 219 Package score GrafSCM Kapitel D Programmdokumentation 220 Verdoppelt einen mittleren Hook doubleEnd void Verdoppelt den letzten Hook newHalfHook GrafHook GrafHook gt GrafHook Erschafft einen Hook der genau zwischen den beiden bergebenen Hooks liegt newLowerHook GrafHook GrafHook GrafHook Erschafft einen Hook der die Strecke zwischen den beiden bergebenen Hooks im Verh ltnis 1 2 teilt getNewHook GrafHook GrafHook double GrafHook Erschafft einen neuen Hook mit den angegebenen Teilverh ltnis der Zwischenstrecke Der Hook wird in den entsprechenden Zustand eingef gt wobei die SuperList des Pfeils benutzt aber nicht ver ndert wird relocalize void Stellt sicher dass sich jeder Hook im korrekten Zustand befindet Dabei wird die bergebene SuperList benutzt aber nicht ver ndert getCoordsOfSecond GrafModellSicht Point2D Double Gibt die Zeichenkoordinaten des zweiten Punktes zur ck getCoordsOfPenultimate GrafModellSicht Point2D Double Gibt die Zeichen
145. at es die F higkeit ein bestimmtes be obachtetes Objekt durch ein anderes zu ersetzen Bei der Implementation ist darauf zu achten dass die Ersetzung auch durch den Wert Null geschehen kann dies hei t dass das beobachtete Objekt gel scht wurde update Observable Object gt void Empf ngt ein update vom beobachteten Objekt in dem ein notifyObservers mit dem hier berge benen Argument aufgerufen wurde replaceObservable Observable Observable boolean Ersetzt das bergebene beobactete Objekt durch ein anderes Eine Ersetzung durch den Wert Null bedeutet dass das Objekt gel scht wurde Es ist nicht notwendig die entsprechenden Aufrufe der Methode addObserver bzw deleteObserver in den Observables aufzurufen sondern nur eventu elle zus tzliche Aktionen die dieser Observer auszuf hren hat D 16 4 Interface UndoManager Dieses Interface stellt die Funktionen f r das R ckg ngig machen von Editiervorg ngen zur Verf gung undo void Einen Schritt R ckg ngig machen prepare gt void Aktuellen Zustand merken commit gt void Aktuellen Zustand sichern zum R ckg ngig machen isPrepared boolean Ist ein aktueller Zustand gemerkt D 16 5 Klasse Animatedlmage extends javax swing JButton implements java lang Runnable Diese Klasse stellt ein animiertes Bild dar Kapitel D Programmdokumentation Package score util Konstruktoren Animatedlmage Konstruktor Animatedim
146. at sich ge ndert D 3 8 Klasse AktionEdit extends java lang Object implements java awt event ActionListener score util Observer Javax swing event ListSelectionListener Java awt event WindowListener Diese Klasse stellt eine Lister alle Aktionen eines Objekt bzw einer komplexen Aktion Attribute undo UndoManager Globaler UndoManager Konstruktoren AktionEdit LogDModell AktKomplex String Konstruktor Methoden replaceObservable Observable Observable boolean Ersetzt das Observable actionPerformed ActionEvent void Wertet ButtonEvents aus update Observable Object gt void Observerfunktion valueChanged ListSelectionEvent gt void Listenselektion hat sich ge ndert D 3 9 Klasse AktionProperty extends score Aktionen AktionPropertyChange ndert die Eigenschaften einer Aktion Konstruktoren AktionProperty LogDModell Konstruktor Methoden init void berschreibt die Methode der Klasse AktionPropertyChange Initialisiert diese Klasse und setzt den ActionListener f r die ComboBox update Observable Object void Kapitel D Programmdokumentation Package score Aktionen berschreibt die Methode der Klasse AktionPropertyChange Observer sendet die neue Aktion weiter initializeComponents int gt void berschreibt die Methode der Klasse AktionPropertyChange Dummy actionPerformed ActionEvent gt void berschreibt die Methode der Klasse
147. auf eine Zustandskombination beziehen schwieriger zu formulieren Diese Art der Optimierung scheint algorithmisch sehr aufwendig zu sein da vor allem das Erkennen von solchen nebenl ufigen Zust nden schwierig ist Ein Ansatz den man hierf r berpr fen k nnte ist die Frage ob die topologische Struktur einen Hinweis auf eine solche Nebenl ufigkeit bietet und ob man diese immer Eindeutig bestimmen kann Optimierung nach Anzahl der Variablen Umgekehrt zur Optimierung nach An zahl der Zust nde ist es hier m glich jede Variable die in einem Statechart nur einen endlichen Wertebereich annehmen kann durch je einen Zustand f r jeden m glichen Wert zu repr sentieren Ein Beispiel zeigt Abbildung 3 13 Man beachte dass die Wer te der Variablen nicht aufeinander folgen m ssen Diese Art der Optimierung ist nur dann sinnvoll wenn die verschiedenen Wer te der urspr nglichen Variable auch unterschiedlich im Sinne von unterschiedlichen Zust nden behandelt werden Optimierung nach Tiefe des Statecharts F r eine Optimierung der Tiefe betrach ten wir zuerst komplexe Zust nde ohne History Hierbei lassen sich dann OR Zust nde einfach aufl sen indem man nur die inne ren Basic Zust nde benutzt Alle Kanten die Defaulteinstiege nutzen m ssen dann direkt auf untere Zust nde zeigen und Bedingungen die auf Oberzust nde testen m ssen dann alle Unterzust nde testen AND Zust nde sind hierbei ein wenig komplexer Man betra
148. bar oder unsichtbar Parameter visible wenn true setze sichtbar sonst sunsichtbar setDefaultVisible boolean void Setzt diese Defaultm ig auf visible isVisible boolean Pr ft ob die Komponenten momentan sichtbar ist isDefaultVisible boolean Pr ft ob die Komponente Defaultm ig sichtbar ist setOn void Die Behandlung einer setOn Aktion setOff void Die Behandlung einer setOff Aktion createComponent gt Component Erzeugt die Java Component toString String berschreibt die Methode der Klasse MarkableTyp Liefert eine String Identifikation getActorType int Implementation f r Actor Interface liefert ACTOR_DIALOG getCalledAction int CalledAction Liefert die Aktionen die zugeordnet sind wenn die mehrere sind wird i ausgewertet Parameter i welche Aktion getCalledAction CalledAction Liefert die erste zugeordnete Aktion removeAction Aktion void L scht eine Aktion doesAction Aktion gt boolean Pr ft ob die bergebene Aktion von dieser Komponente erzeugt wird Parameter action zu pr fende Aktion getCalledActions AktKomplex 253 Package score LogDM Kapitel D Programmdokumentation 254 Liefert die w hrend der Simulation entstandenen Aktionen getActions AktKomplex Liefert die dieser Komponenten zugeordneten Aktionen throwAktionen gt void Interner Aufruf das die Aktione
149. beiten kann ohne den automatisch erzeugten Code im Detail nachvollziehen zu m ssen Einerseits gilt dies f r die frei programmierbaren Abschnitte die innerhalb des Statecharts gespeichert werden n mlich den externen Aktionen und Bedingungen Bei den Aktionen ist es jedoch nicht notwendig auf s mtliche Teile des Statecharts Ein fluss nehmen zu k nnen wie es auf Seite 83 bereits erw hnt wurde sollten derartige Aktionen als interne Aktionen programmiert werden Analoges gilt f r die Bedingun gen wenn sie Eigenschaften testen deren Wahrheitswert sich innerhalb des Statecharts ermitteln l sst sollten sie m glichst als interne Bedingungen programmiert werden Die Ereignisse andererseits lassen sich aus dem Statechart auslagern wenn dieses lediglich als Modul betrachtet wird wie es im letzten Abschnitt beschrieben wurde Hierf r ben tigt das Statechart selbstverst ndlich eine zug ngliche Methode die ein solches Ereignis an das Statechart weiterreicht Die einfachste Art dem Statechart zu sagen dass ein bestimmtes Ereignis aufgetreten ist d rfte im bergeben eines Strings liegen Beim Konstruieren des Statecharts wird f r jedes derartige Ereignis ein Text festgelegt durch den sie sich unterscheiden lassen und das ausf hrbare Programm verwendet dieselben Texte auch au erhalb des Statechart Moduls Die Struktur des erzeugten Quelltexts lie e sich auch feiner unterteilen wenn im Programmpaket ein Programmstruktur Editor enthalt
150. bergang dargestellt der an einem Punkt beginnt und in mehreren Unterzust nden des AND Zustands endet Die zweite Gruppe der Konnektoren wird durch die OR Konnektoren Bedingung condition Verteiler switch und Verzweigung junction gebildet Diese Konnekto ren haben gemein dass sie mehrere eingehende Verbindungen akzeptieren und dar ber hinaus mehrere ausgehende Verbindungen anbieten von denen jedoch nur genau eine durch die Kombination von zugeordnetem Ereignis und Bedinung erlaubt sein darf um das Modell deterministisch zu halten W ren mehrere berg nge m glich so ist zun chst nicht bestimmt welcher von diesen wirklich ausgef hrt wird Auf die hier auftretende Frage des Determinismus wird in Abschnitt 2 4 noch genauer eingegan gen Letztendlich gibt es in Statemate noch einen weiteren Typ von Konnektor den sogenannten Diagramm Konnektor der lediglich zwei unterschiedliche Punkte eines Diagramms identifiziert und es dadurch m glich macht lange Pfeile quer durch das 21ygl HN96 S 302 oder HP98b S 65 ff Konnektoren 43 Konnektoren 44 Kapitel 2 Varianten von Statecharts in der Literatur Diagramm zu vermeiden Da die Semantik hierdurch nicht erweitert wird sollte man die einander entsprechenden Paare von Diagramm Konnektoren laut Harel so betrach ten als seien sie eigentlich ein einziger OR Konnektor der einfach an mehreren Stel len auftaucht Entsprechungen der Konnektoren in UML Der Be
151. bergebenen Zustands save EasyFileWriter void berschreibt die Methode der Klasse Aktion Speichert diese Aktion in den EasyFileWriter exportQT EasyFileWriter gt void berschreibt die Methode der Klasse Aktion Exportiert den Quelltext f r diese Aktion in den EasyFileWriter D 3 14 Klasse DeepClearHistoryAktion extends score Aktionen Aktion implements score Aktionen HistoryAktion Diese Klasse spezialisiert die abstrakte Klasse Aktion als DeepClearHistory Aktion Konstruktoren DeepClearHistoryAktion ZustOR Erschafft eine neue Aktion die die History des bergebenen Zustands und seiner Unterzust nde l scht Methoden getState ZustOR Gibt den OR Zustand zur ck der zu dieser Aktion geh rt setState ZustOR void Setzt den OR Zustand f r diese Aktion execute boolean berschreibt die Methode der Klasse Aktion L scht die History des beim Erschaffen bergebenen Zustands und seiner Unterzust nde save EasyFileWriter gt void berschreibt die Methode der Klasse Aktion Speichert die Aktion in den EasyFileWriter exportQT EasyFileWriter gt void berschreibt die Methode der Klasse Aktion Exportiert den Quelltext f r diese Aktion in den EasyFileWriter D 3 15 Klasse ExportAktion abstrakte Klasse extends score Aktionen AktKomplex Diese Klasse erweitert die AktKomplex f r den Export Sie wird lediglich mit einem String aufgeru fen der die zugeh rige
152. bgerundeten Kanten dargestellt Atomare Zust nde haben einen schwarzen Rand AND und OR Zust nde einen blauen So k nnen komplexe von atomaren Zust nden auch dann unterschieden werden wenn die logische Darstel lungstiefe die Unterzust nde nicht anzeigen w rde AND Zust nde unterscheiden sich von OR Zust nden dadurch dass sie eine Unterteilung Partitionierung haben Diese wird durch eine horizontale oder vertikale gestrichelte Linie dargestellt Wird ein ato marer Zustand als Endzustand markiert so wird er invertiert dargestellt nur atomare Zust nde k nnen Endzust nde sein Abbildung 5 7 zeigt ein paar Beispielzust nde Kapitel 5 Benutzerhandbuch Der grafische Editor atomar Endzustand OR Zustand AND Zustand atomar Abbildung 5 7 Verschiedene Zust nde in der Ansicht Das Popup Men f r Zust nde Das Popup Men das f r jeden Zustand aufgeru fen werden kann enth lt die folgenden Eintr ge State Properties ffnet einen neuen Inspektor der sich auf den Zustand bezieht View State ffnet eine Ansicht f r diesen Zustand Delete State L scht diesen Zustand Hierbei ist zu beachten dass Unterzust nde nicht gel scht werden sondern lediglich in der Zustandshierarchie eine Ebene aufr cken State In Actions Bietet die M glichkeit die Aktionen die beim Betreten des Zu stands ausgel st werden zu modifizieren State Out Actions Hier ber k nnen die Aktionen die beim Verlassen des Zustand
153. ble boolean Implementation des Observer Interfaces setErrorPrinter ErrorPrinter void Setzt den ErrorPrinter dieser Sicht setUndoManager UndoManager void Setzt den UndoManager f r alle Sichten setModell GrafSCModell void Setzt das Modell auf das alle Sichten zugreifen werden getModell GrafSCModell Gibt das grafische Statechart Modell zur ck setMarkedObject GrafTyp gt void Setzt den bergebenen GrafTyp im grafischen Modell als aktives Objekt getMarkedObject GrafTyp Gibt das momentan aktive Objekt aus dem Grafischen Modell zur ck getTopState GrafZustand 226 Kapitel D Programmdokumentation Package score GrafSCM Gibt den Oberzustand dieser Sicht zur ck setTopState GrafZustand void Setzt den Oberzustand dieser Sicht isTopLevelView boolean Gibt an ob diese Sicht sich auf den virtuellen Oberzustand bezieht setDepth int void Setzt die Zeichentiefe getDepth int Gibt die Zeichentiefe zur ck setZoom double void Setzt die Vergr erung getZoom double Gibt die Vergr erung zur ck setOffset Point void Setzt den Zeichenoffset des Oberzustands dieser Sicht getOffset Point2D Double Gibt den Zeichenoffset des Oberzustands dieser Sicht zur ck showLabels boolean Gibt an ob Texte gezeichnet werden showLabels boolean boolean Setzt die Angabe ob Texte gezeichnet werden sollen
154. blicken auch aus diesem Grund kann es unpraktisch sein wenn der Editor einige Vorg nge nicht zul sst Dazu geh ren etwa berg nge deren Startzust nde oder End zust nde in der Hierarchie bereinander liegen Der Zugriff auf den oberen dieser Zust nde ist in diesem Fall nicht sinnvoll da die Verbindung auch ohne ihn diesel be Reaktion des Statecharts ausl sen w rde Besitzt die Zustandshierarchie allerdings viele Ebenen und sind vielleicht sogar Konnektoren in den bergang eingebaut so ist dieses Problem nicht mit einem Blick zu erfassen Hier w re eine ausf hrlichere Feh lermeldung hilfreich die ein Verifikator leichter und passender als ein Editor anbieten kann Eine weitere denkbare Konstruktion die zu Probleme f hren kann sind Grup pen von Konnektoren die durch berg nge zu einem Rundlauf zusammengeschlossen sind Wenn das Statechart einen solchen Kreis betritt und nicht verlassen kann so kann es in der Simulation des Statecharts oder auch einem deratig implementierten System passieren dass das System keinen g ltigen Zustand erreichen kann und quasi gefangen ist Es kann sein dass die berg nge eines solchen Kreise mit entsprechen den Ereignissen oder Bedingungen versehen sind so dass einerseits das komplette Durchlaufen der Schleife nicht m glich ist und andererseits in jedem Fall ein Aus gang gefunden werden kann Die Pr fung ob die Pfeile diese Eigenschaft besitzen ist jedoch nicht einfach wie im n chst
155. bt das System entsprechend lange in einem Zustand stehen Eine solche Simulation ist einerseits f r den Anfang der Testphase denkbar wenn noch nicht gezielt nach proble matischen Stellen des Statecharts gesucht wird Andererseits l sst sie sich auch f r den Abschluss der Testphase nutzen um einen Gesamteindruck des modellierten System zu erhalten Umgang mit Quelltext in der Simulation Wie bereits in Abschnitt 69 auf Seite 65 erw hnt kann ein Statechart Editor f r erwei terte Statecharts auch die M glichkeit bieten Quelltextsegmente einzugeben Dadurch stellt sich die Frage inwieweit der Simulator auf diese zus tzliche Programmierung eingeht 28 gl HN96 S 294 29 vgl die Beschreibung des Simulators von SCed in Abschnitt 6 5 2 Tester 79 Tester 80 Kapitel 3 Werkzeuge f r Statecharts Im Idealfall sollte dieser Quelltext selbstverst ndlich komplett ausgef hrt wer den Erst dadurch kann die Simulation wirklich sicherstellen dass das modellierte Sy stem auch so funktioniert wie es geplant ist Andererseits hie e dies dass der Simula tor beliebigen Quelltext parsen und ausf hren k nnen muss eine Anforderung deren Umfang die Grenzen eines solchen Werkzeugs sicherlich bersteigt Entweder wird also der Sprachumfang deutlich eingeschr nkt oder es muss eine andere M glichkeit gefunden werden den Quelltext auszuf hren Eine denkbare L sung besteht in folgendem Vorgehen ist das Statechart vollst ndi
156. bt den Konnektor Hook zur ck oder Null wenn keiner existiert translate Hashtable GrafPfeil Gibt eine bersetzung dieses Pfeils zur ck toString String berschreibt die Methode der Klasse MarkableTyp Gibt eine String Darstellung dieses grafischen Pfeils zur ck getLabelText String Gibt den Text zur ck den ein Label f r diesen Pfeil anzeigen sollte setLabel GrafText void Setzt den bergebenen Text als Label f r diesen Pfeil Ein vorher eventuell vorhandenes Label wird dabei gel scht connectin GrafHook GrafPunkt Point2D Double gt void Macht den bergebenen Hook zu einem In Connector falls er noch keiner ist In jedem Fall wird ein neuer Abschnitt vom bergebenen Startpunkt hinzugef gt connectOut GrafHook GrafPunkt Point2D Double void Macht den bergebenen Hook zu einem Out Connector falls er noch keiner ist In jedem Fall wird ein neuer Abschnitt zum bergebenen Endpunkt hinzugef gt draw Painter GrafModellSicht void Zeichnet diesen Pfeil in den bergebenen Painter f r die bergebene GrafModellSicht getSectWith GrafHook gt GPAbschnitt Gibt den Abschnitt zur ck in dem dieser Hook liegt oder Null wenn kein solcher gefunden wurde Es wird lediglich der erste Treffer zur ckgegeben und nicht getestet ob mehrere existie ren getPosOfConnin GrafModellSicht Vector Gibt die Zeichenkoordinaten der Nachbarzust ndes eines In Connect Hook zur ck Es wird
157. bute doRefresh boolean Gibt an ob ein Refresh wirklich weitergegeben werden soll Konstruktoren LogComponent Erschafft ein neues LogComponent Der Observer wird entsprechend gesetzt Methoden setObserver Observer void Setzt den Observer f r alle LogComponents die zuk nftig erschaffen werden refresh Observable void Leitet ein Refresh an das LogSCModell weiter refresh void Leitet ein Refresh an das LogSCModell weiter D 11 7 Klasse LogPfeil abstrakte Klasse extends score LogSCM LogComponent implements score Aktionen Actor Diese Klasse stellt eine logische Verbindung dar Attribute event Ereignis das Ereignis das diesen bergang ausl st condition Bedingung die Bedingung die diesen bergang kontrolliert actions AktKomplex die komplexe Aktion die bei diesem bergang ausgef hrt wird type int der Typ dieses Pfeils ARROW_1_1 int CONST Konstante falls es sich um einen 1 1 bergang handelt ARROW_1_N inf CONST Konstante falls es sich um einen 1 N bergang handelt ARROW_N_1 int CONST Konstante falls es sich um einen N 1 bergang handelt Konstruktoren LogPfeil int Kapitel D Programmdokumentation Package score LogSCM Setzt den logischen Pfeil auf den folgenden Anfangszustand Es gibt kein notwendiges Ereignis die Bedingung ist immer erf llt keine Aktion wird ausgef hrt LogPfeil Erschafft einen leeren LogPfeil
158. ce 3 gt 4 Differs from Reference adjust Abbildung 5 5 Inspektor mit markiertem Textlabel 5 3 4 Weitere Elemente im Inspektor Die anderen grafischen Elemente im Inspektor Konnektoren History etc zeigen die kanonischen Eigenschaften des Objekts im Inspektor Dies sind Kombinationen der oben beschriebenen New Project axi File Edit View Tools BUTTONID 0 ID 0 Label Ein Aus Actions throw BUTTONO pressed UserDialog y Visible y Abbildung 5 6 Inspektor mit markiertem Button Dialogkomponenten werden im Inspektor wie in Abbildung 5 6 angezeigt Hier bei sind ID ist die eindeutige Dialogkomponenten ID F r die Sprache der Bedingungen siehe Abschnitt 5 6 109 Der Inspektor Kapitel 5 Benutzerhandbuch Label ist ein frei zu vergebener Name Actions die von dieser Komponente ausgel sten Aktionen UserDialog gibt an ob diese Komponente auch im Export ber cksichtigt wird Visible gibt an ob die Komponente zu Beginn einer Simulation oder beim Start des exportierten Programms sichtbar ist 5 35 Men s SCed verwendet zwei Arten von Men s einerseits gibt es die Pull down Men s in der Men leiste die sich im Hauptfenster befinden und auf das gesamte Statechart bezie hen andererseits gibt es zu allen markierbaren Objekten in der Zeichenfl che und im Dialog Editor ein Popup Men das mit der rechten Maustaste ge ffnet werden kann Die Popup Men s f
159. ch eine weitere Variable zu bergeben hierbei wird entsprechend dem Typ der bergebenen Variable verfahren getString Gibt eine String Repr sentation dieser Variablen zur ck getint Gibt den Wert der Variablen als int zur ck falls dies ein g ltigen Wert ergibt getDouble Gibt den Wert der Variablen als double zur ck falls dies ein g ltigen Wert ergibt Kapitel 5 Benutzerhandbuch Erweitern des Programms um neue Dialogkomponenten compare Operator Wert Als Operator sind die ffentlichen Konstanten public static final int der Klasse Variable m glich EQUAL UNEQUAL LESS GREATER LESS_OR_EQUAL und GREATER_OR_EQUAL F r den Wert sind int dou ble String oder andere Variablen erlaubt der Vergleich erfolgt dem bergebenen Typ entsprechend In Aktionen sind dar ber hinaus die folgenden Methoden vorhanden throwEvent String Lediglich in Aktionen kann mit dieser Methode ein neues Er eignis erzeugt werden Der bergebene String der den Namen des Ereignisses angibt dient hierbei als Kennzeichner visible int invisible int Diese Methoden machen Dialogkomponenten sichbar be ziehungsweise unsichtbar Sie erwarten den Identifier des Dialogelements als Parameter Welche Wirkung ein solcher Aufruf auf die unterschiedlichen Typen von Dialogelementen hat wird in Abschnitt 5 8 beschrieben on int off int Diese Methoden schalten Dialogkomponenten ein beziehungsweise aus Sie erwarten den Identifier des Dialoge
160. chehen Horrocks Fassung unterscheidet sich von beiden von Harel beschriebenen Formen da weder immer genau eine In stanz des parametrisierten Zustands aktiv ist noch mehrere Instanzen nebeneinander existieren k nnen Die Idee der Parametrisierung von Zust nden wird dar ber hinaus in der Litera tur so gut wie nicht aufgegriffen und es gibt auch keine einheitliche Notation daf r In Statemate gibt es stattdessen Generische Charts die eine hnliche Funktion erf llen wie AND parametrisierte Zust nde da sie mehrfach instanziiert werden k nnen Die se Charts sind anders als die urspr nglichen parametrisierten Zust nde aus dem zentralen Statechart ausgekoppelt und kommunizieren mit ihm nur noch ber Parame ter Insbesondere sind sie damit auch vom eigentlichen Namensraum und der Sichtbar keit von Ereignissen getrennt Auf diese Weise werden einige Probleme gel st die bei der AND Parametrisierung auftreten auf diese Schwierigkeiten soll in Abschnitt 4 2 1 genauer eingegangen werden 2 2 4 Denkbare Erweiterungen des Zustandsbegriffs In seiner ersten Beschreibung der Statecharts verfolgt Harel nicht den in sp teren Schriften blichen Ansatz die Zust nde streng hierarchisch zu ordnen sondern l sst zu dass sich zwei Zust nde die im Prinzip auf einer Hierarchieebene liegen teil weise berschneiden siehe Abbildung 2 1 Dies hat den Vorteil dass man Zust nde gruppieren kann die nicht notwendigerweise demselben ber
161. chen k nnen Es ist daher am sinnvollsten den Benutzer die Gr e der einzelnen Zust nde selbst w hlen zu lassen Es gibt allerdings noch eine weitere M glichkeit verschiedene Darstellungstiefen gleichzeitig anzuzeigen es k nnen mehrere Ansichten auf das Statechart in verschie denen Fenstern zugelassen werden die soweit es die Tiefenvergr erung betrifft voneinander unabh ngig sind Wichtige Ausschnitte k nnen dadurch vergr ert dar gestellt werden w hrend der Rest entweder gar nicht oder bersichtlich in geringer Tiefe angezeigt wird Dieses Konzept entspricht dar berhinaus dem Vorgehen bei der Entwicklung ei nes Statecharts Einzelne Zust nde oder Partitionen stellen in vielen F llen modulare Einheiten dar die entweder keine oder nur wenige Verbindungen in andere Teile des Statecharts besitzen Solange dieser Abschnitt des Statecharts konstruiert wird ist es daher nicht n tig das komplette Chart zu sehen Hier ist eine Ansicht des momentan bearbeiteten Zustands sinnvoll bei der eine gro e Tiefe eingestellt ist Das fertige Mo dul kann dann in das globale Statechart eingef gt werden hierbei reicht es meist aus das Modul nur als einfachen Zustand ohne feinere Struktur zu sehen 2vgl Sch93 S 155 Das genannte Optimierungsproblem l sst sich mittels des entsprechenden Schwellwertproblems auf das Bin Packing Problem zur ckf hren Kapitel 3 Werkzeuge f r Statecharts Grafische Editoren Flexible Verbin
162. chert werden kann createFilename String String Gibt einen Filename zur ck unter dem diese JavaBed gespeichert werden kann D 5 Package score control D 5 1 Klassenhierarchie java lang Object gt score control AbstractParser gt score control BedParser gt score control Parser 2 score control CommandPort 2 score control Command Window gt score control Commander gt score control Interpreter gt score control SCInterpreter gt score control MainWindow gt score control Scanner gt score control Token gt score util Observable gt score control Property View gt score control Inspector D 5 2 Interface Logger Dies ist ein Interface f r Log Funktionen addLine String void F gt eine Zeile ins Log hinzu 203 Package score control Kapitel D Programmdokumentation D 5 3 Klasse AbstractParser abstrakte Klasse extends java lang Object Abstrakte Parser Klasse f r BedParser und Parser Attribute log Logger Ausgabe Logger success boolean War das Parsen fehlerfrei Konstruktoren AbstractParser Logger Konstruktor Methoden error String Token int Gibt eine Fehlermeldung aus error String int Gibt eine Fehlermeldung aus checkError Token int Pr ft ob das Token ein Error Token war wasSuccess boolean Liefert zur ck ob das Parsen erfolgreich war parse int Startet das Parsen D 5 4 Klasse Bed
163. chieht die mehr als ein Objekt betreffen Es ist leicht m glich dass nach einer solchen Aktion vorangegangen nderungen in mehreren der beteiligten Objekte nicht mehr zur ckge nommen werden k nnen Au erdem sollte auch das L schen eines Zustands zur ckgenommen werden k nnen so dass dieser Zustand durch das L schen nicht unzug nglich werden darf Dieses Problem lie e sich auf unterschiedliche Arten l sen wie etwa durch die oben erw hnte zus tzliche globale Liste der nderungen oder auch nur L schungen oder einen Papierkorb aus dem gel schte Zust nde wieder hervorgeholt werden k nnen Ereignisse aktiv oder passiv Ereignisse werden in der Literatur einheitlich daf r verwendet berg nge auszul sen Unter genauerer Betrachtung stellt sich heraus dass dieses Ausl sen auch mittels einer Bedingung modelliert werden kann wie etwa occurred event Durch eine solche Bedingung k nnte man diese Abfrage mit in den Bedingungsteil bernehmen Damit ist es insbesondere m glich die Ereignisse in komplexere Anfragen einzubinden und auch das Nicht Eintreten eines Ereignisses zur Bedingung zu machen Diese Entscheidung hat jedoch weitreichende Konsequenzen auf den Quelltext des modellierten Systems Kann davon ausgegangen werden dass f r jeden ber gang zun chst ein Ereignis notwendig ist das diesen bergang ausl st so kann sich das System den Gro teil der Laufzeit in einer Art Wartezustand befinden bis ein Ereig n
164. chreibt die Methode der Klasse Aktion F hrt prinzipiell den bergebenen Quelltext aus getName String Gibt den Namen dieser JavaAktion zur ck getCommand String Gibt den auszuf hrenden Quelltext dieser JavaAktion zur ck save EasyFileWriter gt void berschreibt die Methode der Klasse Aktion Speichert den Aufruf dieser Aktion in den EasyFileWriter saveBody EasyFileWriter void Speichert den Quelltext zu dieser Aktion in den EasyFileWriter exportQT EasyFileWriter gt void berschreibt die Methode der Klasse Aktion Exportiert diese Java Aktion Wenn sie aus dem String LOAD lt filename gt besteht wird versucht das File extern lt filename gt action an dieser Stelle einzuf gen Schl gt dies fehl wird statt dessen ein entsprechender Kommentar in das erzeugte File eingetragen createFilename String String String Diese statische Methode erzeugt zu einem Projekt und einem File einen Filename unter dem eine JavaAktion gespeichert werden kann createFilename String String Gibt einen Filenamen zur ck unter dem diese JavaAktion gespeichert werden kann D 3 18 Klasse SetDialogOnAktion extends score Aktionen Aktion implements score Aktionen DialogAktion Diese Klasse spezialisiert die abstrakte Klasse Aktion als SetDialogOnAktion Konstruktoren SetDialogOnAktion DlgKomponente boolean 192 Kapitel D Programmdokumentation Erzeugt eine neue Aktion die
165. chreibt die Methode der Klasse GrafPunkt Gibt die Tiefe zur ck die unterhalb dieses Zustands existiert Eine Tiefe von 0 gibt an dass es unterhalb dieses Zustands keine weiteren gibt getLocalOffset double double int Point2D Double berschreibt die Methode der Klasse GrafPunkt Gibt den Punkt zur ck der die bergebenen Koordinaten auf den untersten Zustand umrechnet oder Null wenn diese Koordinaten nicht in diesem Punkt liegen oder es sich um eine Partition handelt addPosOfCrossing Vector GrafPunkt Vector GrafModellSicht gt void berschreibt die Methode der Klasse GrafPunkt F gt zum bergebenen Vector Paare von Zeichenkoordinaten der Hooks hinzu deren Verbin dungsstrecke die Grenzen dieses Zustands schneidet addHooksJustOutside Vector GrafPunkt void berschreibt die Methode der Klasse GrafPunkt F gt zum bergebenen Vector die Hooks hinzu die gerade au erhalb des angegebenen Zustands liegen canBeExited gt boolean Gibt an ob dieser Zustand verlassen werden kann canExit GrafPunkt boolean berschreibt die Methode der Klasse GrafPunkt Gibt an ob von diesem Punkt oder seinen Unterpunkten Verbindungen ausgehen die den berge benen GrafPunkt verlassen getLocalAlignment double double int int berschreibt die Methode der Klasse GrafPunkt Gibt den entsprechenden Wert aus javax swing SwingConstants zur ck NORTH NOR HT_EAST EAST und CENTER Als illegaler Wert
166. chst einmal sollten offensichtliche Konstruktionsfehler ge meldet werden Um dem Benutzer das Konstruieren des Statecharts jedoch m glichst komfortabel zu machen muss genau darauf geachtet werden ob diese Fehler m gli cherweise bereits vom Editor abgefangen und verhindert werden sollten Einige Einga ben k nnen grunds tzlich verboten werden andere Unstimmigkeiten in der Konstruk tion sind vor bergehend sogar unvermeidlich hier Kann erst nach Fertigstellung des Statecharts entschieden werden ob immer noch Fehler vorhanden sind Wie bereits in Abschnitt 1 3 2 erw hnt d rfen Verbindungen zum Beispiel kei ne Partitionsgrenzen schneiden Werden Pfeile im Editor jedoch so eingef gt dass sie Start und Endpunkt zun chst in gerader Linie verbinden so kann dies durchaus auf treten Bei einem Editor der mit den in Abschnitt 67 auf Seite 61 beschriebenen Hooks arbeitet kann der Benutzer diesen Pfeil dann so modifizieren dass er den Richtlini en entspricht dieser Vorgang wird in Abbildung 3 5 dargestellt Dies muss jedoch erst zum Ende der Konstruktion geschehen sein so dass der Editor das Einf gen eines solchen Pfeils der zun chst ung ltig ist nicht automatisch verhindern darf A a 1 I 1 1 a b Abbildung 3 5 Ein zun chst ung ltiger Pfeil wird korrigiert Tester 71 Tester 72 Kapitel 3 Werkzeuge f r Statecharts Andere Probleme sind w hrend der Konstruktionsphase nicht leicht zu ber
167. cht ob sie genau einen Default Einstieg besitzen Au erdem muss jeder Default Einstieg genau einen ausgehenden 1 1 Pfeil besitzen der weder Ereignisse Bedingungen noch Aktionen besitzen darf und auf einen Zustand enden muss der im selben OR Zustand wie der Default Einstieg liegt Die folgenden Meldungen k nnen ausgegeben werden has no default entry Diese Meldung kann je nach Bezug mit State Partiti on oder The global Statechart beginnen Sie kann entweder einen Fehler anzeigen oder nur eine Warnung sein je nach dem ob der Default Einstieg wirklich gebraucht wird Ein OR Zustand etwa der nur dadurch betreten wird dass einer seiner Unter zust nde aktiviert wird braucht zun chst keinen Default Einstieg Die Warnung wird dennoch ausgegeben da sich eventuell durch Weiterentwicklung des Statecharts diese Notwendigkeit ergeben k nnte 129 Der Verifikator Kapitel 5 Benutzerhandbuch 130 has more than one default entry Diese Fehlermeldung wird dann angezeigt wenn in einem OR Zustand einer Partition oder der obersten Ebene des globalen Statecharts mehr als ein Default Einstieg angegeben ist Entsprechend beginnt diese Meldung mit State Partition oder The global Statechart Default entry does not lie within an OR state Wenn ein Default Einstiegs Konnektor in einen atomaren Zustand gelegt wird wird diese Fehlermeldung ausge geben da der Bezug dieses Konnektors dann nicht klar is
168. cht ist dadurch allerdings noch nicht bestimmt Das Problem der Posi tionierung stellt sich schon dadurch dass die Unterzust nde eines OR Zustands nicht willk rlich verteilt sein sollten und ein AND Zustand grafisch kompliziert in Partitio nen unterteilt werden darf Bei komplizierten Statecharts mit vielen Hierarchieebenen wird allerdings selbst bei guter Konstruktion der berblick schnell verloren gehen wenn der Benutzer st ndig s mtliche Details angezeigt bekommt Es sollte daher die M glichkeit geben eine Auswahl zu treffen was angezeigt werden soll Denkbar ist zum Beispiel dass nur bestimmte Typen von Elementen angezeigt werden wie etwa Zust nde oder Pfeile Dies ist jedoch nur bei wenigen Typen sinnvoll da bei ausgeblendeten berg ngen die Dynamik des Statecharts nicht mehr erkennbar ist und kaum ein Benutzer wird ein Statechart verstehen k nnen ohne die Zust nde zu sehen Andererseits kann es durchaus hilfreich sein die im Statechart notierten Texte zu verbergen da dadurch die Struktur klarer werden kann Eine andere M glichkeit ist es die Ansicht auf gewisse Hierarchieebenen zu beschr nken Dabei werden nicht f r alle Zust nde auch die darin befindlichen Un terzust nde angezeigt sondern Zust nde die in der Hierarchie zu tief liegen ver nachl ssigt Diese Eigenschaft der Ansicht wollen wir hier mit dem Begriff Tiefe oder Tiefenvergr erung bezeichnen Es sollte darauf geachtet werden dass die Auswahl der P
169. chte auch hier wie der nur die Basic Zust nde und bilde f r alle m glichen Kombinationen neue Zust nde und arbeite mit diesen Die Kanten m ssen entsprechend den Kombinationen gezogen 85 Automatismen Kapitel 3 Werkzeuge f r Statecharts 86 Abbildung 3 12 Optimierung durch Parallelisierung werden Das Beispiel in Abbildung 3 12 zeigt den prinzipiellen Vorgang in umgekehr ter Richtung Wenn nun Historyeinstiege ins Spiel kommen m ssen f r jeden komplexen Zu stand entsprechend die History Informationen zum Beispiel in einer Variablen ge speichert werden Die Kanten m ssen dann gegebenenfalls abh ngig von dem Wert dieser Variablen verzweigen Bemerkung Einer der gr ten Vorteile von Statecharts ist die bersichtlichkeit und die leichte Durchschaubarkeit von Entw rfen Gerade diese kann jedoch sehr leiden wenn man ein Statechart nach obigen Kriterien optimiert Ob eine Optimierung den noch sinnvoll sein kann muss dann im Einzelfall entschieden werden Es lassen sich keine allgemeing ltigen Regeln f r die Abw gung zwischen bersichtlichkeit und Optimierung angeben 3 3 2 Der Quelltext Generator Einer der Vorteile von Statecharts ist deren streng logische Konstruktion Das Um setzen eines Diagramms in Quelltext ist daher sehr einfach und sogar automatisch m glich Aus dieser berlegung bietet es sich an einen Quelltext Generator in die Sammlung der Werkzeuge aufzunehmen Benutz
170. coming transitions Ein Konnektor der kein Default Entry Konnektor ist hat im Statechart nur mit eingehenden Verbindungen eine sinnvolle Aufgabe F r alle in diesem Sinne berfl ssigen Konnektoren wird diese Fehlermel dung ausgegeben State has no incoming transitions Wenn ein Zustand weder direkt noch ber Ver bindungen die auf Unterzust nde f hren betreten werden kann wird diese Fehlermel dung ausgegeben M glicherweise wurde lediglich vergessen den Default Einstieg des dar berliegenden OR Zustands entsprechend zu setzen End states End state has outgoing transitions Wird ein Endzustand betreten wird dadurch das System angehalten es ist also nicht sinnvoll von einem solchen Zustand ausge hende Verbindungen einzugeben Geschieht dies trotzdem wird diese Fehlermeldung ausgegeben End state has actions on deactivation Da ein Endzustand nicht verlassen werden kann macht es auch keinen Sinn Aktionen f r diesen Fall anzugeben Geschieht dies trotzdem wird diese Fehlermeldung ausgegeben Zu beachten ist hierbei das Folgende ist als einzige Aktion eine Throw Aktion mit einem Ereignis angegeben dessen Text mit exit beginnt so geht der Verifikator davon aus dass es sich um die automatisch generierte Aktion handelt Dieser Fall ruft keine Fehlermeldung hervor 133 Der Verifikator Kapitel 5 Benutzerhandbuch 134 State cannot be left and is not marked as end state Wenn ein Zustand der nicht als Endzustan
171. d markiert ist nicht verlassen werden kann wird diese Warnung ausge geben Hierbei werden auch von Unter und Oberzust nden ausgehende Verbindungen beachtet Es wird jedoch nicht berpr ft ob ein solcher Zustand eventuell Endzust nde enth lt und die Konstruktion daher konsistent ist Statechart has no end states Diese Warnung zeigt an dass im gesamten Statechart kein einziger Zustand als Endzustand markiert ist Ein solches System kann nur von au en beendet werden Da dies aber gew nscht sein kann ist diese Meldung nur eine Warnung All labels show references Arrow label differs from actual values of that arrow An Pfeilen k nnen Texte angebracht werden an denen die Ereignisse Bedingungen und Aktionen angezeigt werden die zu diesem Pfeil geh ren Es wird in vielen F llen sinnvoll sein den Text dieses Bezeichners nachtr glich von Hand zu modifizieren beispielsweise zu k rzen Diese Warnung wird ausgegeben wenn ein derart ge nderter Text gefunden wird Die ser Test ist jedoch in der Grundeinstellung nicht angew hlt It s a miracle we need Queen Kapitel 6 Funktionsweise der Module 6 1 berblick In diesem Kapitel sollen die einzelnen Module von SCed kurz in ihrer Funktionswei se vorgestellt werden Es soll dadurch helfen das Programm zu verstehen ohne die gesamte Programmdokumentation durcharbeiten zu m ssen Einen berblick ber die Zusammenarbeit der Pakete gibt Abbildung 6 1 Aufgabe dieses Kapitels
172. d nicht zwischen atomaren OR oder AND Zust nden unterschieden isBasic boolean Gibt true zur ck wenn es sich um einen atomaren Zustand handelt isComplex boolean Gibt true zur ck wenn es sich um einen komplexen Zustand handelt isOR boolean Gibt true zur ck wenn es sich um einen OR Zustand handelt isAND gt boolean Gibt true zur ck wenn es sich um einen AND Zustand handelt addIncoming LogPfeil gt void F gt eine Verbindung zu den eingehenden Verbindungen dieses logischen Punktes hinzu Es wird nicht berpr ft ob diese Verbindung schon eingetragen war sie ist aber danach mindestens einmal eingetragen addOutgoing LogPfeil void F gt eine Verbindung zu den ausgehenden Verbindungen dieses logischen Punktes hinzu Es wird nicht berpr ft ob diese Verbindung schon eingetragen war sie ist aber danach mindestens einmal eingetragen removelncoming LogPfeil void Kapitel D Programmdokumentation L scht eine Verbindung aus den eingehenden Verbindungen auch wenn sie mehrfach eingetragen war removeOutgoing LogPfeil void L scht eine Verbindung aus den ausgehenden Verbindungen auch wenn sie mehrfach eingetragen war substatesExist boolean Gibt an ob dieser logische Punkt Unterpunkte hat translate Hashtable LogPunkt Gibt eine bersetzung dieses LogPunkts zur ck exportQT EasyFileWriter void Exportiert den Quelltext f r diesen LogPunkt in de
173. dabei interne und externe Ereignisse zu unterscheiden Als interne Ereignisse werden diejenigen bezeichnet die das Statechart selbst er zeugt Dazu geh ren etwa solche die automatisch beim Betreten oder Verlassen eines Zustands auftreten aber auch diejenigen die im Aktionsteil eines bergangs ausgel st werden Bei den externen Ereignissen die f r das Statechart gewisserma en von au en auftauchen gibt es andererseits so viele M glichkeiten dass diese in der Literatur nicht genauer untersucht werden 2 5 1 Sichtbarkeitsdauer Allen Ereignissen ist gemein dass sie nicht lange sichtbar sind Was darunter jedoch genau zu verstehen ist h ngt vom gew hlten Zeitmodell ab Basiert das Statechart auf 39 gl Rum99 S 484 40 m Zusammenhang mit SCed sei jedoch auf die berlegungen zur Programmierung solcher Ereig nisse in Abschnitt 3 3 2 hingewiesen Ereignisse 51 Ereignisse 52 Kapitel 2 Varianten von Statecharts in der Literatur einer diskreten Zeit so sind Ereignisse blicherweise nur einen Zeitschritt lang vorhan den Sie k nnen in diesem ihrer Erzeugung folgenden Zeitschritt berg nge ausl sen sofern die zugeh rigen Bedingungen das zulassen und werden dann wieder gel scht Einige Autoren definieren die Sichtbarkeit von Ereignissen derart dass sie schon in dem Zeitschritt in dem sie erzeugt wurden weitere berg nge ausl sen k nnen In der UML die wie bereits erw hnt von einer kontinuierlichen Z
174. das Programm main String void Aufruf des Programms als Application D 2 Package score AbstractModell D 2 1 Klassenhierarchie java lang Object gt score util Observable gt score AbstractModell AbstractModell gt score AbstractModell MarkableTyp D 2 2 Klasse AbstractModell abstrakte Klasse extends score util Observable implements score util Observer Das abstrakte Obermodell des grafischen und logischen Modells 179 Package score AbstractModell Kapitel D Programmdokumentation Attribute marked Vector Vektor der sich alle markierten Objekte merkt markingOperation boolean Flag zeigt an ob die letzte Operation die Markierung ge ndert hat doRefresh boolean Gibt an ob ein Refresh durchgeleitet wird Mit dieser Variablen kann man verhindern dass beim Aufruf von refresh tats chlich ein Refresh durchgef hrt wird falls meh rere nderungen gleichzeitig durchgef hrt werden sollen Konstruktoren AbstractModell Konstruktor L scht den Vektor mit den markierten Objekten getMarkedObject MarkableTyp R ckgabewert das erste markierte Objekt oder null wenn kein Objekt markiert ist Liefert das markierte Objekt getMarkedObjects Enumeration R ckgabewert Aufz hlung aller markierten Objekte oder null wenn kein Objekt markiert ist Liefert eine Enumeration aller markierten Objekte nothingMarked boolean R ckgabewert true wenn Obj
175. de entsprechen gr tenteils denen der in Statemate implementierten Zust nde Es gibt jedoch ein paar Unterschiede die im folgenden beschrieben werden Bedingungen am Defaulteinstieg Wie in Abschnitt 2 4 1 erw hnt lassen Harel und Namaad zus tzliche Ereignisse und Bedingungen an Verbindungen zu die von einem Defaulteinstiegs Konnektor ausge hen Dies kann jedoch bei komplexeren Statecharts sehr schnell dazu f hren dass der Betrachter nicht mehr erkennt welche Einschr nkungen tats chlich f r einen ber gang gelten Insbesondere in Kombination mit Historyeinstiegen verschleiert dies die Funktionsweise des Statecharts wie beispielsweise in Abbildung 4 1 dargestellt 93 94 Die Grundelemente Kapitel 4 Die implementierte Fassung T N i gt I i I C A tl 2 I I 1 l I I O 5 L J Abbildung 4 1 Konstruktion mit Bedingungen am Defaulteinstieg Angenommen Zustand A ist aktiviert und der bergang t m glich der bergang t jedoch nicht Dann h ngt es davon ab ob die History von Partition P2 auf C oder D verweist f r die History D ist der bergang von A auf B erlaubt f r die History C nicht da dieser Zustand nicht ber seinen Defaulteinstieg betreten werden kann Problema tisch ist hierbei einerseits die Verteilung der ausschlaggebenden Elemente ber weit auseinanderliegende Bereiche des Statecharts andererseits auch die Tatsache dass der Wert der History sich nicht nur auf den
176. dell ist dies die Klasse die den grafischen vir tuellen Oberzustand enth lt Sie beobachtet ihre Komponenten um nderungen an den Benutzer weitergeben zu k nnen GrafModellSicht Eine Sicht auf das grafische Modell bezieht sich immer auf einen Zustand F r jeden Zustand sind Vergr erung und Darstellungstiefe un abh ngig w hlbar und diese Angaben werden in der zugeh rigen Sicht gespei chert so dass sie beim n chsten Aufruf auf die vorherigen Werte gesetzt werden k nnen GrafTyp Diese Klasse erweitert die abstrakte Klasse MarkableTyp aus dem abstrak ten Modell zur Oberklasse f r s mtliche grafischen Komponenten Alle Unter klassen von GrafTyp k nnen vom Benutzer angeklickt und im Inspektor darge stellt werden GrafPunkt Der GrafPunkt erweitert den GrafTyp analog zum LogPunkt im logischen Modell er ist die abstrakte Oberklasse f r alle Punkte des Statecharts an denen berg nge beginnen oder enden k nnen Die entsprechenden grafischen Pfeile 3vgl die Beschreibung der Ansichten auf Seite 60 139 Die Datenstruktur des Statecharts Kapitel 6 Funktionsweise der Module 140 werden in dieser Klasse gespeichert Au erdem besitzt ein grafischer Punkt eine Gr e und einen Offset bez glich der linken oberen Ecke seines Oberzustands GrafZustand Der grafische Zustand entspricht den atomaren Zust nden und den OR Zust nden des logischen Modells Er kann Unterzust nde und eine eigene Sicht enthalten Wird ein neue
177. den herausschieben ndert sich gegebenenfalls der Typ des dar berlie genden Zustands von atomar auf OR oder umgekehrt Einige Objekte Zust nde und Konnektoren k nnen in ihrer Gr e skaliert wer den Bewegen Sie den Pfeil dazu in die rechte untere Ecke des Objekts bis der Cursor zu einem Pfeil nach rechts unten wird Dann k nnen Sie durch Dr cken und Schieben die neue Gr e einstellen Bei Zust nden ist die neue Gr e aller dings nur dann g ltig wenn durch die Ver nderung keine Unterzust nde hinzu kommen oder aus dem Zustand hinausgeraten Die folgenden Objekte k nnen verschoben werden Zust nde Hooks alle Kon nektoren Default History etc Partitionsgrenzen und Textfelder Partitions grenzen k nnen jedoch nur so verschoben werden dass sich die Zuordnung der Unterzust nde zu den Partitionen dadurch nicht ndert Ol Mit diesem Werkzeug k nnen Sie einen neuen Zustand einf gen Bewegen Sie den Pfeil an die Stelle an der der Zustand eingef gt werden soll Dr cken Sie nun die linke Maustaste und bestimmen Sie die Gr e des neuen Zustands Zum Einf gen die Maustaste loslassen An einer ung ltigen Position z B wenn der Zustandsrand einen anderen Zustand schneiden w rde kann kein neuer Zustand eingef gt werden Wird der Zustand so positioniert dass er andere Zust nde enth lt so wird er als OR Zustand erschaffen Ansonsten als atomarer Zustand i El Mit diesen beiden Werkzeugen f gen Sie in Zus
178. des markierte Objekt wird durch eine Registerkarte repr sentiert doch nur eine von diesen ist komplett lesbar Eine berlegung zum Undo Wie im letzten Abschnitt erw hnt gibt es zu den einzelnen Elementen aus denen ein Statechart aufgebaut ist eine geraume Anzahl an Informationen Es liegt daher nahe insbesondere wenn eine objektorientierte Programmiersprache verwandt wird die Zust nde und berg nge als Objekte zu implementieren Dies erm glicht bei der Undo Redo Funktion eine interessante Variante Selbstverst ndlich sollte ein Statechart Editor eine globale Liste der nderun gen an der Darstellung f hren so dass diese oder wenigstens die letzte nderung zur ckgenommen werden k nnen dies ist heutzutage bei den meisten grafischen Edi toren m glich Werden die Zust nde jedoch als einzelne Objekte verwaltet so ist es auch denkbar dass jedes dieser Objekte eine eigene Liste von nderungen verwaltet So k nnen nderungen an einem Zustand zur ckgenommen werden w hrend sp ter vorgenommene nderungen an einem anderen Zustand unber hrt bleiben Wird bei spielsweise der Name eines Zustands ge ndert und darauf ein zweiter verschoben w re es nicht einsichtig wenn die nderung des Namens nicht zur ckgenommen wer den k nnte ohne dass auch die Verschiebung r ckg ngig gemacht wird Bekannte Verfahren Die Vorteile dieses Konzepts zeigen sich im Vergleich mit anderen bekannten Verfahren Ein h ufig implementiertes K
179. die Partitionsgrenzen Partitioners erweitert Kapitel 6 Funktionsweise der Module Die Datenstruktur des Statecharts Observable GrafSCM LogSCModell 1 gratscModen GrafTyp LogPunkt i f GrafPunkt GrafText GrafPfeil E 1 LogPfeil q 1 SCEditor GrafModellSicht g GrafZustand GrafKonnektor GPAbschnitt Du O 1 Observer lt GrafAND GrafTopLevelZust GrafHook we Tas 1 Partitioner Abbildung 6 3 Klassen berblick des Pakets GrafSCM Andererseits ist die Darstellung der berg nge im grafischen Modell aufwendiger als im logischen so dass hier neue Klassen hinzukommen die Abschnitte eines Pfeils und die sogenannten Hooks das sind die Eckpunkte eines Pfeils und gleichzeitig die Stellen an denen neue Abschnitte angekoppelt werden k nnen Besonders erw hnenswert ist die Verwaltung der Koordinaten als lokale Koordi naten das hei t die Offsets der Zust nde sind bez glich ihres direkten Oberzustands angegeben Das erm glicht das einfache Verschieben eines Zustands mitsamt seiner Unterzust nde oder auch das einfache Beschr nken der Ansicht auf einen einzigen Zustand Zu den einzelnen Klassen sollten die folgenden Dinge gesagt werden GrafSCModell Analog zum LogSCMo
180. die in den Bedingungen verwendet werden k nnen stehen f r folgende m glichen atomaren Bedingungen InState Die wohl h ufigste Bedingung pr ft ob ein bestimmter Zustand aktiviert ist So k nnen Transitionen unter der Bedingung dass das Statechart einen be stimmten Zustand hat konstruiert werden HasHistory Diese Bedingung fragt einen Zustand ob er eine History hat also ob er bereits einmal betreten wurde und die History seitdem nicht mehr gel scht wurde JavaBed Dieser Typ steht f r eine frei in Java Code formulierte Funktion die einen Wert vom Typ boolean zur ckliefert Sie wird analog zur JavaAktion nicht in der Simulation gepr ft sondern nur f r den Quelltextexport benutzt Eine ent sprechende Simulation muss hier mit Hilfe von Dialogkomponenten stattfinden VarBedingung Mit dieser Bedingung k nnen Werte von Variablen berpr ft werden Diese Bedingung vergleicht eine Variable mit einem Wert der eine Zahl ein String oder eine andere Variable sein kann Dabei sind die Operatoren gt lt lt gt und lt gt m glich 4 2 4 Die Variablen Um den Umstand dass Java Bedingungen nicht im Simulator getestet werden k nnen ein wenig zu relativieren haben wir Variablen eingef hrt Diese existieren w hrend der Simulation in einem globalen Namensraum und k nnen in Bedingungen mit den Operatoren gleich ungleich lt gt gr er gt kleiner lt kleiner oder gleich lt und gr er oder gleich gt get
181. dig daf r zu sorgen dass die Ereignisse die auf einen Zustand keinen Einfluss haben sollen nicht eintreten k nnen Beispielsweise k nnte es sich um einen Knopf handeln der das letz te Element einer Liste entfernt wenn die Liste leer ist besitzt er keinerlei Funktion mehr F r diese F lle sollte ein derartiges Dialogelement unsichtbar gemacht werden In der Literatur wird hierf r meist eine separate Tabelle vorgeschlagen in der zu je dem Dialogelement angegeben ist in welchen Zust nden sie sichtbar enabled visible beziehungsweise unsichtbar disabled invisible sind 2 6 Bedingungen Bedingungen werden in der Literatur allgemein als geschlossene boolesche Ausdr cke beschrieben Sie sind in diesem Sinne aus atomaren Bedingungen mittels der Ope ratoren AND OR und NOT sowie Klammern zusammengesetzt und m ssen erf llt sein um den zugeh rigen bergang zu erm glichen ber atomare Bedingungen wird nicht viel ausgesagt allerdings treten sie meist als einfache Abfragen von Variablen auf wie etwa X gt 0 oder als Tests ob bestimmte Zust nde des Statecharts gerade aktiv sind beispielsweise in Z Dar ber hinaus sind auch Bedingungen denkbar deren Wahrheitswerte nicht aus dem Statechart selbst abgeleitet werden k nnen Analog zu den Ereignissen kann man also von internen und externen Bedingungen sprechen F r die theoretische Betrach tung der Statecharts ist diese Unterscheidung nebens chlich beim Modellieren eines
182. dingungen in allen m glichen F llen determiniert ist Auch Races lassen sich durch eine Simulation feststellen Wichtig ist hierbei dass der Simulator dadurch nicht in 5ygl Abschnitt 2 4 2 Tester 77 Tester 78 Kapitel 3 Werkzeuge f r Statecharts eine Schleife geraten kann sondern der Benutzer im Notfall jegliche Berechnung ab brechen kann H ufig wird Software nur dadurch getestet dass einige F lle durchgespielt wer den die m glicherweise zu Fehlern f hren k nnten Man kann jedoch nicht sicher sein dass diese Tests wirklich alle Fehler finden Es gibt zwei grunds tzliche Methoden um Software zu testen Das white box testing bei der besondere Testf lle konstruiert wer den die gezielt auf die Struktur des Systems eingehen und das black box testing bei dem mehr oder weniger willk rliche Tests durchgef hrt werden Die erste Methode l sst sich offensichtlich nur dann anwenden wenn der Tester Kenntnis von der Pro grammstruktur hat sie hat allerdings den Vorteil dass sich dabei leicht Situationen herbeif hren lassen die eine hohe Wahrscheinlichkeit haben Fehler zu finden Die Klarheit der Struktur von Statecharts erm glicht es derartige Situationen recht einfach zu identifizieren und herzustellen So k nnen bestimmte Zustands berg nge gezielt angesteuert werden um festzustellen wo die tats chliche Struktur des Programms von der geplanten abweicht Ein Simulator kann das white box testing unterst t
183. direkten Unterzustand sondern auch paralle le Zust nde auswirkt Insbesondere sind die Reaktionen des modellierten Systems in Abh ngigkeit der History so unterschiedlich dass es nicht ohne weiteres m glich ist diese ohne eine Simulation einzusch tzen Wir haben uns daher entschieden beim Defaulteinstieg weder weitere Ereignis se noch Bedingungen zuzulassen da damit diese Un bersichtlichkeit ausgeschlossen wird Dar ber hinaus k nnen in SCed nur direkte Unterzust nde als Defaulteinstieg markiert werden Dass sich ein Defaulteinstieg nicht ber mehrere Ebenen der Zu standshierarchie erstrecken darf ist keine wirkliche Einschr nkung da ebensogut in jedem Zustand ein eigener Defaulteinstieg definiert werden kann dies tr gt au er dem zur bersichtlichkeit der Konstruktion bei Doch auch ein Defaulteinstieg der auf einen Konnektor verweist kann die Klarheit des Statecharts beeintr chtigen Hier zu sei auf das in Abschnitt 2 3 2 auf Seite 46 beschriebene Problem im Verbindung mit einem History Konnektor oder auf Abbildung 2 9 verwiesen die Schwierigkeiten mit zusammengesetzten Verbindungen darstellt Parametrisierung Parametrisierte Zust nde sind solche die im Statechart nur einmal spezifiziert sind zur Laufzeit des Systems aber wie mehrere verschiedene Zust nde gehandhabt werden Es gibt hierf r verschiedene Konzepte die in Abschnitt 2 2 3 auf Seite 39 vorgestellt wurden Wir haben uns f r eine Variante entschieden di
184. dliche Anforderungen W hrend bei Zust nden etwa der Oberzustand interessiert sollten bei Pfeilen Start und Endzust nde angegeben werden Ein besonderer Kom fort f r den Benutzer w re es wenn er auch mittels des Inspektors durch das Statechart navigieren kann das hei t von einem markierten Pfeil aus dessen Startzustand mar kieren kann Dies l sst sich recht naheliegend dadurch verwirklichen dass derartige Kapitel 3 Werkzeuge f r Statecharts Grafische Editoren Informationen im Inspektor auf Kn pfen dargestellt werden durch die das entspre chende Objekt markiert werden kann Wenn der Editor die M glichkeit bietet nicht nur ein einzelnes Objekt mar kieren zu k nnen sondern auch mehrere eventuell unterschiedliche Elemente des Statecharts so muss der Inspektor darauf angemessen reagieren Obwohl es denkbar ist dass lediglich das erste markierte Objekt angezeigt wird und die brigen ignoriert werden ist dies keine w nschenswerte Methode Auf diese Weise w rde der Inspektor nicht mehr der grafischen Ansicht entsprechen Andererseits ist es kaum sinnvoll al le markierten Objekte nebeneinander im Inspektor anzuzeigen da hierdurch sehr viel Platz auf dem Bildschirm in Anspruch genommen werden kann Vielmehr sollte der In spektor anzeigen dass das momentan detailliert dargestellte Statechart Element nicht das einzige markierte Objekt ist Dies ist beispielsweise durch die Benutzung der soge nannten Registerkarten m glich je
185. draw void berschreibt die Methode der Klasse DrawableRubber Zeichnen erase void berschreibt die Methode der Klasse DrawableRubber L schen D 13 10 Klasse RubberRoundRect extends score SCEditor RubberRectangle Ein Rechteck mit runden Ecken Konstruktoren RubberRoundRect Graphics Point Point Color Konstruktor RubberRoundRect Graphics Point Point Color Point Konstruktor RubberRoundRect Graphics Point Dimension Color Konstruktor RubberRoundRect Graphics Point Dimension Color Point Konstruktor Methoden draw gt void berschreibt die Methode der Klasse RubberRectangle Zeichnen 277 Package score SCEditor Kapitel D Programmdokumentation 278 D 13 11 Klasse RubberSet extends score SCEditor DrawableRubber Diese Klasse merkt sich eine Menge von Rubber Objekten und bearbeitet sie wie eines Konstruktoren RubberSet Konstruktor RubberSet Graphics Point Enumeration Color double int Konstruktor Parameter g Graphics in die die Rubber gezeichnet werden p Starposition der B nder e Aufz hlung von Point2D Double c Farbe der B nder zoom Skalierung rubber_type Art der Rubber RubberSet Graphics Point Enumeration Color int Konstruktor add DrawableRubber gt DrawableRubber Einen neuen Rubber zum Set hinzuf gen draw void berschreibt die Methode der Klasse DrawableRubber Alle R
186. dungen Ein weiteres Problem eines Statechart Editors ist das Ziehen der Verbindungen Wird partielle Tiefenvergr erung erlaubt kann sich die Lage zweier Zust nde zueinander deutlich ndern wenn diese in unterschiedlicher Darstellungstiefe angezeigt werden Verbindungen zwischen diesen Zust nden m ssen mit diesen Ver nderungen derart umgehen k nnen dass das angezeigte Bild f r den Benutzer immer sinnvoll ist Es ist daher nicht ratsam den Benutzer in diesem Fall Verbindungen durch frei gezeichnete Pfeile in das Statechart einf gen zu lassen Andererseits ist es nicht einfach Verbin dungen durch die Lage der Zust nde automatisch bestimmen zu lassen So muss etwa darauf geachtet werden dass Pfeile zwischen zwei Zust nden nicht pl tzlich durch einen dritten hindurchgehen oder andere Verbindungen derart schneiden dass nicht mehr erkennbar ist welcher Anfang zu welchem Ende geh rt Dar ber hinaus soll ten die Pfeile beschriftet sein und diese Beschriftungen d rfen sich auch dann nicht berlagern wenn beispielsweise zwei Zust nde durch mehr als einen Pfeil miteinander verbunden sind Werden verschiedene Ansichten auf das Statechart angezeigt die unterschiedli che Darstellungstiefen besitzen so sind zwei M glichkeiten denkbar wie dies mit dem Ziehen von Pfeilen w hrend der Konstruktion verbunden werden kann Einerseits kann ein Pfeil in einer Ansicht begonnen und in einer anderen beendet werden Dies hat den Vorteil dass de
187. dungsbereiche 172 Aufteilung 313 Aussagenlogik 26 B Bedingung 19 26 53 120 Erweiterungen 53 im Quelltext 87 im Systemdialog 81 in SCed 101 Sprache der 26 Benutzerhandbuch 105 D Datenformat Grammatik 175 Defaulteinstieg 30 39 mit Bedingungen 93 Verifikation 74 Defaulteinstiegsfunktion 24 Definition Formal 19 grafisch 27 Grundlagen 17 temporal 31 von Statecharts 17 Delay 55 Determinismus 49 der Bedingungen 72 Dialog 102 Editor 66 118 144 System 80 Variablen 69 Zugriff 68 zum Statechart 65 67 Kommunikation 68 zur Simulation 78 Dialogkomponente 103 Button 103 Checkbox 103 Modellierung 67 mit mehreren Ereignissen 69 Popup 103 Radiobutton 103 Modellierung 67 Sichtbarkeitstabelle 53 68 Textfeld 103 Timer 103 untypisch 119 Dialogmodell 142 Direktheit 21 E Editor Dialog 66 144 Statechart 57 143 Eigenschaftsleiste 118 Eingabemaske 144 Ereignis 19 24 51 121 aufgeschoben 52 deferred 52 im Quelltext 87 im Systemdialog 80 in SCed 98 in Bedingungen 64 negiert 64 Sichtbarkeitsdauer 51 Ermittlung aktivierter Oberzust nde 34 aktivierter Unterzust nde 34 deaktivierter Oberzust nde 35 deaktivierter Unterzust nde 34 des Folgeereignisses 33 des Folgezustand 32 Error InvalidConstructionError 219 Exception NoTargetStateException 284 F Fixpunktfreiheit 21 Folgeereignis 33 Folgezustand 32 G Generische Charts 40 96 Grafisc
188. durch ein nichtgef llten Kreis mit einem H dargestellt Der Historyeinstieg darf eingehende Kanten haben um den Historyeinstieg zu benutzen und ausgehende welche benutzt werden wenn keine History vorhanden ist Ziele von Kanten die von Historyeinstiegen ausgehen m ssen wie bei den De faulteinstiegen in denselben Partitionen liegen wie der Historyeinstieg selbst Siehe Abbildungen 1 10 und 1 11 Abbildung 1 10 Korrekte Historyeinstiege 5In dieser Definition ist dies der Einfachheit halber nicht beachtet Andere Modelle wie auch unsere Implementation erlauben dies jedoch Siehe hierzu auch Abschnitt 2 3 2 30 Kapitel 1 Definition von Statecharts Temporale Auswertung Abbildung 1 11 Fehlerhafte Historyeinstiege 1 3 5 Konnektoren Konnektoren werden grafisch durch nichtausgef llte Kreise dargestellt F r sie gilt bez glich der Platzierung und der Anbindung an Kanten das f r Zust nde Gesagte Wir verzichten hier auf eine genauere Definition da sie auch in unserem theoretischen Modell nicht definiert sind 1 4 Temporale Auswertung In diesem Abschnitt soll erl utert werden wie sich ein Statechart w hrend seiner Ab arbeitung verh lt und wie sich seine Konfiguration ndert 1 4 1 Der Zustand eines Statecharts Die Konfiguration eines Statecharts ist abh ngig von der Zeit Wir benutzen auch hier eine diskrete Zeitr Nein Die komplette Konfiguration eines Statecharts l sst sich als ein Vekt
189. e Konstruktoren Dimension Double Konstruktor tut nix Dimension Double double double Konstruktor Dimension Double Dimension Double Copy Konstruktor Methoden getHeight gt double tiberschreibt die Methode der Klasse Dimension2D Liefert die H he getWidth double tiberschreibt die Methode der Klasse Dimension2D Liefert die Breite equals Dimension Double boolean Pr ft auf Gleichheit setSize Dimension Double void Setzt die Gr e neu setSize double double void berschreibt die Methode der Klasse Dimension2D Setzt die Gr e neu getLength gt double Liefert die L nge als Vektor interpretiert normalize Dimension Double Dimension Double Normalisiert als Vektor normalize Dimension Double Normalisiert als Vektor Kapitel D Programmdokumentation Package score util D 16 10 Klasse EasyFileWriter extends java lang Object Diese Klasse erweitert im Prinzip den File Writer durch mehrere Schreibmethoden die verschiedene Ty pen akzeptieren Tats chlich wird der FileWriter intern gehalten damit der EasyFileWriter durch den EasyStringWriter erweitert werden kann Attribute newline String CONST die Systemabh ngige Konstante f r einen Zeilenumbruch Konstruktoren EasyFileWriter String Erschafft einen neuen EasyFileWriter der in die Datei mit dem angegebenen Namen schreiben wird EasyFileWriter File Erschafft ein
190. e Editoren gung impliziert wird gesondert zu kennzeichnen und lediglich die restlichen konti nuierlich zu berpr fen Zwei weitere Stufen Ein Editor in der bisher dargestellten Form erm glicht bereits das vollst ndige Erstel len eines Statecharts wie es in der formalen Definition beschrieben wird Mit einem Simulator wie er in Abschnitt 3 2 2 auf Seite 77 beschrieben wird l sst sich die Funk tionsweise des so entworfenen Statecharts testen und das Aktivieren und Deaktivieren von Zust nden nachvollziehen Um dem System das von diesem Statechart modelliert wird jedoch auch die M glichkeit der Interaktion mit der Au enwelt zu geben muss dieser reine Kern des Statecharts erweitert werden So sollten die verwendbaren Ereignisse Bedingungen und Aktionen sich nicht auf das Statechart beschr nken wie es bisher der Fall ist In der Literatur wird von solchen M glichkeiten so selbstverst ndlich ausgegangen dass diesbez glich keine genauere Betrachtung angestellt wird Die spezielle Erweiterung um Dialoge Wenn durch das Statechart beliebige Hard ware beschrieben wird was ohne nderungen an der Definition m glich ist so muss die Interaktion mit dem Benutzer nat rlich in jedem System individuell erm glicht werden dies ist auf viele Arten denkbar und l sst sich nicht problemlos generali sieren Bei Softwaresystemen die mit dem Benutzer ber Bildschirm Maus und Ta statur in Verbindung stehen wird die Kommunikati
191. e M glichkeiten nicht ausreichen Deshalb wird in einigen Schriften vorgeschlagen Verbindungen mit Priorit ten zu versehen die im Falle mehrerer m glicher berg nge eine deterministische Ent scheidung herbeif hren Diese Priorit ten sind meist ganze Zahlen beispielsweise in HN96 Horrocks geht sogar noch einen Schritt weiter und empfiehlt die Benutzung von Priorit ten ausdr cklich um Bedingungen zu vereinfachen Er f hrt als Beispiel das folgende Detail eines Taschenrechners an bei dem es um die Division durch Null geht Es wurden bereits zwei Operanden der zweite davon 0 und der Bruchstrich als Operator eingegeben und nun wird die Taste gedr ckt Die beiden Statecharts a und b in Abbildung 2 10 modellieren in quivalenter Weise die Reaktionen auf den Fehler doch ist die Fassung b aufgrund der Priorit ten in eckigen Klammern leichter zu berblicken eingegeben Operator nicht OR Operand2 nicht 0 2 eingegeben Ergebnis Ergebnis Division durch Null a eingegeben 1 eingegeben Operator ist AND Operator ist AND Operand2 ist 0 Operand2 ist 0 Division durch Null b Abbildung 2 10 Priorit ten an berg ngen Nichtdeterminismus Kann auch ber mehrere Hierarchieebenen hinweg auftreten Dies ist zum Beispiel der Fall wenn ein bestimmter Zustand und ein ihm untergeord neter Zustand zur gleichen Zeit verlassen werden sollen In Statemate wurde f r diese
192. e ThrowAktion oo se ss basas 195 Package score Bedingungen o oa cc o cte cerana san 196 D 4 1 Klassenhierarchie doo oe aoea a e ee en 196 D 4 2 Interface ConditionAskable 196 D 4 3 Klasse BedAND nme 196 D 4 4 Klasse BedAtomar 2 2 2 on onen 197 D45 Klasse B ding ng os gt 22 020 sr resi daiat 197 D 4 6 Klasse BedKomplex oso e cacce ua macama aaa 198 DA Klasse BedNOT o o aariaa dc Bi iena za 199 DAS Klasse BedOR u eatea iia RA io e A 200 D 4 9 Klasse CompVarBed naaa 200 D 4 10 Klasse ExportBedingung 201 D 4 11 Klasse HasHistoryBed naaa 201 D 4 12 Klasse InStateBed 202 D 4 13 Klasse JavaBed 202 Package SCOTECOM L eos socs na er na ne nn 203 D 5 1 Klassenhier rchie s s s 2 2 02 ss 8a Re an 203 D 5 2 Interface Lopper o oc oa ocd oca u a 203 D33 Klasse AbstractParser occiso 204 DS4 Klasse BedP rser lt o o cis caida eatea eiva iaia 204 D 5 5 Klasse Commander so 222mm 205 D30 Klasse CommandPott 2 22 2 2 2er u 0 RR 207 D 5 7 Klasse CommandWindow 2222 22er 208 D 5 8 Klasse Inspector u eeoa ern 208 D59 Klasse Interpreten a RA 208 D 5 10 Klasse MainWindow 2 22 essre sspe ssdaanaa 209 DS Klasse Paber oo za le en a ea 210 D 5 12 Klasse Pr pertyView os cs 22420200 2 000 0 211 B 5 13 Klasse Scanner lt o cecco perida ana ae ra 212 D3 14 Klasse SChiterpieler 2 2 2 2220ER ee 212 DO LS Klass
193. e Token oi co ne a ee 213 Package scote DEJO o sa u ara rare rear 213 D 6 1 Klassenhier rchie 2 2 2 22 4 Rss Ks a 213 D 6 2 Klasse DialogEdit0r o o 213 D 6 3 Klasse DlgKompSelektor o 214 Package seore doelet oo 4 occa oct eama ta ei ad 214 D 7 1 Blassenhierarchle ooo oa ae ken 214 D72 KlasseLaleXDoclet a es oca ceriose edana 215 Package score Ereignisse o o 216 D 8 1 Klassenhierarchie 216 D 8 2 Interface EvyentAskable o oco cscoco sas 216 D33 Klasse EINS a a dd 216 Inhaltsverzeichnis 10 D 8 4 Klasse EreisnisEdit 2 2 22 8 ocres 217 Ds Klasse EventDialog o 2 o ec 2 4 eK ee 217 D 8 6 Klasse InlineEventDialog 218 D 9 Package score GrafSCM 2 ess RR nee 218 DY 1 Klassenmierarchie corria ss ehe ana 218 D 9 2 Error InvalidConstructionError 219 D93 Klasse GPAbschnitt gt o o oco ciora ma ca cremi cia 219 D94 Klasse GrafAND o ea O a 221 D95 Klasse GrafHo k gt 2 2 2 22 20 cr ee kaaa a 222 D 9 6 Klasse GrafKonnektor o o 225 D 9 7 Klasse GrafModellSicht 226 D 9 8 Klasse GrafModellSicht visHook 231 D 9 9 Klasse GrafModellSicht visText 231 D3 10 Klasse GrafPfeil o 2 a meate i Er va see 231 D9 11 Klasse GrafPunkt s ars a i a a 234 D 9 12 Klasse GrafSCModell oo
194. e bitte das folgende Werkzeug Mit diesem Werkzeug k nnen Sie eine reflexive Kante an einen Zustand setzen Bewegen Sie den Cursor ber den Zustand und dr cken Sie die linke Maustaste Eine Kante von diesem Zustand zu sich selbst mit zwei mittleren Hooks wird nun automatisch eingef gt e o e El Mit diesen Werkzeugen fiigen Sie einen Defaulteinstieg einen Konnektor einen Historyeinstieg oder einen tiefen Historyeinstieg ein Dazu bewegen Sie den Cursor an die Position an der das Objekt eingef gt werden soll dr cken die linke Maustaste und ziehen es auf die gew nschte Gr e Bei ung ltigen Positionen wird kein Feedback Objekt angezeigt Text MEEDE er Mit diesem Werkzeug k nnen Sie ein Textfeld einf gen Bewegen Sie den Cur sor an die gew nschte Position und dr cken Sie die linke Maustaste Mit diesem Werkzeug k nnen Sie einen Zustand inklusive seiner Unterzust nde kopieren Die Benutzung erfolgt genauso wie beim Verschieben von Zust nden mit dem Unterschied dass nach der Aktion Original und Kopie existieren Die Events enter 1 enter 7 enter 2 enter 5 enter 3 enter 6 enter 4 enter 8 exit 1 jexit 7 exit 2 jexit 5 exit 3 lexit 6 exit 4 lexit 8 Yariablen a a Ok Abbildung 5 11 Die Ersetzungstabelle in den Zust nden und Kanten benutzten Ereignisse und Variablen k nnen mit Hilfe der Ersetzungstabelle siehe Abbildung 5 11 durch neue Ereigni
195. e der Klasse D gKomponente Setzt den Label exportQT EasyFileWriter gt void berschreibt die Methode der Klasse D gKomponente Exportiert den zugeh rigen Quelltext D 10 6 Klasse DIgKomponente abstrakte Klasse extends score AbstractModell MarkableTyp implements score Aktionen Actor Java awt event ActionListener Abstrakte Oberklasse der Dialogkomponenten Attribute user boolean spezifiziert ob user true oder systemdialog false Komponente visible boolean spezifiziert momentan ob sichtbar oder unsichtbar defVisible boolean Spezifiziert ob Defaultm ig sichtbar oder unsichtbar number int Statischer Z hler der Dialogkomponenten actions AktKomplex Der Dialogkomponenten zugeordnete Aktionen generatedActions AktKomplex W hrend der Simulation generierte Aktionen Konstruktoren DigKomponente Konstruktor Erh ht Komponentenz hler und setzt id setCounter int void Setzt den globalen Komponenten Counter setlD int void 252 Kapitel D Programmdokumentation Package score LogDM Setzt die id dieser Komponente auf i getlD gt int Liefert die ID dieser Komponente setLabel String void Setzt den Label dieser Komponente Parameter s neuer Label getLabel gt String Liefert den Label dieser Komponente setFromVar String gt void Setzt den Wert von einer Variablen setVisible boolean void Macht die Komponenten sicht
196. e der Klasse GrafTyp Gibt zur ck ob dieser Konnektor ein Startpunkt f r einen Pfeil sein darf dies ist immer wahr maybeArrowTarget boolean berschreibt die Methode der Klasse GrafTyp Gibt zur ck ob dieser Konnektor ein Endpunkt f r einen Pfeil sein darf copyToNewSuper GrafZustand Hashtable GrafZustand berschreibt die Methode der Klasse GrafPunkt Kopiert diesen Konnektor in den bergebenen neuen Oberzustand Der R ckgabewert ist immer Null save EasyFileWriter gt void berschreibt die Methode der Klasse GrafPunkt Speichert diesen Konnektor im EasyFileWriter D 9 7 Klasse GrafModellSicht extends score util Observable implements score util Observer innere Klassen GrafModellSicht visHook GrafModellSicht visText Diese Klasse speichert die Eigenschaften die ein Zustand hat wenn er als oberster Zustand einer Ansicht angezeigt wird Attribute undo UndoManager der UndoManager dem alle Sichten nderungen mitteilen doRefresh boolean Wenn diese Variable auf false gesetzt ist wird kein Refresh an die Obser ver dieser Sicht weitergegeben DEF_SIZE Dimension Double CONST Standardgr e einer Sicht BORDER Dimension CONST Standardgr e des Randes einer Sicht Konstruktoren GrafModellSicht GrafZustand Erschafft eine Sicht auf den bergebenen Zustand Die Sicht wird mit neuen default Properties erschaffen replaceObservable Observable Observa
197. e der von Horrocks vorgeschlage nen hnelt durch die Einf hrung von Variablen in das Statechart ist es m glich das Verhalten eines Zustands zu beeinflussen und etwa bei jedem Aufruf eine andere Feh Kapitel 4 Die implementierte Fassung Die Grundelemente lermeldung auszugeben Auf diese Weise l sst sich auch die von Harel vorgeschlagene OR Parametrisierung nachmodellieren da diese Form der Parametrisierung immer ei ner Art Z hler hnlich ist Die AND Parametrisierung wollen wir jedoch nicht unterst tzen Im Folgenden soll diese Einschr nkung erkl rt werden Das Programm SCed verwaltet ein einziges Statechart mit einem globalen Na mensraum Diese Entscheidung wollen wir zun chst begr nden Ein globaler Namens raum ist notwendig da mehrfach auftretende Namen von Zust nden zu uneindeutigen Bez gen f hren k nnen wie die Beispiele in Abbildung 4 2 zeigen Im ersten Fall ist es nicht klar auf welchen der Zust nde mit dem Namen ON sich die Bedingung am bergang in Partition P bezieht da beide auf derselben Ebene der Zustandshierarchie liegen In Fall b w re es sogar denkbar dass sie sich auf die oberhalb liegende Parti tion P2 bezieht so dass die Lokalisierung des Namensraumes hier eine Einschr nkung der M glichkeiten bedeuten w rde N P1 P3 a in ON b Abbildung 4 2 Probleme bei lokalem Namensraum f r Zust nde Auch f r Variablen Ereignis
198. e sp ter im Export nicht mehr erscheinen siehe hierzu auch Abschnitt 94 ab Seite 80 119 Bedingungen Kapitel 5 Benutzerhandbuch 5 5 2 Kommunikation ber Variablen Um die Werte aus Dialogkomponenten auszulesen oder deren Werte zu setzen geh rt zu jeder Dialogkomponente genau eine Variable die deren Inhalt repr sentiert Der Name dieser Variablen bildet sich aus dem Prefix DLG und der ID der Dialogkom ponente So ist DLG5 die Variable der Dialogkomponente mit der ID 5 Mit dieser Variablen k nnen die folgenden Werte gelesen bzw gesetzt werden Button Checkbox Radiobutton Hier wird in der Variablen der Name dieser Kom ponenten verwaltet Timer Hier wird der Timerstartwert verwaltet Textfield Der Inhalt des Textfeldes steht in der Variablen Popup Der Meldungstext steht in der Variablen 5 6 Bedingungen Bedingungen schr nken m gliche Transitionen ein Sie geh ren also zu einer Tran sition und werden im Inspektor editiert Grunds tzlich k nnen hier aussagenlogische Formeln eingegeben werden wobei folgende Punkte zu beachten sind e Die Ausdr cke werden mit geschweiften Klammern geklammert e F r die logische Konjunktion wird das Schl sselwort AND oder amp amp benutzt e F r die logische Disjunktion wird das Schl sselwort OR oder benutzt e Die logische Negation wird durch NOT oder beschrieben e Es gibt keine voreingestellte Auswertreihenfolge Kombinationen der obigen lo gischen Operationen m ss
199. eRelativeTo double double GrafPunkt Point2D Double Rechnet lokale Koordinaten in die eines beliebigen anderen Punktes um isSubPointOf GrafPunkt boolean Gibt zur ck ob dieser Punkt ein Unterpunkt des bergebenen Punktes ist Dabei z hlt nicht nur der direkte Oberzustand Ist der bergebene Punkt dieser Punkt selbst wird ebenfalls true zur ckgegeben isPartition boolean Gibt zur ck ob dieser Punkt eine Partition ist das ist nicht der Fall solange diese Methode nicht berschrieben wird insertNewState double double double double GrafZustand F gt einen neuen Zustand ein muss entsprechend implementiert werden da in der un berschrie benen Form keine inneren Koordinaten akzeptiert werden insertNewConn double double double double int GrafKonnektor F gt einen neuen Konnektor unter diesen Punkt ein Solange diese Methode nicht berschrieben ist wird keine Bewegung akzeptiert sondern ein InvalidConstructionError geworfen isValidMove GrafPunkt double double boolean Gibt an ob eine Bewegung g ltig ist Akzeptiert in dieser Form keine Bewegung die in diesem GrafPunkt aufh rt oder diesen schneidet isValidSize Dimension Double boolean Gibt an ob eine neue Gr e g ltig ist isValidPartitionSize Dimension Double boolean Gibt an ob die Gr e f r diesen Zustand als Partition g ltig ist Muss entsprechend implementiert werden da in der un berschriebenen Fo
200. ebenen Hook geh rt deleteSectionOfHook GrafHook void L scht den Abschnitt zu dem der bergebene Hook geh rt doubleHook GrafHook void vergleiche makeDouble in Klasse score GrafSCM GrafHook Verdoppelt den angegebenen Hook labelArrow GrafHook gt void F gt zum angegebenen Hook ein Pfeil Label hinzu identifyPoint Point int gt GrafTyp Gibt den GrafTyp zur ck der sich an angegeben Position befindet diese Methode erwartet uns kalierte Mauskoordinaten identifyPoint Point2D Double double gt GrafTyp Gibt den GrafTyp des Objektes zur ck das sich an den angegebenen Koordinaten befindet die Zeichenkoordinaten sind Es wird bis in die eingestellte Tiefe vorgedrungen wobei eine Tiefe von 0 hei t dass nur der Zustand selbst betrachtet wird Wenn sich der Punkt nicht innerhalb des Oberzustandes befindet wird Null zur ckgegeben getHookAt Point2D Double double gt GrafHook Gibt einen Hook zur ck falls sich an der angegebenen Stelle einer befindet sonst Null drawsHookAt GrafHook Point2D Double void Sagt der Sicht dass der bergebene Hook an der angegebenen Stelle gezeichnet wird getTextAt Point2D Double double gt GrafText Gibt einen Text zur ck falls sich an der angegebenen Stelle einer befindet sonst Null drawsTextAt GrafText Point2D Double void Sagt der Sicht dass der bergebene Text an der angegebenen Stelle gezeichnet wird getPointAt Point int
201. echung des bergebenen Zustands toggleActivation boolean Schaltet den Zustand von aktiviert auf nicht aktiviert um oder umgekehrt Gibt false zur ck wenn dabei eine NoTargetStateException geworfen wurde deepClearHistory void L scht die History aller Unterzust nde Muss entsprechend implementiert werden setActionsActivate AktKomplex void Setzt die Aktionen beim Aktivieren dieses SimBasic Diese Methode wird nur im exportierten Quelltext ben tigt setActionsDeactivate AktKomplex void Setzt die Aktionen beim Deaktivieren dieses SimBasic Diese Methode wird nur im exportierten Quelltext ben tigt addSubstate SimBasic void F gt einen Unterzustand hinzu solange diese Methode nicht berschrieben wird gibt sie einen Fehler aus da zu einem SimBasic keine Unterzust nde existieren k nnen compareTo Object int Implementation des Comparable Interfaces akzeptiert nur andere SimBasics D 14 5 Klasse SimConn extends score LogSCM LogPunkt Diese Klasse stellt einen Konnektor f r das ausf hrbare Programm dar In der Simulation wird sie nicht ben tigt da dort der LogPunkt selbst benutzt wird Konstruktoren SimConn int int Erschafft einen Universalkonnektor getSuper gt LogPunkt berschreibt die Methode der Klasse LogPunkt Gibt den LogPunkt zur ck in dem dieser Konnektor liegt D 14 6 Klasse SimHist extends score SimSCM SimConn Diese Klasse erweitert d
202. edoch die Beschreibung von ausl serfreien berg ngen der UML in Abschnitt 2 4 3 Kapitel 2 Varianten von Statecharts in der Literatur unterscheidet sich aber von ihnen dadurch dass er immer noch ein echter Zustand ist der aktiviert werden und Ereignisse ausl sen kann Dar ber hinaus gibt es die M glichkeit dem Zustand ein oder mehrere Ereignis Bedingung Aktion Gruppen zuzuweisen die in jedem Zeitschritt getestet und gegebe nenfalls ausgef hrt werden in dem der Zustand aktiv bleibt Dieses Verhalten nennt Harel statische Reaktionen static reactions Es macht jedoch offensichtlich kei nen Sinn diese bei einem transienten Zustand anzugeben 2 2 2 Zusammengesetzte Zust nde Zusammengesetzte Zust nde erm glichen die Tiefe OR Zust nde und Nebenl ufig keit AND Zust nde die Statecharts von Zustands bergangs Diagrammen unter scheiden Deshalb ist es nicht erstaunlich dass sie in der Literatur weitgehend ein heitlich in der folgenden Form beschrieben werden AND Zustand Ein solcher Zustand ist in eine Menge von Unterzust nden aufgeteilt die mit UND verbunden sind Das hei t wenn der Oberzustand aktiviert ist so ist auch in jeder Partition ein Unterzustand aktiviert Harel nennt diese Partitio nen orthogonale Komponenten orthogonal components OR Zustand Eigentlich w re die Bezeichnung XOR Zustand f r diesen Typ von Zu st nden genauer denn sie hneln einem Zustands bergangs Diagramm da
203. eg verweist auf den Zustand play one und beim Betreten dieses Zustands wird der Ti mer auf den Wert 10 gesetzt und gestartet Wenn die Taste Abspielen gedr ckt wird Ereignis PLAY oder der Timer abgelaufen ist Ereignis played wird der Zustand play one verlassen und da bei die Z hlvariable um eins erh ht Abh ngig davon ob noch weitere Nachrich ten abzuspielen sind PlayNr lt Anrufe oder gerade die letzte abgespielt wurde PlayNr gt Anrufe wird der Zustand play one gleich wieder betreten oder der Zustand play calls verlassen Im zweiten Fall geht das Statechart wieder in den Wartezustand ber A 2 4 M glichkeiten der Verfeinerung Wie bereits mehrfach erw hnt ist dieses Modell sehr einfach gehalten Dementspre chend gibt es mehrere Punkte in denen das Modell weitergef hrt werden k nnte Ei nerseits geh rt dazu das Eingeben der Ansagetexte andererseits eine feinere Behand lung der aufgenommenen Nachrichten So bieten die meisten Anrufbeantworter die M glichkeit neue von alten Nachrichten zu unterscheiden und einzelne Nachrichten zu l schen Um dies jedoch komfortabel zu modellieren w ren Felder von Variablen notwendig die in SCed nicht implementiert wurden Andere Erweiterungen best nden 169 Ein einfacher Anrufbeantworter Kapitel A Beispiele plg calls Play Nr gt Anrufe ENTER PlagyNr 1 PlyNr lt Anrufe plyed plg one N ENTER Timer 10 startTimer EXIT PlayNr 1 e
204. ei denen dies nicht der Fall ist werden dann mittels ihres Default Einstiegs aktiviert so dass das Statechart konsistent ist Beispiel Abbildung 6 9 soll dieses Verfahren an einem Beispiel erl utern Zu Anfang sei Zustand B aktiv und damit auch Zustand A Nun soll der bergang t durchgef hrt wer den der zwei Endzust nde besitzt Dazu wird zun chst B deaktivert Zustand A bleibt allerdings aktiviert da er von r nicht verlassen wird Der Simulator wird dem Simula tionsmodell nun mitteilen dass Zustand E zu aktivieren ist Da dies bereits ein atomarer Zustand ist werden lediglich die Oberzust nde aktiviert das hei t die Zust nde E D und C da A bereits aktiv ist wird die Hierarchie nicht weiter nach oben durchgegangen Zustand A kann ja durchaus noch weitere Oberzust nde besitzen Als n chstes teilt der Simulator dem Modell mit dass Zustand G aktiviert werden soll Dabei wird nun in die Hierarchie hinabgestiegen bis der atomare Zustand H erreicht ist Von diesem aus wird die Hierarchie aufsteigend durchlaufen das hei t die Zust nde H und G werden aktiviert Da C bereits aktiviert ist bricht diese aufsteigende Aktivierung bereits fr her ab als die in Partition P gestartete Angenommen damit sind alle berg nge des Zeitschrittes geschehen Nun wer den alle gerade aktivierten AND Zust nde berpr ft ob sie nachgef hrt zu werden brauchen Das ist bei Zustand C der Fall da die Partition P3 immer noch keinen ak tiven
205. eibt die Methode der Klasse Object Gibt diese Bedingung als String zur ck Muss entsprechend implementiert werden und wird f r die Darstellung in Listen ben tigt translate Hashtable Bedingung Gibt eine bersetzung dieser Bedingung zur ck save EasyFileWriter void Speichert die Bedingung im EasyFileWriter exportQT EasyFileWriter gt void Exportiert den Quelltext f r diese Bedingung in den EasyFile Writer D 4 6 Klasse BedKomplex abstrakte Klasse extends score Bedingungen Bedingung Erweitert die Bedingung zu einer komplexen Bedingung d h einer die weitere Unterbedingungen ver walten kann Attribute subConds Vector Der Vector der Unterbedingungen op String Der Operator als String AND oder OR Konstruktoren BedKomplex int Kapitel D Programmdokumentation Package score Bedingungen Erschafft eine neue komplexe Bedingung ohne Unterbedingungen delete void berschreibt die Methode der Klasse Bedingung L scht diese komplexe Bedingung und alle Unterbedingungen addCond Bedingung void F gt eine Unterbedingung hinzu removeCond Bedingung void Entfernt eine Unterbedingung getConds Vector Gibt die Unterbedingungen als Vector zur ck isTrue boolean berschreibt die Methode der Klasse Bedingung Gibt den Wahrheitswert dieser Bedingung zur ck Muss f r AND bzw OR entsprechend imple mentiert werden getCheckedVars Vec
206. einzelnen Schritte dar die solange wiederholt werden bis der Benutzer die Simula tion abbricht oder ein Endzustand aktiviert wird Auf der rechten Seite werden die im Simulator verwalteten Objekte angezeigt die Verbindungen zum Ablauf stellen dar wann und wie sie benutzt werden Analoges gilt f r die linke Seite der Abbildung mit den Objekten die au erhalb des Simulators gehalten werden Kapitel 6 Funktionsweise der Module i E 1 A A 1 E 1 1 T z 1 E E 1 E H 1 a 7 1 i P Dialogelemente is Aktionen lesen und Phase beenden Aktionen sammeln erweitern lt A s 1 z f zo oi Y 1 EA El 1 x 1 E 1 1 E 1 H 1 1 1 i 1 1 1 E log SC Modell f ne El i i 1 N lesen und i i l lesen berg nge l schen i i esse Berachnan er Fa aa ne gar i erzeugen _ berechnen tj i 1 1 erzeugen__ E na po E po 3 o i i i y E o i z i 5 po i i i SimModell F 4 Zustande setzen berg nge 1 erweitern i sai Aklionenilesen ausf hren IT TT l l TE pd i i Oog yl i i En i i i i i fo h h berg E A i t AL Zeit 900180 ergange ii l schen _ l abschlie en emeitern Ereignismenge i r i i i i el pa Ansichten lt aktualisieren I z 7 i i E i Abbildung 6 8 bersicht des Simulationsab
207. einzelnen Test Optionen DO_HOOKS_IN_NON_SUPER int CONST Kennzeichner der einzelnen Test Optionen DO_CROSS_PART_BORDERS int CONST Kennzeichner der einzelnen Test Optionen DO_PARTITIONS int CONST Kennzeichner der einzelnen Test Optionen DO_ARROW STATES int CONST Kennzeichner der einzelnen Test Optionen DO_ALL_EVENTS_USED int CONST Kennzeichner der einzelnen Test Optionen DO_ALL_VARIABLES_USED int CONST Kennzeichner der einzelnen Test Optionen DO_N1_ARROWS_START int CONST Kennzeichner der einzelnen Test Optionen DO_TRIGGER_HIERARCHY int CONST Kennzeichner der einzelnen Test Optionen DO_TRIGGERS_THROWN int CONST Kennzeichner der einzelnen Test Optionen DO_CONNECTOR_LOOPS int CONST Kennzeichner der einzelnen Test Optionen DO_ACGESSIBLE int CONST Kennzeichner der einzelnen Test Optionen DO_END_STATES int CONST Kennzeichner der einzelnen Test Optionen DO_LABELS int CONST Kennzeichner der einzelnen Test Optionen D 17 4 Klasse VPropertyWindow extends java lang Object implements javax swing event ChangeListener java awt event ActionListener Diese Klasse stellt die Eigenschaften die vom Verifikator gepriift werden k nnen dar Konstruktoren VPropertyWindow VProperties Konstruktor Kapitel D Programmdokumentation Package score Verifikator D 17 5 Klasse VWWindow extends java lang Object implements java awt event ActionListener Javax swing event ListSelectionListener innere Kla
208. eit ausgeht ist die Definition der Existenzdauer eines Ereignisses nicht so pr zise Hitz und Kappel schreiben dazu Tritt ein Ereignis ein dem im aktuellen Zustand keine Transition zugeordnet ist wird es ignoriert es gt geht verloren lt beziehungsweise im Zusam menhang mit einer nicht erf llten Bedingung Das in diesem Fall nicht konsumierte lt Ereignis geht verloren das hei t selbst wenn die Bedingung nach Eintritt des Ereignisses irgend wann erf llt wird kann die Transition ohne neuerliches Ereignis nicht durchgef hrt werden Um auf diese Weise keine Ereignisse zu verlieren die aus Sicht des Systems etwas zu fr h eingetreten sind gibt es die M glichkeit ein Ereignis in einem Zustand aufzuschieben beziehungsweise als Ereignis zu markieren das f r diesen Zustand aufgeschoben werden soll meist wird dies als deferred bezeichnet Wenn ein solches Ereignis erzeugt wird aber momentan keinen bergang ausl st so bleibt es erhalten bis eine von zwei M glichkeiten auftritt Entweder l st es doch einen bergang aus weil zum Beispiel nun eine Bedingung erf llt ist die den bergang zuvor blockiert hatte Oder das System geht in einen Zustand ber f r den das Ereignis nicht mehr aufzuschieben ist in diesem Fall wird es wie ein normales Ereignis behandelt und kann gegebenenfalls verlorengehen 2 5 2 Die Rahmenbedingung Ereignisse sind zun chst f r das gesamte System sichtbar und in diesem Sinne glob
209. ek94 von der Beek M A comparison of statechart variants in Formal Techni ques in Real Time and Fault Tolerant Systems L de Roever and J Vyto pil Eds Lecture Notes in Computer Science vol 863 Springer Verlag New York 128 148 Br 00 Br ssler Peter und Siedersleben Johannes Hrsg Softwaretechnik Praxiswissen f r Software Ingenieure Hanser 2000 Br 93 Br ck R Entwurfswerkzeuge f r VLSI Layout Carl Hanser Verlag 1993 Cam98 Cameron Debra GNU Emacs kurz amp gut O Reilly 1998 Ced93 Cedergvist Per Version Management with CVS Signum Support 1993 Dal97 Dalheimer Matthias Kalle Linux Wegweiser zur Programmierung amp Entwicklung O Reilly 1997 Dud96 Bd 1 Duden Rechtschreibung der deutschen Sprache 21 Aufl Duden verlag 1996 G0094 Goosens Michel Mittelbach Frank Samarin Alexander Der MT X Begleiter Addison Wesley 1994 Har87b Harel David Statecharts a Visual Formalism for Complex Systems Science of Computer Programming 8 3 pp 231 274 1987 Har88 Harel David On visual formalism Communications of the ACM Vol 31 No 5 pp 514 531 May 1988 HK99a Hitz Martin Kappel Gerti UML work Von der Analyse zur Realisie rung dpunkt Verlag 1999 319 Literaturverzeichnis 320 HN96 HP98b Hor99a Javal 2 Lat90 Len90 Lev95 Mac Nickel Oest99 Ott90 Ora91 Pnu91 Pratchett Pr
210. ekte markiert sind sonst false Zeigt an ob ein Objekt markiert ist isMarked MarkableTyp boolean R ckgabewert true wenn m markiert ist sonst false Pr ft ob das bergebene Objekt markiert ist Parameter m Zu pr fendes Objekt countMarkedObjects int Gibt die Anzahl der markierten Objekte zur ck setMarkedObject MarkableTyp void Setzt das bergebene Objekt als einziges markiertes Parameter m Objekt das markiert ist setMarkedObjects MarkableTyp gt void Setzt den Array als markierte Objekte Parameter m Array von Objekten die markiert sein sollen addMarkedObject MarkableTyp void F gt das bergebene Objekt zu den markierten hinzu Parameter m Objekt das auch markiert sein soll addMarkedObjects MarkableTyp void F gt ein Array von Objekten den markierten Objekten hinzu Parameter m Array von Objekten die auch markiert sein sollen unmarkObject MarkableTyp void 180 Kapitel D Programmdokumentation Package score AbstractModell Setzt das Objekt m als nicht markiert clearMarkedObjects void Demarkiert alle Objekte refresh Observable void Benachrichtigt alle Observer dass sich das Modell ge ndert hat refresh gt void Benachrichtigt alle Observer dass sich das Modell ge ndert hat update Observable Object gt void Implementation des Observer Interface getAll gt Vector Liefert eine
211. ellldl 2 02 creo izena tuta 262 D 11 9 Klasse LogPfeil IN 0 Rense 263 1D 11 10 Klasse LogPfeil NA ooa ee cc a a 264 DILI Klasse LogP nkt ass ia is a Se are 265 Inhaltsverzeichnis BILI Klasse LogSCMadell 2 24 24 22 das 267 D 11 13 Klasse Zzust AND 0522 08 08 we u sach ann 268 D 11 14 Klasse ZustandAtom 2 222 Comm Inn 268 D 11 15 Klasse ZustKomplex ce ps co doe ss ead uni 269 DLL Klasse ZUStOR ociosa ia doll ehi d 270 D 12 Quelltext EXPO soa sce aoai i es a a nie 270 D I21 Klassenhietarehie 4 4 04 23 e a ana i A 270 D 12 2 Klasse ExportVariable 2 2222 Co onen 271 D 12 3 Klasse State Chal a so es x 2 22 02 aa ses 271 D 12 4 Klasse Timer 272 D 13 Package score SCBEditor o 2 wenn A ene 273 D 1341 Klassenkierarchie curas rado a0 ses ade 273 D 132 Klasse B fferedCanyas iii a a 273 D 13 3 Klasse DrawableRubber 274 DISA Klasse Pamler 40 usa na enter re 275 D 13 5 Klasse RubberBand 275 D 13 6 Klasse RubberCircle co ce 2 2 3 84 as aa 276 D 13 7 Klasse RubberFilledCircle 276 D 13 8 Klasse RubberOval 276 D 13 9 Klasse RubberRectangle 24 2 22 2 0 220 277 D 13 10 Klasse RubberRoundRect 277 B1311 Klasse Ro bberset se se eceu e sw HK a0 aat 278 D 13 12 Klasse Rubberlext lt o 2a 2 0 a ee 279 D 13 313 Klasse SCCAWVAS oia io ar 279 D 13 14 Klasse SCEditor g
212. em logischen Statechart Modell e dem Simulationsmodell e den Ansichten Zu Beginn der Simulation erzeugt der Simulator aus dem logischen Dialogmo dell LogDM die Dialoge Von diesen empf ngt er w hrend der Simulation Aktionen und kann seinerseits durch Aktionen aus dem Statechart mit ihm interagieren Zugriff auf das logische Statechart Modell und dem Simulationsmodell ben tigt der Simula tor um daraus die folgenden Transitionen zu berechnen Die berechneten berg nge werden dann dem Simulationsmodell mitgeteilt welches diese ausf hrt und die da bei generierten Aktionen zur ckliefert Anschlie end werden dann vom Simulator die Ansichten aktualisiert Einen berblick ber die Hierarchie der f r die Simulation ben tigten Klassen gibt Abbildung 6 7 t ConditionAskable i EventHolder VarServer Bean sen I La oo ESPA TA i SCRun EventAskable SER I Variable Simulation SimVariable Abbildung 6 7 Hierarchie der Simulation 6 5 2 Der Simulationsablauf Der Ablauf einer Simulation besteht aus den folgenden f nf Phasen die von der Klasse SCRun gesteuert werden Initialisierung Es wird ein Simulationsmodell erzeugt und die Objekte werden mit ihren Startwerten versehen e Die Aktionsmenge und die Ereignismenge werden geleert 145 Der Simulator Kapitel 6 Funktionsweise der Module 146 e Die Dialoge werden erzeugt
213. emein samer m glicherweise nicht direkter Oberzustand z so dass alle Startzust nde in verschiedenen Partitionen von z liegen 2vgl Abschnitt 1 4 2 auf Seite 32 f r eine genauere Definition 25 Formale Definition Kapitel 1 Definition von Statecharts Kantenende auf einem Unterzustand Wenn N gt 1 dann ex z Z so dass Yv E N v ot z und es gilt 1 21 Ww EN vE Z Aw ET z Av w gt i j wobei n z Ti z Tino z Das hei t Wenn es mehr als einen Zielzustand gibt dann existiert ein gemein samer m glicherweise nicht direkter Oberzustand z so dass alle Zielzust nde in verschiedenen Partitionen von z liegen Bemerkung Wenn v oder w aus H sind gilt analog dass sie in verschiedenen Partitionen liegen m ssen auch wenn dies nicht explizit durch diese Formel erfasst wurde Bemerkungen 1 V gt 1 impliziert dass die Anfangspunkte des bergangs in einem komplexen Zustand vom Typ AND liegen 2 N gt 1 impliziert dass die Endpunkte des bergangs in einem komplexen Zu stand vom Typ AND liegen 3 Die folgenden Sonderf lle k nnen auftreten e VAN 0 Das hei t dass es einen Pfeil gibt bei dem ein Zielzustand ein Startzustand war e A 0 Das hei t dass keine Aktion bei einem bergang ausgef hrt wird e H 9 Das hei t dass der bergang bedingungslos ausgef hrt wird e e Zustand z aktiviert f r z V Das hei t dass das Ereignis den Zu stand zu verlassen
214. ements java lang Comparable Diese Klasse entspricht in der Simulation einem logischen atomaren Zustand Attribute active Vector statischer Vector mit allen SimBasics die gerade aktiv sind willBeActive Vector statischer Vector mit allen SimBasics die derart markiert sind dass sie im n chsten Zeitschritt aktiv sind calledActions Vector statischer Vector mit allen CalledActions die durch Aktivieren und Deak tivieren von SimBasics ausgel st wurden state ZustandAtom ZustandAtom aus dem dieser SimBasic erzeugt wurde superState SimBasic der Oberzustand der Simulation f r diesen SimBasic Konstruktoren SimBasic ZustandAtom SimBasic Erschafft einen neuen atomaren Simulationspunkt zu dem bergebenen atomaren Zustand und mit dem bergebenen Identifier des Oberzustands SimBasic int int boolean Erschafft einen SimBasic f r das auf hrbare Programm isEndState boolean Gibt zur ck ob dieser SimBasic ein Endzustand ist getLogic ZustandAtom Gibt den logischen Zustand zur ck aus dem dieser SimBasic erschaffen wurde getincoming Vector 285 Package score SimSCM Kapitel D Programmdokumentation 286 berschreibt die Methode der Klasse LogPunkt Gibt einen Vector mit allen eingehenden LogPfeilen zur ck getOutgoing Vector berschreibt die Methode der Klasse LogPunkt Gibt einen Vector mit allen ausgehe
215. en D 13 13 Klasse SCCanvas extends score SCEditor ScrollCanvas implements javax swing event MouselnputListener Java awt event ActionListener score util Observer Java awt event WindowListener Stellt die Zeichenfl che f r das Statechart zur Verf gung Attribute gscv GrafModellSicht Referenz auf die Sicht dieser Darstellung DEFAULT_SIZE Dimension Defaultgr e der Canvas bei Start editor SCEditor Parent Editor CORNER_EPSILON inf HotSpot Unsch rfe f r die Ecke MOUSE_EPSILON int HotSpot Unsch rfe f r die Maus Konstruktoren SCCanvas SCEditor GrafModellSicht Konstruktor Methoden replaceObservable Observable Observable boolean 279 Package score SCEditor Kapitel D Programmdokumentation 280 Wenn das Modell ausgetauscht wird disposed der Editor sich repaint gt void berschreibt die Methode der Klasse Component Das Canvas neu zeichnen print String gt void Das Canvas drucken actionPerformed ActionEvent gt void Auf PopupMen Events reagieren mouseClicked MouseEvent gt void Auf einen Mausklick reagieren mousePressed MouseEvent void Auf das driicken der Maus reagieren mouseReleased MouseEvent void Auf das Loslassen der Maus reagieren mouseMoved MouseEvent void Auf Mausbewegungen reagieren mouseDragged MouseEvent gt void Auf das Schieben mit der Maus reagieren setNewView
216. en blichen Dialogkomponen ten dadurch dass sie im Benutzerdialog des exportierten Statecharts nicht erscheinen Die Bezeichnung als Dialogkomponenten liegt darin begr ndet dass diese Elemente dem Statechart ebenfalls mit dem Dialog Editor hinzugef gt werden k nnen Popup Diese Dialogkomponente wird nat rlich nicht im User oder Systemdialog angezeigt sondern bekommt wie f r Popup Fenster blich ein eigenes Fenster Insofern ist dies eine untypische Dialogkomponente Timer Der Timer ist auch keine Dialogkomponente im blichen Sinne Da er jedoch ein hnli ches Verhalten im Zusammenhang mit Statecharts zeigt Er erzeugt zu einem bestimm ten Zeitpunkt eine Aktion wird er auch hier erstellt Der Timer erzeugt seine Aktion dann wenn er abgelaufen ist W hrend der Simulation wird f r den Timer zus tzlich ein Button erzeugt so dass die Timer Aktion auch manuell ausgel st werden kann Im Quelltextexport ist dieser nicht vorhanden Java Ersatzkomponenten Da in der Simulation keine Java Aktionen ausgef hrt oder Java Bedingungen getestet werden k nnen werden Ersatzkomponenten erzeugt F r eine Java Aktion wird ein Popup erzeugt der angibt das die entsprechende Java Aktion jetzt ausgef hrt wurde F r eine Java Bedingung wird eine Checkbox er zeugt so dass man den Wahrheitswert der Bedingung im System Dialog setzen kann Die Ersatzkomponenten werden alle als Komponenten f r den Systemdialog er zeugt so dass si
217. en Arbeiten die sich auf dieses Programm beziehen beschrieben werden Die ersten beiden sind die AND Konnektoren Gabelung fork und Vereinigung join Diese beiden Konnektoren modellieren den Fall dass mehrere Zust nde durch einen einzigen bergang gleichzeitig betreten oder verlassen werden Ein solcher bergang ist nur dann m glich wenn die Bedingungen und Ereignisse die an allen Teilen dieser Verbindungen stehen eingetreten und alle Startzust nde aktiv sind Nach einem solchen bergang werden alle Startzust nde deaktiviert und alle Zielzust nde aktiviert Abbildung 2 4 stellt zwei einfache Beispiele f r derartige berg nge dar a E 2 ce es a b Abbildung 2 4 berg nge mit mehr als einem End bzw Startzustand Diese Konnektoren sind insbesondere im Zusammenhang mit AND Zust nden zu sehen Obwohl es denkbar ist dass ein AND Zustand durch einen bergang verlassen werden kann der von einem Unterzustand nur einer einzigen orthogonalen Kompo nente ausgeht muss die M glichkeit gegeben sein diese Bedingung auf alle orthogo nalen Komponenten erweitern zu k nnen Auf diese Weise entsteht ein bergang der in mehreren Unterzust nden des AND Zustands beginnt und an einem einzigen Punkt aufh rt Andererseits kann es gew nscht sein beim Betreten eines AND Zustands s mt liche Unterzust nde der orthogonalen Komponenten angeben zu k nnen die aktiviert werden sollen Dies wird durch einen
218. en Diese Konnektoren besitzen dieselbe semantische Bedeutung wie statische Verzweigungen werden jedoch grafisch durch eine Raute dargestellt Dadurch ist leichter festzustellen an welchen Punkten des Statecharts derartige Verzweigungen stattfinden Durch den kontinuierlichen Zeitverlauf ist es in UML nicht m glich sicherzu stellen dass ein Zustand auf die Ausgabe eines anderen Zustands wartet Produzent Konsument Beziehung Um dieses Verhalten modellieren zu k nnen wurde ein wei terer Pseudozustand eingef hrt der Synch Zustand Er funktioniert wie ein Speicher wahlweise mit beschr nkter oder unbeschr nkter Kapazit t der z hlt wie oft die eingehenden Verbindungen aktiviert wurden Ausgehende berg nge sind genau dann m glich wenn der Speicher nicht leer ist jedes Mal wenn ein solcher bergang aus gef hrt wird wird der Speicher um eins heruntergez hlt Dieser Konnektor ist insbe sondere dann sinnvoll wenn er einer von mehreren Startzust nden einer Verbindung mit einem Synchronisationsbalken ist Ein Beispiel ist in Abbildung 2 6 dargestellt die aus Hitz und Kappel bernommen wurde Der bergang im Konsumenten ist hierbei nur dann m glich wenn vorher im Produzenten mindestens ein bergang ausgef hrt wurde der noch im Synch Zustand hier mit unbegrenzter Kapazit t gekennzeichnet durch den Stern vorgemerkt ist An Produzent Konsument Oz C J Abbildung 2 6 Produzent und Konsument sind ber einen
219. en Im Gegensatz zu den Ereignissen kann man bei diesen allerdings nicht davon ausgehen dass sie notwendigerweise innerhalb des Statecharts selbst wirken es sind viele F lle denk bar in denen die Variablen das Verhalten des Systems au erhalb des modellierten 2Diese M glichkeit wurde bereits auf Seite 66 kurz erw hnt und soll in den Abschnitten 94 und 3 3 2 genauer ausgef hrt werden Tester 75 Tester 76 Kapitel 3 Werkzeuge f r Statecharts Bereichs beeinflussen beispielsweise innerhalb der Aktionen die als Quelltext ein gegeben wurden Wird jeder Dialogkomponente eine Variable zugeordnet wie es auf Seite 69 beschrieben wurde so entzieht sich diese Frage noch weiter der berpr fung Derartige Variablen brauchen weder durch eine Aktion gesetzt werden da sie ber den Benutzerdialog modifiziert werden k nnen noch brauchen sie in irgendeiner Bedin gung getestet werden da sich ihre beabsichtigte Wirkung auf die Dialogkomponente beschr nken kann Weitere Konsistenzbedingungen sind f r die Zust nde des Statecharts denkbar Ist ein Zustand beispielsweise als transient markiert so ist es nicht sinnvoll f r die sen eine statische Reaktion anzugeben da er keinen ganzen Zeitschritt aktiv bleiben wird Au erdem sollten Endzust nde keine ausgehenden Verbindungen haben da das System anh lt bevor diese benutzt werden k nnten Races Als Race wird eine Situation beschrieben in der ein Element gleichzeitig modifiz
220. en Abschnitt beschrieben wird Abgesehen von der grafischen Konstruktion kann der Benutzer wenn er beispiels weise f r Aktionen beliebige Zeichenketten eingeben kann auch hierbei fehlerhafte Eingaben machen Um dies zu vermeiden sollte entweder bereits der Editor sp te stens jedoch der Verifikator auch die Semantik von Ereignissen Bedingungen und Aktionen verstehen Determinismus Problematisch kann bei einigen umfangreicheren Testfragen deren Komplexit t wer den Man betrachte etwa einen Zustand mit mehreren ausgehenden Verbindungen an denen unterschiedliche Bedingungen notiert sind Das Problem ob bei jeder denk baren Belegung der in den Bedingungen auftretenden aussagenlogischen Variablen genau ein bergang m glich ist und das Statechart damit deterministisch ist ist NP vollst ndig In diesen Zusammenhang geh rt auch das Problem einer Konnek torschleife das im letzten Abschnitt angesprochen wurde Die eigentlich interessante Fragestellung ist jedoch noch komplizierter meist wird nicht jede denkbare Belegung der Variablen auch w hrend der Abarbeitung des Statecharts auftreten k nnen Das Chart braucht jedoch lediglich f r in diesem Sinne m gliche Belegungen determini stisch zu sein Ebenso kompliziert ist die Frage ob Bedingungen benutzt werden die immer sprich in jedem m glichen Fall wahr oder falsch sind 15Diese spezielle Konstruktion sollte ohnehin vermieden werden da sie genausogut mit einem einzigen
221. en Konnektor f r das exportierte Programm im Sinne eines History Konnektors d h um die Angabe ob es sich um eine Deep oder FlatHistory handelt Konstruktoren SimHist int int boolean Erschafft einen History Konnektor mit den angegebenen Eigenschaften 287 Package score SimSCM Kapitel D Programmdokumentation 288 D 14 7 Klasse SimOR extends score SimSCM SimBasic Diese Klasse entspricht in der Simulation einem OR Zustand oder einer Partition Konstruktoren SimOR ZustOR SimBasic Erschafft einen neuen OR Simulationspunkt aus dem bergebenen logischen OR Zustand Er hat den bergebenen Zustand als Oberzustand Der Default Einstieg wird entsprechend gesetzt falls der logische Zustand einen besitzt die History ist noch leer SimOR int int Erschafft einen OR Simulationspunkt aus zwei Identifiern addNewSub ZustandAtom SimBasic F gt einen neuen Unterzustand hinzu der aus dem bergebenen atomaren Zustand generiert wird activate void berschreibt die Methode der Klasse SimBasic Aktiviert diesen OR Simulationspunkt Dabei wird der Default Einstieg benutzt activateByHistory void berschreibt die Methode der Klasse SimBasic Aktiviert diesen OR Simulationspunkt durch seinen History Einstieg Es wird davon ausgegan gen dass tats chlich eine History vorhanden ist ansonsten wird eine NoTargetStateException geworfen activateByDeepHistory void berschreib
222. en Wert f r getLocalAlignment isSECorner double double int double int Gibt 1 zur ck wenn der Punkt in der N he der rechten unteren Ecke liegt 1 wenn das nicht der Fall ist und O wenn dieser Zustand nicht betroffen ist delete void Kapitel D Programmdokumentation berschreibt die Methode der Klasse GrafTyp L scht diesen GrafPunkt Dabei werden auch alle ein und ausgehenden Pfeile beachtet d h es wird von ihnen mindestens ein Abschnitt gel scht save EasyFileWriter void Speichert diesen GrafPunkt im EasyFileWriter Muss entsprechend implementiert werden saveSelf EasyFileWriter void Speichert die Daten dieses GrafPunkts Identifier Name und Gr e savelnsert EasyFileWriter void Schreibt einen Insert Befehl f r diesen GrafPunkt in den EasyFileWriter saveTexts EasyFileWriter gt void Schreibt die Texte f r diesen GrafPunkt in den EasyFileWriter D 9 12 Klasse GrafSCModell extends score AbstractModell AbstractModell implements score util Observer Diese Klasse ist die Sammlung aller grafischen Objekte Sie beobachtet alle Komponenten und meldet nderungen an die Sichten weiter Konstruktoren GrafSCModell Der Konstruktor erschafft ein neues grafisches Statechart Modell und ein zugeh riges logisches Statechart Modell Beide Modelle werden mit einem Oberzustand initialisiert Dieses Modell wird auch an die grafischen Sichten bergeben replaceBy GrafS
223. en Zustand stop zur ck wodurch die Uhr wieder auf den Wert des Textfeldes zur ckgesetzt wird Partiton 3 Wasserbeh lter Wasserkalter voll leer WIn Wih WzZ Abbildung A 6 Die Partition fiir den Wassertank Diese Partition ist hnlich einfach wie Partition 1 Allerdings wird hier keine Checkbox modelliert da der bergang von voll auf leer nicht vom Benutzer sondern vom System ausgel st wird Der Wasserbeh lter ist zun chst leer Wird Wasser eingef llt WIn so geht das System in den Zustand voll ber Wird das Ereignis Wih ausgel st so geht das System 161 Die Teemaschine Kapitel A Beispiele 162 wieder in den Zustand leer ber und l sst das Wasser in den Ziehbeh lter flie en Ereignis WzZ Partiton 4 Tee im Ziehbeh lter TeeimZiebehalter yA alt leer Tee WZTk Nz2r Tee Tee SR zieh sS frisc WzZ ns Se Y J Abbildung A 7 Die Partition die den Tee im Ziehbeh lter beschreibt Am Anfang ist noch kein Tee in den Ziehbeh lter eingef llt Wird das Ereig nis Tee ausgel st das anzeigt dass Tee eingef llt oder entfernt wurde so wechselt das System entsprechend zwischen den Zust nden leer und frisch Ist der Zustand leer aktiviert wenn das Ereignis WzZ eintritt so bleibt dieser erhalten Vom Zustand frisch aus wird in diesem Moment jedoch der Zustand zieht betreten Dabei wird dessen Default Einstieg benutzt der auf den Zustand
224. en deshalb geklammert werden F r die aussagenlogischen Variablen gibt es folgende M glichkeiten IN STATE Mit dieser Bedingung wird gefragt ob ein Zustand gerade aktiviert ist Das Format ist IN STATE lt ID gt oder in lt ID gt wobei lt ID gt ein Platzhalter f r die ID des Zustands ist Wenn die angegebene ID noch nicht existiert wird die Bedingung zur ckgewiesen HAS HISTORY fragt ob ein Zustand eine History hat Das Format ist HAS HISTORY lt ID gt oder hasHist lt ID gt Diese Bedingung wird zur ckgewiesen wenn die angegebene ID nicht die ID eines OR Zustands oder einer Partition ist Die ID wird automatisch ge ndert wenn der Zustand nachtr glich zu einem AND Zustand gemacht wird VARIABLE Mit dieser Bedingung k nnen Variablen getestet werden Das For mat ist VARIABLE lt VARNAME gt lt OP gt lt VALUE gt oder var lt VARNAME gt lt OP gt lt VALUE gt Hierbei ist lt VARNAME gt der Name der Variablen lt OP gt ist der Ver gleichsoperator Dieser darf einer der folgenden sein gt lt lt gt lt gt Als 120 Kapitel 5 Benutzerhandbuch Vergleichswert lt VALUE gt kann eine ganze Zahl eine Flie kommazahl eine Zei chenkette in Anf hrungszeichen oder eine andere Variable dienen Zeichen kette ohne Anf hrungszeichen Zu Beachten ist dass Variablen deren Namen mit dem Prefix DLG beginnt Dialogvariablen sind und den Inhalt von Dialog komponenten repr
225. en die Sicht ihre Daten zeichnet Einen berblick gibt Abbildung 6 6 ScrollPane Canvas SCEditor 1 1 TranslationWindow ScrollCanvas BufferedCanvas 1 SCCanvas 791 DrawableRubber 1 GrafModellSicht SCEdito r 1 Painter RubberBand RubberRectangle RubberText RubberSet Simulation RubberOval RubberRoundRect RubberCircle RubberfFilledCircle Abbildung 6 6 berblick ber die Klassen des Statechart Editors Der Editor ist eines der Kernst cke unserer Implementation Mit ihm wird das Statechart grafisch erstellt beziehungsweise bearbeitet Ziel ist es eine relativ intuitive Bedienung zu erm glichen deren Logik sich an die g ngiger Grafikprogramme an lehnt Auf der anderen Seite haben wir viel Wert auf ein st ndiges Benutzerfeedback gelegt so dass viele fehlerhafte Konstruktionen gar nicht erst m glich sind Der Editor f hrt gesteuert durch die grafischen Eingaben des Benutzers st ndig ein grafisches und logisches Modell des entsprechenden Statecharts mit Dieses Modell kann in mehreren Fenstern in verschiedenen Teilansichten und verschiedenen Darstel lungsgr en und tiefen gleichzeitig bearbeitet werden Neben dieser rein opt
226. en ist wie er in Abschnitt 3 1 3 beschrieben wurde Die dort erw hnten Module k nnen dann als einzelne Klassen oder Instanzen implementiert werden wodurch das Programm in fast selbst ndige Einheiten zerlegt w rde Ohne einen derartigen Editor ist diese Unterteilung kaum durchf hrbar da die gew nschte Struktur nicht automatisch festgestellt werden kann Kapitel 3 Werkzeuge f r Statecharts Automatismen Simulation und Quelltext Es d rfte recht offensichtlich sein dass die Anforderungen an einen Simulator und an den erzeugten Quelltext relativ hnlich sind Beide erf llen das Statechart mit Leben indem sie den Spezifikationen folgend berg nge und Aktionen ausf hren Wenn dem Benutzer neben dem Editor beide Werkzeuge zur Vef gung gestellt werden ist es also naheliegend den Quelltextexport an die Simulation anzulehnen Das erzeugte Programm unterscheidet sich in zwei Punkten von der Simulation die Art und Weise der Ausf hrung kann nicht beeinflusst werden da sie kontinuier lich ablaufen sollte und die externen Ereignisse Bedingungen und Aktionen werden nicht ber einen Systemdialog an das Statechart weitergegeben F r externe Aktionen und Bedingungen ist die Benutzung von Quelltextabschnitten empfehlenswert wie sie bereits auf Seite 65 beschrieben wurde Es wird dadurch nicht notwendig den erzeug ten Programmcode nachtr glich um diese Methoden zu erweitern Externe Ereignisse lassen sich in den beiden auf Seite 87 erw
227. en neuen EasyFileWriter der in das bergebene File schreiben wird EasyFileWriter Erschafft einen neuen EasyFileWriter ohne FileWriter Dies ist nur sinnvoll wenn die Schreib methoden entsprechend berladen werden isFileWriter boolean Gibt zur ck ob es sich tats chlich um einen EasyFileWriter handelt doWrite String void F hrt das eigentliche Schreiben aus Der bergebene String wird durch ein angeh ngtes Leerzei chen erg nzt writeKey String gt void Schreibt den bergebenen String unmodifizert in die Datei writeKeyLn String gt void Schreibt den bergebenen String unmodifiziert in die Datei und h ngt einen Zeilenumbruch an write String gt void Schreibt den bergebenen String mit Anf hrungszeichen in die Datei write boolean void Schreibt den bergebenen booleschen Wert in die Datei write int void Schreibt den bergebenen int Wert in die Datei write double void Schreibt den bergebenen double Wert in die Datei write Point2D Double void Schreibt den bergebenen Point2D Double in die Datei Er wird dabei mit runden Klammern und einem Komma formatiert write Dimension Double void Schreibt die bergebene Dimension Double in die Datei Sie wird dabei mit eckigen Klammern und einem Komma formatiert writeln void Schreibt einen Zeilenumbruch in die Datei insertFile String gt void F gt den Inhalt einer Datei ein close
228. en zu versehen und dadurch das Verhal ten des gesamten Systems entweder durch eine einzige Instanz beeinflussen zu lassen oder darauf zu warten dass alle Instanzen eine bestimmte Bedingung erf llen In die sem Zusammenhang ist es zus tzlich notwendig festzulegen wie das System derartige Anfragen modifiziert wenn neue Instanzen hinzukommen oder alte aufh ren zu exi stieren In Statemate werden diese Schwierigkeiten durch die Einf hrung von generi schen Charts gel st die bereits in Abschnitt 2 2 3 vorgestellt wurden Diese Charts sind vom globalen Namensraum des Statecharts getrennt und k nnen mit diesem nur ber Parameter kommunizieren Eine solche Auskopplung von Teilen des Statecharts ist zwar denkbar w rde jedoch den Umfang der Implementierung deutlich erh hen Da diese Problematik nicht den zentralen Teil unserer Arbeit darstellt wird die AND Parametrisierung deshalb nicht unterst tzt Ansatzweise kann sie jedoch mit einer festgelegten Anzahl an orthogonalen Instanzen nachmodelliert werden indem der be troffene Zustand im Statechart mehrfach kopiert wird Kapitel 4 Die implementierte Fassung Die Grundelemente 4 2 2 Konnektoren In Statemate werden wie bereits in Abschnitt 2 3 erw hnt sieben Formen von Konnektoren unterschieden die in zwei Gruppen eingeteilt werden k nnen Der haupts chliche Vorteil der OR Konnektoren ist von graphischer Art da das Verhal ten in jedem Fall auch durch mehrere alternative berg nge
229. ends java lang Object Diese Klasse dient dazu einen String mit deutschen Umlauten in TeX Format umzuschreiben Methoden prepareForMetaPost String gt String Bereitet den bergebenen String zum Einbinden in MetaPost vor convert String gt String Konvertiert den bergebenen String nach TeX D 16 16 Klasse MetaPostGraphics extends score util ZoomGraphics Diese Klasse berschreibt die Klasse ZoomGraphics derart dass die Ausgabe nicht auf einem Grafik bildschirm erscheint sondern in einem File in MetaPost Format gespeichert wird Dies geschieht in den protected Methoden mit dem Zusatz Here die die entsprechenden Methoden von ZoomGraphics ber schreiben und bereits skalierte Punkte erwarten Konstruktoren MetaPostGraphics double Erschafft eine neue MetaPostGraphics mit dem angegebenen Zoom Methoden open String void ffnet das File mit dem bergenenen Namen zum schreiben close void Schlie t das File das in dieser MetaPostGraphics gehalten ist drawStringHere String int int void 301 Package score util 302 Kapitel D Programmdokumentation berschreibt die Methode der Klasse ZoomGraphics Zeichnet einen String an der bergebenen Stelle drawLineHere int int int int void berschreibt die Methode der Klasse ZoomGraphics Zeichnet eine Linie zwischen den bergebenen Punkten drawRectHere int int int int void berschreibt die Methode d
230. ener Simulation Variablen im Simulationsfenster markiert werden Diese erscheinen dann im Inspektor und k nnen dort mit einem neu en Wert gesetzt werden Auch hiernach ist eine Fortsetzung der Simulation m glich 5 10 Undo Redo Sollten Sie einen Editiervorgang r ckg ngig machen wollen so w hlen Sie einfach aus dem Men die Funktion Undo aus Fast alle Editiervorg nge au er kleinen nde rungen im Inspektor lassen sich so bis zu 50 Schritte r ckg ngig machen Mit der Funktion Redo k nnen Sie bis zu 50 Undo Vorg nge wieder herstellen Undo Redo 125 Quelltextexport Kapitel 5 Benutzerhandbuch 126 5 11 Quelltextexport 5 11 1 Exportieren des Statecharts Mit dem Men punkt Export source kann das erstellte Statechart als Java Quellcode exportiert werden In dem folgenden Dialog w hlt man das Zielverzeichnis aus Dort werden die Dateien Export java ExportAkt java und ExportBed java erzeugt Diese Dateien k nnen mit dem Makefile unterhalb von export bersetzt nake build und ausgef hrt nake run werden 5 11 2 Methoden der Quelltextsegmente In den Quelltextsegmenten die in Java Aktionen und Bedingungen eingegeben wer den k nnen sind neben s mtlichen Klassen und Methoden die von Java generell zur Verf gung gestellt werden die in den Tabellen dieses Abschnitts aufgef hrten Kon struktionen m glich die auf das Statechart zugreifen Verwendete Klassen m ssen nach dem Export in den Klassen ExportAkt beziehun
231. enn dies geschieht wird er dann automatisch als Default Einstieg mar kiert addSubstate SimBasic void berschreibt die Methode der Klasse SimBasic F gt einen Unterzustand hinzu D 14 8 Klasse SimSCModell extends java lang Object Dies ist die zentrale Klasse des Simulationsmodells Sie implementiert das Interface Condition Askable mit dem sich Bedingungen nach ihrem Wahrheitswert in der aktuellen Simulation erkundigen K nnen Konstruktoren SimSCModell LogSCModell Erschafft ein neues Simulationsmodell das dem bergebenen logischen Modell entspricht Jeder Zustand existiert in einfacher Ausf hrung SimSCModell Erschafft ein neues Simulationsmodell das davon ausgeht dass sein Oberzustand der bereits existierende SimBasic mit dem Identifier 0 ist getTopLevelState gt SimOR Gibt den Oberzustand der Simulation zur ck prepareTimestep void Bereitet einen Zeitschritt im Simulationsmodell vor Dabei wird insbesondere die Liste der zuk nftig zu aktivierenden Simulationspunkte als Liste der momentan aktivierten Punkte ber nommen closeTimestep boolean Schlie t einen Zeitschritt im Simulationsmodell ab Gibt true zur ck wenn das ohne Fehler m glich war getSimBasic int SimBasic Implementation des ConditionAskable Interfaces Gibt den SimBasic mit dem angegeben Identi fier zuriick activate int void Aktiviert den SimBasic mit dem angegeben Identifier Wir
232. ent MouseListener Diese Klasse erweitert JButton derart dass die Buttons flach aussehen und beim berqueren oder Selektieren mit der Maus ihr Image ndern Konstruktoren FlatButton Imagelcon Imagelcon Imagelcon Konstruktor D 16 13 Klasse FlatRadioButton extends javax swing JRadioButton implements java awt event MouseListener Diese Klasse erweitert JRadioButton analog zu FlatButton Konstruktoren FlatRadioButton Imagelcon Imagelcon Imagelcon Kapitel D Programmdokumentation Package score util Konstruktor Methoden doUnclick gt void Fiihrt ein deselektieren durch doClick void berschreibt die Methode der Klasse AbstractButton Fiihrt das Selektieren durch D 16 14 Klasse Intersect extends java lang Object Diese Klasse testet den Schnitt von Strecken bzw Rechtecken in zwei Formaten Methoden lines double double double double double double boolean Gibt true zur ck wenn sich die horizontale und die vertikale Strecke schneiden oder ber hren rectangles Point2D Double Point2D Double Point2D Double Point2D Double boolean Gibt true zur ck wenn sich die beiden Rechtecke al a2 und b1 b2 schneiden oder ber hren rectangles double double double double double double double double boolean Gibt zur ck ob sich die beiden Rechtecke gegeben in jeweils vier double Koordinaten schnei den oder ber hren D 16 15 Klasse LaTeXString ext
233. ep On the semantics of statecharts In Proceedings of the Symposium on Theoretical Aspects of Computer Software Lecture Notes in Computer Science vol 526 Springer Verlag pp 244 264 Pratchett Terry Interesting Times Corgi 1997 Pratt Terrence und Zelkowitz Marvin Programmiersprachen Design und Implementierung Prentice Hall 1997 Rumbaugh J Jacobson I Booch G The Unified Modelling Language Reference Manual Addison Wesley 1999 Sch93 Schu99 Sed92 Tut12 Wir95 Wir96 Literaturverzeichnis Sch ning Uwe Theoretische Informatik kurz gefasst BI Wissenschafts verlag 1992 Schubert Stephan Konsistenz und Werkzeugunterst tzung von System spezifikationen in UML Diplomarbeit Mathematik mit Studienrichtung Informatik Universi t Hannover 1999 Sedgewick Robert Algorithmen in C Addison Wesley 1992 The Java Tutorial http java sun com docs books tutorial index html Sun Microsystems Inc 2000 Wirth Niklaus Algorithmen und Datenstrukturen 4 Aufl Teubner 1995 Wirth Niklaus Grundlagen und Techniken des Compilerbaus Addison Wesley 1996 321 322 Heureka Archimedes Stichwortverzeichnis Mathematische Symbole A 25 E 24 H 24 K 25 Lp 26 SC 20 Z 20 Tr 22 20 d 24 h 24 A Abgrenzungskriterien 172 Aktion 19 25 54 122 History 54 im Quelltext 87 im Systemdialog 82 in SCed 100 scheduled 54 verz gert 54 Ansichten 60 Anwen
234. er Klasse GrafPunkt F gt einen neuen grafischen Zustand an der gegebenen Stelle ein Die Koordinaten sind relativ zu diesem Zustand Der neue Zustand darf keine alten Zust nde schneiden er darf aber von Anfang an Unterzust nde enthalten Diese werden ihm dann gleich untergeordnet Je nach dem wird ihm entweder ein logischer atomarer Zustand oder ein logischer OR Zustand zugeordnet Gibt den neuen Zustand zur ck oder Null wenn die Koordinaten keinen Unterzustand dieses Zustandes beschreiben insertNewConn double double double double int GrafKonnektor berschreibt die Methode der Klasse GrafPunkt F gt einen neuen Konnektor vom angegebenen Typ ein isValidMove GrafPunkt double double boolean 245 Package score GrafSCM Kapitel D Programmdokumentation 246 berschreibt die Methode der Klasse GrafPunkt Gibt zur ck ob der angegebene GrafPunkt an den angegebenen Platz in Koordinaten dieses Punktes passt Gibt false zur ck wenn dieser Zustand von der Frage nicht betroffen ist oder selbst der bewegte GrafPunkt ist und true wenn das neue Rechteck komplett in diesem Zustand oder einem Unterzustand liegt Wenn das neue Rechteck diesen Zustand oder einen Unterzustand schneidet oder berdeckt wird ein InvalidConstructionError geworfen isValidSize Dimension Double boolean berschreibt die Methode der Klasse GrafPunkt Gibt zur ck ob die angegebene Gr e f r diesen Zustand g ltig ist isValidPar
235. er Klasse ZoomGraphics Zeichnet ein Rechteck mit der bergebenen Position und Gr e fillRectHere int int int int gt void berschreibt die Methode der Klasse ZoomGraphics Zeichnet ein ausgef lltes Rechteck mit der bergebenen Position und Gr e drawRoundRectHere int int int int int int gt void berschreibt die Methode der Klasse ZoomGraphics Zeichnet ein Rechteck mit abgerundeten Ecken mit der bergebenen Position und Gr e fillRoundRectHere int int int int int int void berschreibt die Methode der Klasse ZoomGraphics Zeichnet ein ausgef lltes Rechteck mit abgerundeten Ecke mit der bergebenen Position und Gr e drawOvalHere int int int int void berschreibt die Methode der Klasse ZoomGraphics Zeichnet ein Oval mit der bergebenen Position und Gr e fillOvalHere int int int int void berschreibt die Methode der Klasse ZoomGraphics Zeichnet ein ausgef lltes Oval mit der bergebenen Position und Gr e fillPolygon int int int void berschreibt die Methode der Klasse ZoomGraphics Zeichnet ein ausgef lltes Polygon mit den bergebenen Eckpunkten drawActiveRect Point2D Double Dimension Double void berschreibt die Methode der Klasse ZoomGraphics Diese Methode lenkt das Zeichnen eines aktiven Rechtecks durch berschreiben der entsprechen den Methode in ZoomGraphics auf das Zeichnen eines abgerundeten Rechtecks um drawMarkedRect P
236. er Meldung wie es blicherweise als Requester oder Popup be zeichnet wird Dieses Fenster wird zum entsprechenden Moment ge ffnet und zeigt dem Benutzer an welche externe Aktion nun ausgef hrt w rde Das System kann sich in diesem Moment in einer Art Wartehaltung befinden bis der Benutzer dieses Fenster wieder geschlossen hat oder aber im Hintergrund bereits mit der Simulation fortfahren Die letztgenannte M glichkeit kann dazu f hren dass der Benutzer mehre re Meldungen auf dem Bildschirm sieht und deren Reihenfolge nicht mehr feststellen kann Allerdings d rfte dies nur in den wenigsten F llen zu einem Problem f hren Interessant ist die Frage inwiefern der Benutzer auf ein solches Anzeigen einer Aktion reagieren muss beziehungsweise ob er anstelle des Simulators den Inhalt der 33Diese Elemente wurden bereits im Zusammenhang mit Variablen zum Setzen der Meldung auf Sei te 69 erw hnt Kapitel 3 Werkzeuge f r Statecharts Automatismen Aktion auszuf hren hat Dies h ngt davon ab ob sich die externe Aktion wieder auf das Statechart auswirkt oder nicht Wenn dem Benutzer in den Quelltextsegmenten beispielsweise Zugriff auf die Variablen des Statecharts gegeben wird so k nnen sol che Werte auch in Aktionen ver ndert werden Wird eine derartige externe Aktion in der Simulation nur gemeldet und nicht wirklich ausgef hrt hat das zur Folge dass das simulierte Statechart sich vom letztendlich erzeugten Programm unterscheidet
237. er Test berpr ft die Lage von Start und Endzust nden aller Verbindungen auf ihre Lage zueinander Fehler k nnen dabei nur an Pfeilen vom Typ 1 N oder N 1 auf treten States must not appear as start point more that once per transition Ein Zustand wurde mehrfach als Startzustand eines bergangs angegeben Es reicht in diesem Fall aus ihn nur einmal zu benutzen Some of the transition s start states lie above an other Der bergang beginnt bei mehreren Zust nden die in der Hierarchie bereinander liegen In diesem Fall reicht es den untersten anzugeben da s mtliche Oberzust nde notwendigerweise ebenfalls aktiv sein m ssen wenn dieser aktiv ist lygl hierzu Abbildung 3 5 in Abschnitt 3 2 1 131 Der Verifikator Kapitel 5 Benutzerhandbuch 132 States must not appear as end points more than once per transition Ein Zustand wurde mehrfach als Endzustand eines bergangs angegeben Es reicht in diesem Fall aus ihn nur einmal zu benutzen Some of the transition s end states lie above each other Der bergang endet bei mehreren Zust nden die in der Hierarchie bereinander liegen In diesem Fall reicht es den untersten anzugeben da s mtliche Oberzust nde notwendigerweise ebenfalls aktiviert werden wenn dieser aktiviert wird All Events used The following events aren t checked in any transition Dieser Test kann h chstens zu Warnungen f hren Er berpr ft ob alle Ereignisse die in der Ereignisliste einge
238. er auch markiert und dann im Inspektor gesetzt werden 9 wenn diese neu erschaffen wird lOsiehe hierzu auch Abschnitt 6 5 2 123 Der Simulator Kapitel 5 Benutzerhandbuch Simulator Ax Run Stop Step Phase Reset Close De lay ms y 4 sar 7 Events ime O Abbildung 5 17 Das Simulationsfenster Abbildung 5 18 Ansicht w hrend einer Simulation 124 Kapitel 5 Benutzerhandbuch Active ist die Liste aller momentan aktiven Zust nde Diese werden auch in allen Ansichten durch eine gr ne Farbe und einen Rahmen hervorgehoben Siehe Ab bildung 5 18 Actions sind alle in diesem Zeitschritt bisher erzeugten Aktionen Events sind alle in diesem Zeitschritt bisher geworfenen Ereignisse Time ist die Zeit in Schritten gemessen Status gibt die aktuelle Phase an 7 Run Son Step Phase Reset Close Delay ms Simulation started Simulation stopped throw exit 2 from 2 throw enter 1 from 1 i Calculate transitions Abbildung 5 19 Simulationsfenster w hrend einer Simulation W hrend ein Simulationsfenster ge ffnet ist bieten die Editoren eine etwas an dere Funktionalit t Durch selektieren eines Zustands mit dem Pfeil Werkzeug wird der entsprechende Zustand aktiviert bzw deaktiviert Die dabei generierten Aktionen werden ignoriert Der Simulationsablauf kann jedoch nach einer solchen Manipulation fortgesetzt werden Weiterhin k nnen bei angehalt
239. erarchie f r Aktionen leicht gegeben Folgende allgemeinen Aktionen interne Aktionen sind implementiert ThrowAktion Diese Aktion erzeugt ein Ereignis f r den n chsten Zeitschritt Sie wurde bereits oben erl utert SetVariable Hiermit k nnen Variablen siehe 4 2 4 gesetzt werden IncVariable Hiermit k nnen Variablen um einen Wert der auch negativ sein darf erh ht werden JavaAktion Mit dieser Aktion wird beliebiger Java Code ausgef hrt Diese Aktion wird nicht durch den Simulator interpretiert sondern ist ausschlie lich f r den Quelltextexport bestimmt W hrend der Simulation wird stattdessen ein Popup Fenster ge ffnet welches mitteilt dass die entsprechende Java Aktion jetzt ausgef hrt wird ClearHistory DeepClearHistory Mit diesen Aktionen kann man die History eines Zustands beziehungsweise aller darunterliegender Zust nde l schen Weiterhin existieren die folgenden speziellen Aktion um mit Dialogkomponen ten kommunizieren zu K nnen Dialog On Off Mit diesen Aktionen werden Dialogkomponenten ein bzw ausge schaltet Dies hat je nach Dialogkomponente unterschiedliche Funktionen Ein Timer wird damit zum Beispiel gestartet bzw gestoppt ein Radiobutton wird ein bzw ausgeschaltet SetDialogVisible Diese Aktion verbirgt oder zeigt Dialogkomponenten Aktionen k nnen von den folgenden Komponenten erzeugt werden Dialogkomponenten werfen Aktionen in ihrer nat rlichen Funktion Das hei t ein Button wi
240. ergeschriebener Quelltext Das Verhalten des modellierten Systems wird durch das Statechart vollst ndig be schrieben die eigentlichen Reaktionen des Systems k nnen jedoch nur durch Quell Kapitel 3 Werkzeuge f r Statecharts Automatismen 1 b E z0 N RRE f pE MER 1 B f z2 z lt 4 z z 1 inXz1 3 E z3 Gn X z4 i 1 zZ 12 0 c Abbildung 3 13 Optimierung nach Anzahl der Variablen textsegmente programmiert werden Diese sind nat rlich in Aktionen aber auch in Ereignissen und Bedingungen denkbar Im Zusammenhang mit der Simulation wurde darauf bereits in Abschnitt 94 auf Seite 79 eingegangen Auf Seite 83 wurde bereits davor gewarnt der Versuchung zu erliegen durch aufwendig programmierte externe Aktionen die Stuktur und Kontrolle des Statecharts zu umgehen Insbesondere sind in Aktionen Konditionalstrukturen oder Bez ge auf Zust nde des Statecharts zu meiden diese sollten innerhalb des Statecharts modelliert werden Es ist daher nur sinnvoll den Benutzer sozusagen atomare Aktionen in einer Programmiersprache erg nzen zu lassen W hrend der Quelltext der in Aktionen angegeben wird relativ einfach mit dem Statechart verbunden werden kann da die Anweisungsfolge wie bei direkter Program mierung linear ausgef hrt wird ist das Programmieren von Ereignissen und Bedin gungen etwas komplizierter Atomare Bedingungen sollten als Funktionen programmiert werden die einen
241. es Interpreter Kapitel D Programmdokumentation Package score control Attribute parser Parser Eine Referenz auf den parser logger Logger Eine Referenz auf den Interpreter Konstruktoren Interpreter Logger Parser Erzeugt einen neuen Interpreter Methoden interprete int int Startet einen Interpretiervorgang addLine String void Logger F gt eine neue Zeile ins Log D 5 10 Klasse MainWindow extends java lang Object implements java awt event ActionListener score util UndoManager java awt event WindowListener MainWindow Hauptfenster mit Toolbar und Men Attribute undoStack UndoStack UndoStack redoStack UndoStack RedoStack gscm GrafSCModell Grafisches Statechartmodell ldm LogDModell Logisches Statechartmodell simulation Simulation Der Simulator dEditor DialogEditor Der DialogEditor aDialog AktionDialog Der AktionenDialog eDialog EventDialog Der EreignisDialog mainFrame JFrame Frame f r das Hauptfenster Konstruktoren MainWindow String Erstellt das Hauptfenster Methoden quit gt boolean Beenden des Programms quit pr ft zur Zeit noch keine Sicherheitsabfrage newView int void Erzeugt eine neue Ansicht des Statecharts newView int int gt void Erzeugt eine neue Ansicht des Statecharts mit Tiefe depth deleteView SCEditor void L scht die Ansicht v des Statecha
242. estet und in Aktionen mit Zeichenketten oder numme rischen Werten gesetzt werden TF r eine genauere Beschreibung eines solchen Races sei auf Abschnitt 87 auf Seite 76 verwiesen 101 Die Dialoge 102 Kapitel 4 Die implementierte Fassung Mit Hilfe dieser Variablen implementieren wir auch die M glichkeit die Harel als parametrisierte Zust nde vorgeschlagen hat In vielen F llen haben verschiedene Zust nde identische in terne Strukturen Einige der h ufigsten Situationen sind solche die am besten als einziger Zustand mit einem Parameter angesehen werden Zur genaueren Betrachtung siehe Abschnitt 2 2 3 auf Seite 39 Die Variablen k nnen durch Aktionen gesetzt oder inkrementiert werden und k nnen Zahlen oder Text enthalten Der Typ wird dabei flexibel gehalten das hei t er ndert sich je nach Benutzung der Variable und wird entsprechend konvertiert Variablen entstehen w hrend der Laufzeit dynamisch bei der ersten Benutzung Wird eine Variable vor dem ersten Setzen in einer Bedingung getestet oder durch eine Aktion erh ht so wird eine entsprechende Warnung ausgegeben Es gibt weiterhin zu jeder Dialogkomponente genau eine spezielle Variable mit der diese beeinflusst oder berpr ft werden kann 4 2 5 Die Zeit In der Literatur gibt es zwei verschiedene Modelle die Zeit zu betrachten diskret oder kontinuierlich W hrend sich das kontinuierliche Zeitmodell eher f r theore tische berlegunge
243. etails der ein zelnen Partitionen und die Zusammenh nge zwischen ihnen wird in den folgenden Abschnitten genauer eingegangen Teemashine C T Strom Wassexkalter N _ ET a Ziehzeittimer W asserm Ziebetalter Bi Teekanne gt E Wasser Bruhe uberlauf H E Abbildung A 3 Die Gesamtansicht der Teemaschine Liste der Ereignisse und Aktionen Der bersichtlichkeit halber werden die Ereignisse und Aktionen in den hier darge stellten Statecharts nur abgek rzt angegeben Zum besseren Verst ndnis folgen des halb zun chst zwei Listen s mtlicher Ereignisse und Aktionen die in diesem Modell auftreten e Die folgenden Ereignisse werden vom Benutzer beim Bedienen der Teemaschi ne ausgel st EA der Ein Ausschalter wurde gedr ckt ZZ der Wert der Ziehzeit wurde ge ndert WIn Wasser wurde in den Tank eingef llt Tee Tee wurde eingef llt oder entfernt TkLeer die Teekanne wurde geleert Kapitel A Beispiele Die Teemaschine Tk im Popup das den Zustand der Teekanne angibt wurde auf den OK Knopf gedr ckt e Ein Ereignis wird prinzipiell von der Teemaschine selbst ausgel st in der Simu lation muss es jedoch der Benutzer ber den Systemdialog eingeben Wih das Wasser ist hei e Das Statechart l st w hrend des Ablaufs die folgenden Ereignisse in der hier genannten Reihenfolge aus WzZ das Wasser flie t in den Ziehbeh lter TI die Stoppuhr der Ziehzeit ist abgelaufen
244. ethode der Klasse D gKomponente Erzeugt den zugeh rigen Quelltext Kapitel D Programmdokumentation Package score LogDM D 10 8 Klasse DigRadiobutton extends score LogDM DlgKomponente Ein Radiobutton Konstruktoren DigRadiobutton Kontruktor mit DefaultAktion DigRadiobutton String Konstruktor setzt den Label Methoden setVisible boolean void berschreibt die Methode der Klasse D gKomponente Setzt sichtbar oder unsichtbar setOn gt void berschreibt die Methode der Klasse D gKomponente Setzt diesen Radiobutton auf angew hlt setOff void berschreibt die Methode der Klasse D gKomponente Setzt diesen Radiobutton auf nicht angew hlt toString String berschreibt die Methode der Klasse D gKomponente Liefert eine String Repr sentation createComponent Component berschreibt die Methode der Klasse D gKomponente Erzeugt einen JRadioButton save EasyFileWriter void berschreibt die Methode der Klasse D gKomponente Speichert diese Komponente setLabel String gt void berschreibt die Methode der Klasse D gKomponente Setzt den Label des Radiobuttons exportQT EasyFileWriter gt void berschreibt die Methode der Klasse DlgKomponente Exportiert den Quelltext des Radiobuttons D 10 9 Klasse DigText extends score LogDM DlgKomponente Ein Textfeld Attribute varserver VarServer Eine Referenz auf den VarServer Konstruktoren DigTe
245. etrachtet werden Gibt Null zur ck wenn kein entsprechendes Objekt gefunden wird draw int Painter Point2D Double GrafModellSicht void berschreibt die Methode der Klasse GrafZustand Zeichnet diesen grafischen Punkt und Unterzust nde bis zur angegebenen Tiefe hasSubPoints boolean berschreibt die Methode der Klasse GrafZustand Gibt an ob dieser Zustand Unterpunkte besitzt getPartitioners double double Point2D Double Partitioner berschreibt die Methode der Klasse GrafZustand Gibt die m glichen Partitioner f r eine Unterteilung an den gegebenen Koordinaten zur ck isVirtualTop boolean berschreibt die Methode der Klasse GrafTyp Gibt true zur ck und zeigt dadurch an dass dies der virtuelle Oberzustand ist getBoundingBox Point2D Double gt Dimension Double Gibt die Gr e einer umgebenden Box aller Unterzust nde zur ck Sind noch keine Unter zust nde eingetragen wird Null zur ckgegeben maybeArrowSource boolean berschreibt die Methode der Klasse GrafZustand Gibt zur ck dass kein Pfeil auf dem virtuellen Oberzustand beginnen kann maybeArrowTarget boolean berschreibt die Methode der Klasse GrafZustand Gibt zur ck dass kein Pfeil auf dem virtuellen Oberzustand enden kann save EasyFileWriter gt void berschreibt die Methode der Klasse GrafZustand Speichert alle Unterpunkte des globalen Wurzelzustands in den EasyFileWriter D 9 15 Klasse GrafTyp
246. extends score AbstractModell MarkableTyp Diese Klasse ist ein ffentlicher Idenifier f r alle sichtbaren Objekte die unterschieden werden k nnen Er enth lt die GrafTexte zu diesem Objekt Attribute modell AbstractModell Das Grafische Statechart Modell auf das sich die GrafTypen beziehen texts Vector Der Vector der die GrafTexte enth lt die zu diesem GrafTyp geh ren setModell AbstractModell void Setzt das Grafische Statechart Modell getDepthTo GrafPunkt int Gibt die Tiefe zum bergebenen Grafischen Punkt zur ck wenn diese Methode nicht berschrie ben wird ist das immer 1 isVirtualTop gt boolean Gibt zur ck ob es sich bei diesem Graf Typ um den virtuellen Oberzustand handelt Wenn diese Methode nicht berschrieben wird ist das immer false delete void Kapitel D Programmdokumentation Package score GrafSCM berschreibt die Methode der Klasse Observable L scht dieses Objekt maybeArrowSource boolean Gibt an ob dieses Objekt Startpunkt eines Pfeils sein darf maybeArrowTarget boolean Gibt an ob dieses Objekt Endpunkt eines Pfeils sein darf addText GrafText void F gt zu diesem GrafTyp den bergebenen Text hinzu removeText GrafText void L scht aus diesem GrafTyp den bergebenen Text hasTexts boolean Gibt an ob dieser GrafTyp eigene GrafTexte besitzt drawTexts Painter Point2D Double GrafModellSicht
247. f r das ausf hrbare Programm doesAction Aktion gt boolean Implementation des Actor Interfaces Gibt zur ck ob dieser bergang die bergebene Aktion aufruft getActorType int Implementation des Actor Interfaces Gibt zur ck dass es sich um einen Pfeil handelt getLogPfeil int gt LogPfeil Gibt den logischen Pfeil mit den angegebenen Identifier zur ck getAll Collection Gibt eine Collection aller LogPfeil zur ck getID gt int Gibt den Identifier dieses logischen Pfeils zur ck setEvent Ereignis void Setzt das Ereignis das diesen Pfeil ausl st getEvent Ereignis Gibt das Ereignis zur ck das zu diesem Pfeil geh rt getAllTriggeredBy Ereignis gt Vector Gibt einen Vector von LogPfeilen zur ck die das bergebene Ereignis als Trigger haben Gibt es keine solchen oder ist das Ereignis Null so wird ein leerer Vector zur ckgegeben setCondition Bedingung void Setzt die Bedingung die zu diesem Pfeil geh rt getCondition Bedingung Gibt die Bedingung zur ck die zu diesem Pfeil geh rt getCalledAction CalledAction Implementation des Actor Interfaces Gibt die komplexe Aktion zur ck die von diesem Pfeil aufgerufen wird getCalledAction int CalledAction Implementation des Actor Interfaces Gibt die komplexe Aktion zuriick die von diesem Pfeil aufgerufen wird removeAction Aktion void Entfernt die bergebene Akti
248. face bietet den Zugriff auf den logischen OR Zustand der implementierenden Aktion Methoden getState ZustOR Gibt den dieser Aktion zugeordnenten OR Zustand zur ck setState ZustOR void Setzt den OR Zustand f r diese Aktion D 3 6 Klasse Aktion abstrakte Klasse extends score LogSCM LogComponent implements java lang Comparable Diese abstrakte Klasse stellt eine atomare Aktion dar Attribute ACT_JAVA int CONST Konstante falls es sich um eine Java Aktion handelt ACT_CLEAR HISTORY int CONST Konstante falls es sich um eine ClearHistory Aktion handelt ACT_CLEAR_DEEP int CONST Konstante falls es sich um eine ClearDeepHistory Aktion han delt ACT_THROW int CONST Konstante falls es sich um eine Throw Aktion handelt ACT_SET_VAR int CONST Konstante falls es sich um eine SetVariable Aktion handelt ACT_INC_VAR int CONST Konstante falls es sich um eine InVar Aktion handelt ACT_SET_DIA_VISIBLE int CONST Konstante falls es sich um eine SetDialogVisible Aktion handelt ACT_DIALOG_ON int CONST Konstante falls es sich um eine StartTimer Aktion handelt TYPES String CONST Konstante mit den Namen der Aktionen Konstruktoren Aktion int Erzeugt eine neue atomare Aktion vom angegebenen Typ Methoden setSimModell SimSCModell gt void Setzt das SimulationsModell auf das sich die Aktionen beziehen getType int Gibt den Typ
249. falls diese VerifMesg einen einzelnen solchen enth lt ansonsten Null getMarkableTypes Vector Gibt den Vector von MarkableTypen zur ck falls diese VerifMesg einen solchen enth lt anson sten Null done in 81132 ms 311 Package score Verifikator Kapitel D Programmdokumentation 312 Divide et impera C sar Anhang E Aufteilung dieser Arbeit Diese Arbeit wurde als gemeinschaftliche Diplomarbeit von Eric Schellhammer und Benjamin Hargarten vorgelegt Hierbei wurde folgende Aufteilung vorgenommen Von Eric Schellhammer wurden die folgenden Kapitel bzw Programmteile erstellt e Kapitel 2 Varianten von Statecharts in der Literatur e Kapitel 3 Werkzeuge f r Statecharts bis Abschnitt 3 3 e Die logischen grafischen und Simulationsmodelle e Die Klassen f r Aktionen Bedingungen und Ereignisse e Der Verifikator Von Benjamin Hargarten wurden die folgenden Kapitel bzw Programmteile erstellt e Kapitel 1 Definition von Statecharts e Kapitel 3 Werkzeuge f r Statecharts ab Abschnitt 3 3 e Die grafische Benutzeroberfl che sowie die Scanner Parser Module e Das Dialogmodell e Der Simulator Die Programmteile wurden von den jeweiligen Autoren beschrieben und dokumentiert S mtliche brigen Kapitel und Programmteile wurden gemeinschaftlich erarbeitet I Teile und herrsche 313 Kapitel E Aufteilung dieser Arbeit 314 Bilde K nstler rede nicht Goethe Abbildungsverzeichnis 1 1 Beispiel S
250. feile die angezeigt werden dieser Tiefenvergr erung angepasst sein sollte Angenommen die Konstruktion entspricht der in Abbildung 3 1 a gezeigten und nun wird die Darstellungstiefe derart verringert dass die Zust nde C D und E unsichtbar werden Es ist nun nicht sinnvoll eine Darstellung wie in b zu erhalten da beide Endpunkte der Verbindung unsichtbar sind und ein solcher Pfeil nur verwirrt Andererseits ist es irref hrend die Verbindung t ebenfalls auszublenden wie es in c der Fall ist obwohl auch ihre beiden Endpunkte nicht dargestellt werden da nun die Zust nde A und B v llig unverbunden scheinen Die w nschenswerte Darstellung ist vielmehr die in d gezeigte Kapitel 3 Werkzeuge f r Statecharts Grafische Editoren A B A B k pro H a a E a b A B A 2 c d Abbildung 3 1 Darstellung von Pfeilen bei verschiedenen Tiefenvergr erungen Wichtig ist in der Darstellung auch ob ein Pfeil an oder in einem Zustand endet beziehungsweise beginnt Die in Abbildung 3 1 verwendete Notation wurde von Ha rel eingef hrt um darzustellen ob ein Zustand selbst oder einer seiner Unterzust nde Teil der Verbindung ist W hrend bei einer ausgehenden Verbindung der erste Fall dar auf hindeutet dass diese Verbindung unabh ngig vom momentan aktiven Unterzustand des Startzustands ist ist im zweiten Fall genau eine solche Abh ngigkeit vorhanden Analog wird bei eingehenden Verbind
251. fgeschobenen Ereignissen in UML Bei verz gerten Aktionen ist es nicht m glich den fr hest m glichen Zeitpunkt als Termin anzuge ben wie es bei aufgeschobenen Ereignissen der Fall ist Andererseits kann bei solchen Ereignissen keine minimale Zeitspanne vor der Ausf hrung angegeben werden 2 8 Der Zeitbegriff 2 8 1 Kontinuierlich synchron oder asynchron Einer der grundlegendsten Punkte in dem sich die beschriebenen Formen der Statecharts bei einzelnen Autoren unterscheiden ist das Zeitmodell In diesen Zusam menhang geh rt einerseits die Frage ob von einer Taktung des Systems ausgegangen wird und damit eine diskrete Zeit vorliegt oder ob die Zeit kontinuierlich verl uft Bei getakteten Statecharts muss dar ber hinaus entschieden werden ob jeder Schritt des Statecharts tats chlich einen Zeitschritt bedeutet oder ob das Statechart mehrere berg nge nacheinander ausf hren kann bevor die Uhr einen Z hler weiterspringt Wie bereits erw hnt geht UML von einem kontinuierlichen Zeitbegriff aus Er eignisse werden im Moment ihres Entstehens an die aktiven Zust nde weitergegeben und eventuelle berg nge ausgel st das Ereignis verschwindet daraufhin wieder Die ses Verhalten wurde bereits in Abschnitt 2 5 1 genauer beschrieben Um dennoch si cherzustellen dass einige Teile des Statecharts aufeinander warten oder gleichzeitig gl z B Har88 S 523 oder HN96 S 306 50yg1 HN96 S 297 f Kapitel 2 Varian
252. finition von Statecharts Temporale Auswertung Durch diese Gleichungen wird festgelegt dass e wenn es eine Kante gibt die nach z f hrt deren s mtlichen Startzust nde akti viert sind das ausl sende Ereignis eingetreten und die Bedingung wahr ist dann wird im n chsten Zeitschritt z aktiviert 1 23 e wenn es keine Kante mit obigen Bedingungen gibt und keine Kante von z ab geht deren s mtliche Startzust nde aktiviert sind das Ereignis eingetreten und die Bedingung wahr ist dann bleibt die Aktivierung bzw Deaktivierung des Zu stands z im n chsten Zeitschritt unver ndert 1 24 e wenn es keine Kante wie aus 1 23 gibt jedoch eine Kante von der z Startzu stand ist alle Startzust nde aktiviert das Ereignis eingetreten und die Bedingung wahr ist dann wird z im n chsten Zeitschritt deaktiviert 1 25 e wenn der Zielzustand ein Historyeinstieg ist dann werden die Zust nde auf die der Historyeinstieg zeigt im n chsten Zeitschritt aktiviert 1 26 Ermittlung der Folgeereignisse F r die Ereignisse e E mit i EA U ED gelten folgende temporale Bedingungen 1 27 Vie 1 nz 2 t 0A2 1 1 gt elt l 1 1 28 Vi 1 nz z t 1A2 t 1 0 gt 1 1 129 SKEK zENA WwEV v t 1 AQNe amp eilt 1l 1 130 IKEK zEVA WweV vi 1 AQgNe amp eyn t l 1 Auch diese Gleichungen gelten exklusive der Setzung durch Ober oder Unter zust nde Durch diese Gleichungen wird festgeleg
253. ft eine NoTargetStateException wenn dabei Fehler auftreten deactivate int void Deaktiviert den SimBasic mit dem angegebenen identifier getAllActive gt Vector Gibt einen Vector aller Simulationspunkte zur ck die f r diesen Zeitschritt aktiv sind getAllFutureActive Vector Gibt einen Vector aller Simulationspunkte zur ck die f r den n chsten Zeitschritt als aktiv mar kiert sind getCalledActions Vector Gibt den Vector aller Aktionen zur ck die im letzten Zeitschritt aufgerufen wurden Package score SimSCM 289 Package score Simulator Kapitel D Programmdokumentation 290 D 15 Package score Simulator D 15 1 Klassenhierarchie java lang Object gt score AbstractModell MarkableTyp gt score Simulator Variable score Simulator SimVariable score Simulator SCRun gt score Simulator Simulation score Simulator SimWindow D 15 2 Interface VarServer Dieses Interface regelt den Zugriff um eine Variable zu erhalten Methoden getVariable String gt Variable Liefert eine Variable mit Namen varName D 15 3 Klasse SCRun abstrakte Klasse extends java lang Object implements java awt event ActionListener Java lang Runnable score Simulator VarServer score Bedingungen ConditionAskable score Aktionen EventHolder Diese Klasse ist die abstrakte Oberklasse aller Klassen die ein Statechart ausf hren wollen i e der Simulator und der Export E E
254. g f r Java Quellcode Sie enth lt eine Checkbox f r die Simulation die auch den Kurznamen dieser Bedingung enth lt Konstruktoren JavaBed String DlgCheckbox Erschafft eine neue Bedingung die zum Test den bergebenen Quellcode ausf hrt Methoden delete void Kapitel D Programmdokumentation Package score control berschreibt die Methode der Klasse BedAtomar L scht diese Bedingung dabei soll auch die zugeh rige Checkbox gel scht werden translate Hashtable Bedingung berschreibt die Methode der Klasse Bedingung Gibt diese JavaBed zur ck ohne sie zu kopieren init String String DlgCheckbox void Initialisiert diese JavaBedingung mit einem Namen Quellcode und einer Checkbox isTrue boolean berschreibt die Methode der Klasse Bedingung Gibt prinzipiell zur ck was der Quellcode zur ckgibt getName String Gibt den Namen dieser JavaBed zur ck save EasyFileWriter void berschreibt die Methode der Klasse BedAtomar Speichert die Bedingung im EasyFileWriter exportAtom EasyFileWriter gt void berschreibt die Methode der Klasse BedAtomar Exportiert den Quelltext f r diese atomare Bedingung Hierbei wird haupts chlich der eingege bene Quelltext in des EasyFileWriter geschrieben createFilename String String String Diese statische Methode gibt einen Filename f r ein Projekt und ein File zur ck unter dem eine JavaBedingung gespei
255. g konstruiert so werden die Quelltextsegmente in entsprechender Form als Dateien abgelegt und daraufhin compiliert Der Simulator wird dann als eigenst ndiges Programm gestartet das auf die nun ausf hrbaren Quelltextsegmente zur ckgreifen kann Im Unterschied zum endg ltig erzeugten System soll hierbei jedoch auch noch das Statechart angezeigt werden um das Verhalten der Simulation daran nachzuvoll ziehen F r den Benutzer einfacher w re es jedoch wenn es die M glichkeit g be diesen Quelltext auszuf hren ohne den Statechart Editor daf r zuerst zu beenden In Java lie e sich dies m glicherweise durch das Nachladen von Funktionen zur Laufzeit rea lisieren Dieses Verfahren eignet sich besonders f r Aktionen Auch Bedingungen lassen sich auf diese Weise recht gut in das Statechart integrieren es muss lediglich darauf geachtet werden dass diese Funktionen einen Wahrheitswert boolean zur ckliefern Komplizierter ist der Umgang mit Quelltext bei Ereignissen W hrend im Pro gramm das den Quelltext enth lt diese Ereignisse automatisch erzeugt werden und das System darauf reagieren Kann muss der Simulator diese Abschnitte gezielt aufru fen und gegebenenfalls die Ereignisse bernehmen oder nachgenerieren Es ist auch denkbar dass der Benutzer w hrend der Simulation diese Ereignisse ebenfalls nur si mulieren will anstatt sie vom eigentlichen System erzeugen zu lassen M glicherweise handelt es sich um die Meldung einer kritisc
256. gSCM LogComponent Diese Klasse stellt eine komplexe Aktion dar Sie enth lt mehrere atomare Aktionen die mit AND ver bunden sind d h sie werden alle nacheinander ausgef hrt Konstruktoren AktKomplex Actor erzeugt eine neue komplexe Aktion zum bergebenen Actor Sie enth lt anfangs noch keine ato maren Aktionen delete gt void berschreibt die Methode der Klasse Observable L scht diese komplexe Aktion die in ihr enthaltenen atomaren Aktionen bleiben davon un ber hrt getActor gt Actor Gibt den Actor dieser komplexen Aktion zur ck getldent gt String Gibt einen String zur ck der diese komplexe Aktion f r den Quelltextexport eindeutig identifi ziert getlD gt int Gibt den Identifier dieser komplexen Aktion zur ck getAktKomplex int gt AktKomplex Gibt die komplexe Aktion mit dem angegebenen Identifier zuriick size gt int Gibt die Anzahl der atomaren Aktionen in dieser komplexen Aktion an getActions Vector Gibt einen Vector der enthaltenen atomaren Aktionen zur ck elements Enumeration Gibt eine Enumeration der enthaltenen atomaren Aktionen zur ck contains Aktion boolean Gibt an ob die bergebene Aktion in dieser komplexen Aktion enthalten ist execute Actor boolean F hrt diese komplexe Aktion aus Dabei werden nacheinander alle enthaltenen Aktionen durch ihre Methode execute ausgef hrt addAction Aktion void F
257. gef llt mit Tee gef llt Mit dieser Checkbox wird angegeben ob sich momentan Tee im Zieh beh lter befindet Teekanne leeren Soll die Teekanne geleert werden so geschieht dies durch Bet tigen dieses Knopfes Wasser ist hei Das Ereignis dass das Wasser im Tank nun kocht wird in der Simu lation vom Benutzer durch Dr cken dieses Knopfes eingegeben Im erzeugten Quelltext ist dieser Knopf nicht mehr sichtbar Dar ber hinaus gibt es noch ein Popup das ge ffnet wird wenn sich die Teekanne f llt In diesem Fenster wird dem Benutzer angezeigt ob sie nun mit Wasser Tee oder lygl Abbildung A 2 in der die Dialoge der Simulation und des exportierten Programms dargestellt sind 2Um das Modell einfach zu halten ist es nicht m glich den Tank beispielsweise nur zur H lfte zu f llen er ist entweder ganz voll oder leer 3vgl wieder Abbildung A 2 Kapitel A Beispiele Die Teemaschine Strom eingeschaltet Ziehzeit TIMER Ziehzeittimer 10 Wasser einf llen _ Strom eingeschaltet Ziehzeit 15 vi mit Tee gef llt Teekanne leeren Wasser einf llen v mit Tee gef llt System Dialag Wasser ist hei Abbildung A 2 Die Dialoge der Teemaschine Br he gef llt ist Das Popup besitzt nur einen einzigen Knopf der mit OK beschriftet ist A 1 3 Umsetzung in ein Statechart Die globale Struktur Es f llt auf dass die Teemaschine recht viele parallele Teile besitz
258. gen berstellung sei auf Beek94 verwiesen 2 2 Zust nde 2 2 1 Grundformen der atomaren Zust nde Zust nde k nnen entweder atomare Zust nde basic states oder zusammengesetzte Zust nde sein die eine Menge von Unterzust nden enthalten Da zusammengesetzte Zust nde alle Eigenschaften haben die in atomaren Zust nden vorkommen sollen letztere zun chst genauer beschrieben werden Atomare Zust nde haben bis auf den globalen Wurzelzustand eingehende Ver bindungen durch die sie aktiviert werden Wenn dies geschieht k nnen sie bereits ein entsprechendes Ereignis ausl sen Selbstverst ndlich gibt es meist auch ausgehende Verbindungen ber die der Zustand wieder verlassen werden kann auch beim Verlas sen des Zustands kann ein Ereignis ausgel st werden Das Aktivieren und Deaktivieren eines Zustands wird auch als Betreten bzw Ver lassen des Zustands bezeichnet eine Formulierung die in dieser Bedeutung auch aus der Begriffswelt der Petri Netze und Zustands bergangs Diagramme bekannt ist bliche Erweiterungen Ausgehende Verbindungen sind nicht bei allen Zust nden notwendig so wird bei spielsweise der globale Wurzelzustand keine solchen besitzen Dies hei t jedoch nicht in jedem Fall dass ein solcher Zustand nicht mehr verlassen werden kann da dies auch geschieht wenn etwa ein Oberzustand verlassen wird Dar ber hinaus darf es aber auch Zust nde geben die tats chlich nicht mehr verlassen werden k nnen Dies
259. geordneten Zustand an geh ren Obwohl diese M glichkeit in einigen F llen die Zahl der notwendigen Zust nde und berg nge verringert ist es keine echte Erweiterung der Ausdrucksf higkeit An stelle des Bereichs der berschneidung l sst sich ein neuer Zustand auf derselben Hier archieebene einf hren so dass drei schnittfreie Zust nde entstehen die das System quivalent beschreiben in Abbildung 2 2 wird dies dargestellt Allerdings werden dadurch einige Bedingungen umfangreicher so muss in dem dargestellten Statechart Bygl Har87b S 258 ff 1491 Hor99a S 89 ff 5ygl HP98b S 187 ff 16yg Har88 S 527 Kapitel 2 Varianten von Statecharts in der Literatur beispielweise die Abfrage ob Zustand A aktiviert ist auf die Zust nde A und G erwei tert werden Diese Erg nzung der Statecharts wird in der Literatur nicht weiter verfolgt und auch in Statemate nicht implementiert Abbildung 2 2 Aufl sung der berlappenden Zust nde Als weitere denkbare Erweiterung beschreibt Harel sogenannte unsichere Zust nde Not Quite Sure Blobs Er will damit die Unsicherheit des Statechart Architekten formulierbar machen falls nicht klar ist ob in einem bestimmten Bereich des Statecharts Zust nde vorhanden sind Er kennzeichnet solche Zust nde wie in Ab bildung 2 3 und schreibt dazu Diese Darstellung erkl rt unsere Unsicherheit ob A B leer ist ode
260. griff des Konnektors wird in der UML nicht benutzt Hitz und Kappel spre chen stattdessen von Pseudozust nden die sie als reine notationstechnische Kr cke bezeichnen keine Zust nde im eigentlichen Sinn Wir wollen sie daher hier wie Konnektoren auff hren Zun chst sei erw hnt dass UML die beiden Formen der AND Konnektoren durch sogenannte Synchronisationsbalken anbietet Obwohl die Darstellungsweise sich von der hier beschriebenen unterscheidet soll darauf nicht genauer eingegangen werden da die Semantik exakt dieselbe ist UML bietet zwei Verbindungsstellen die den OR Konnektoren entsprechen die statische Verzweigung static branch point und die dynamische Verzweigung dyna mic choice point Beide Typen d rfen mehrere ausgehende Verbindungen haben die allerdings nicht durch weitere Ereignisse sondern lediglich durch Bedingungen be schr nkt sein d rfen Bei statischen Verzweigungen werden s mtliche Bedingungen vor dem bergang ausgewertet bei dynamischen Verzweigungen werden zun chst die Aktionen der eingehenden Verbindungen ausgef hrt und dann die entsprechende aus gehende Verbindung gew hlt Um die Bedeutung dieser Verbindungsstellen genauer zu verstehen muss erw hnt werden dass UML von einem kontinuierlichen Zeitmodell ausgeht es kommt daher durchaus auf die Reihenfolge an in der einzelne Ereignisse entlang eines bergangs auftreten Damit wird es wichtig festzustellen zu welchem Zeitpunkt
261. gs die ihren Zustand ndern k nnen entsprechen bestimmte Bereiche des Statecharts So wird eine Checkbox durch ein Paar von Zust nden etwa ON und OFF modelliert wobei ein Klick auf die Checkbox einen bergang zwischen diesen Zust nden bewirkt Eine Gruppe von Ra diobuttons entspricht im Statechart einer Konstruktion wie in Abbildung 3 4 Analog lassen sich Gruppen von Zust nden auch f r andere Dialogkomponenten finden F Farbe N a Dez N gelb blau N FI N A E N f N rot schwarz IN J T loo Abbildung 3 4 Radiobuttons im Statechart Es ist w nschenswert dass der Dialog Editor beim Einf gen solcher Komponen ten das Statechart entsprechend erg nzt oder zumindest beim Benutzer anfragt ob und wo das Statechart um die neuen Zust nde erweitert werden soll Der Benutzer braucht dadurch diese Komponenten nur einmal und nicht in beiden Editoren zu erg nzen Gleichzeitig ist sichergestellt dass sich Dialog und Statechart entsprechen und dass auf die vom Dialog erzeugten Ereignisse entsprechend reagiert wird Wenn die Logik des Dialogs auf diese Weise im Statechart kopiert wird so lassen sich Anfragen nach der momentanen Auswahl des Benutzers innerhalb des Statecharts beantworten Dadurch dass die Modellierung einer Gruppe von Dialogkomponenten allerdings von vornherein festgelegt ist kann es zur bersichtlichkeit des Statecharts beitragen wenn diese nicht explizit dargestellt wird Es i
262. gsweise ExportBed dem Import Abschnitt hinzugef gt werden Wenn bestimmte Objekte in mehreren Aktionen oder Bedingungen benutzt wer den sollen so m ssen entsprechende Vorkehrungen in denselben Klassen getroffen werden Solche Objekte m ssen sie als ffentliche Klassenvariablen public static deklariert werden Es sei hier nochmals darauf hingewiesen dass Java Aktionen und Bedingungen in der Simulation nicht ausgef hrt beziehungsweise getestet werden Aus diesem Grund und um nicht der Versuchung zu erliegen das Statechart zu umgehen sollten Zugriffe auf das Statechart nach M glichkeit vermieden und durch interne Aktionen und Be dingungen ersetzt werden Sowohl in Bedingungen als auch Aktionen wird durch die Methode varia ble String der Zugriff auf Variablen des Statechart erm glicht Sie gibt eine Variable score Simulator Variable zur ck wie mit einer solchen gearbeitet werden kann ist in der folgenden Tabelle aufgef hrt set Wert Setzt die Variable auf den angegebenen Wert Dieser kann vom Typ int double oder String sein die Variable wird auf diesen Typ konvertiert Es ist auch m glich eine weitere Variable zu bergeben in diesem Fall wird deren Wert bernommen inc Wert Erh ht die Variable um den angegebenen Wert Dieser kann vom Typ int double oder String sein wird eine Zahl bergeben wird die Variable auf den neuen Typ konviertiert im letzten Fall wird der bergebene String angeh ngt Es ist auch m gli
263. gt score Bedingungen BedAND gt score Bedingungen BedOR gt score Bedingungen BedNOT gt score Bedingungen ExportBedingung D 4 2 Interface ConditionAskable Dieses Interface wird von der Klasse implementiert die es den Bedingungen erm glicht ihren Wahr heitswert in der aktuellen Simulation festzustellen getSimBasic int SimBasic Gibt den atomaren Simulationszustand mit dem bergebenen Identifier zur ck getVariable String Variable Gibt die Simulationsvariable mit dem bergebenen Namen zur ck D 4 3 Klasse BedAND extends score Bedingungen BedKomplex Diese Klasse kombiniert mehrere Bedingungen durch AND Konstruktoren BedAND Erschafft eine neue leere BedAND isTrue boolean berschreibt die Methode der Klasse BedKomplex Gibt an ob alle Unterbedingungen wahr sind translate Hashtable Bedingung berschreibt die Methode der Klasse Bedingung Gibt eine bersetzung dieser AND Bedingung zur ck 196 Kapitel D Programmdokumentation D 4 4 Klasse BedAtomar abstrakte Klasse extends score Bedingungen Bedingung Diese Klasse ist die abstrakte Oberklasse f r alle atomaren Bedingungen Attribute ATCOND_JAVA int CONST Konstante falls es sich um eine Java Bedingung handelt ATCOND IN int CONST Konstante falls es sich um eine InState Bedingung handelt ATCOND HAS HIST int CONST Konstante falls es sich um eine HasHistory Bedingung handelt
264. gung abstrakte Klasse extends score Bedingungen Bedingung Diese abstrakte Klasse bietet die Methoden die f r alle exportierten Bedingungen gemeinsam sind au Berdem h lt sie das ConditionAskable Interface bei dem sie sich nach ihrem Wahrheitswert erkundigen k nnen Attribute ask ConditionAskable das ConditionAskable Interface bei dem sich alle atomaren Bedingungen nach ihrem Wahrheitswert erkundigen k nnen Konstruktoren ExportBedingung int Erschafft eine neue ExportBedingung mit dem angegebenen Identifier isTrue boolean berschreibt die Methode der Klasse Bedingung Gibt zur ck ob diese Bedingung wahr ist variable String gt Variable Gibt die Variable mit dem angegebenen Namen zur ck in int gt boolean Gibt an ob der Zustand mit dem bergebenen Identifier gerade aktiv ist hasHist int boolean Gibt an ob der Zustand mit dem bergebenen Identifier eine History besitzt checkArrowCondition int boolean Die abstrakte Methode die eine Bedingung berpr ft D 4 11 Klasse HasHistoryBed extends score Bedingungen BedAtomar Spezialisiert die atomare Bedingung zu einer Abfrage ob ein OR Zustand eine History besizt Konstruktoren HasHistoryBed ZustOR 201 Package score Bedingungen Kapitel D Programmdokumentation 202 Erschafft eine neue Bedingung die sich auf den bergebenen OR Zustand bezieht Methoden isTrue boolean berschreib
265. hen d rfen nur auf Zust nden enden die im sel ben OR Zustand oder in derselben Partition liegen wie der History Konnektor selbst History connector may only have outgoing arrows of type 1 1 Die Pfeile die von einem History Konnektor ausgehen d rfen nur vom Typ 1 1 sein Sollen mehre re Partitionen in den bergang miteinbezogen werden so sollte f r jede ein eigener History Konnektor verwendet werden Hooks Some hooks lie within states that are unrelated to their transition Die Zwischen punkte eines Pfeils Hooks d rfen nur in Zust nden liegen die von diesem bergang Kapitel 5 Benutzerhandbuch Der Verifikator entweder deaktiviert oder aktiviert werden oder den Pfeil komplett umfassen Ist dies nicht der Fall wird diese Fehlermeldung ausgegeben Abbildung 5 22 zeigt eine solche Situation Der Hook in Zustand C ist ung ltig da dieser Zustand von einem bergang von Zustand A auf Zustand B unber hrt bleibt Abbildung 5 22 Ein ung ltig platzierter Hook Transition for crossing a Partition Transition crosses border of partitions Diese Fehlermeldung wird ausgegeben wenn ein Pfeil die Trennlinie von Partitionen eines AND Zustands schneidet Dies ist f r SCed der Fall wenn benachbarte Hooks in unterschiedlichen Partitionen liegen Partitions Partition has no substates In Statecharts sind keine leeren Partitionen erlaubt Wer den solche gefunden wird diese Fehlermeldung ausgegeben Arrow States Dies
266. hen Situation im System die der Benutzer wohl kaum zu Testzwecken herbeif hren m chte Der Systemdialog Eine m gliche L sung dieses Problems ist es dem Benutzer einen separaten Dialog zur Verf gung zu stellen der zur Simulation der externen Ereignisse Bedingungen und Aktionen dient der Systemdialog Dies bietet sich insbesondere an wenn die Simulation ohnehin ber einen Benutzerdialog gesteuert wird der die im Folgenden erw hnten Dialogelemente bereits zur Verf gung stellt Selbstverst ndlich sollten die Elemente mit einem kurzen pr gnanten Namen versehen werden da sie nicht den kompletten zugeh rigen Quelltext anzeigen K nnen Ereignisse Ereignisse tauchen f r das System pl tzlich und gewisserma en ohne Vorbereitung auf und sind kurz darauf wieder verschwunden Das Dialogelement das genau zu diesen Eigenschaften passt ist der einfache Knopf Es bietet sich also an dem Benutzer im Systemdialog f r externe Ereignisse Kn pfe anzuzeigen Durch Dr cken eines solchen Knopfes kann er dann das zugeh rige externe Ereignis zum gew nsch ten Zeitpunkt ausl sen Wird die Anzahl der m glichen Ereignisse jedoch gro kann das Anzeigen eines Knopfes f r jedes Ereignis den Systemdialog sehr un bersichtlich Kapitel 3 Werkzeuge f r Statecharts werden lassen Denkbar ist stattdessen auch dem Benutzer eine Liste aller m glichen Ereignisse des Statecharts anzuzeigen und die von ihm in dieser Liste ausgew hlten Ereignisse an
267. her Editor 112 grafisches Statechart Modell 138 Grammatik 175 H Historyeinstieg 30 Historyfunktion 24 Historykonnektor 45 Hook 61 I Inspektor 62 106 zu Dialogkomponenten 67 Interface Stichwortverzeichnis Actor 182 ConditionAskable 196 DialogAktion 183 DialogCompManager 250 DialogCompServer 250 ErrorPrinter 296 EventAskable 216 EventHolder 183 HistoryAktion 184 Logger 203 Observer 296 UndoManager 296 VarServer 290 Kante 25 28 Klasse AbstractModell 179 AbstractParser 204 Aktion 184 AktionDialog 185 AktionEdit 186 AktionProperty 186 AktionPropertyChange 187 AktKomplex 188 AnimatedImage 296 BedAND 196 BedAtomar 197 Bedingung 197 BedKomplex 198 BedNOT 199 BedOR 200 BedParser 204 BlackLabel 297 BufferedCanvas 273 CalledAction 189 ClearHistoryAktion 189 Commander 205 CommandPort 207 Command Window 208 Compare 297 CompVarBed 200 DeepClearHistoryAktion 190 DialogEditor 213 Dimension 298 Dimension Double 298 DigButton 251 323 Stichwortverzeichnis 324 DlgCheckbox 251 DlgKomponente 252 DlgKompsSelektor 214 DlgPopup 254 DlgRadiobutton 255 DigText 255 DlgTimer 256 DrawableRubber 274 EasyFileWriter 299 EasyStringWriter 300 Ereignis 216 EreignisEdit 217 EventDialog 217 ExportAktion 190 ExportBedingung 201 ExportVariable 271 FlatButton 300 FlatRadioButton 300 GPAbschnitt 219 GrafAND 221 GrafHook 222 GrafKonnekto
268. her Zustand erzeugt dessen logisches Ge genst ck ein OR Zustand ist und die Unterzust nde die unterhalb der Koordinate liegen werden in diesen eingef gt Der neue Zustand wird zur ckgegeben und in den AND Oberzustand ein gef gt Ist dieser Zustand keine Partition wird Null zur ckgegeben partitionVertAt double gt GrafZustand Teilt diesen Zustand der eine Partition sein muss vertikal an der angegebenen Koordinate bzgl dieses Zustands Es wird ein neuer grafischer Zustand erzeugt dessen logisches Gegenst ck ein OR Zustand ist und die Unterzust nde die unterhalb der Koordinate liegen werden in diesen eingef gt Der neue Zustand wird zur ckgegeben und in den AND Oberzustand eingef gt Ist dieser Zustand keine Partition wird Null zur ckgegeben copyToNewSuper GrafZustand Hashtable GrafZustand berschreibt die Methode der Klasse GrafPunkt Kopiert diesen Zustand in den bergebenen neuen Oberzustand Gr e und Offset dieses Zu stands werden dabei bernommen In translators stehen die bertragungstabellen f r Zust nde Ereignisse und Variablen copyToNewSuper GrafZustand Point2D Double Hashtable GrafZustand Kopiert diesen Zustand wobei der Offset im neuen Oberzustand explizit angegeben wird completeCopy Hashtable GrafZustand Vector void berschreibt die Methode der Klasse GrafPunkt Schlie t den Kopiervorgang ab Dabei werden insbesondere die Aktionen beim Aktivieren und Deakt
269. hnitt im EasyFileWriter getFirstAnchor gt GrafPunkt Gibt den Anker des ersten Hooks zuriick getLastAnchor GrafPunkt Gibt den Anker des letzten Hooks zur ck delete void L scht diesen Abschnitt Die zugeh rigen Hooks werden aus ihren Ankerpunkten entfernt aber ihre delete Methode wird nicht aufgerufen Kapitel D Programmdokumentation Package score GrafSCM D 9 4 Klasse GrafAND extends score GrafSCM GrafZustand Diese Klasse stellt das grafische quivalent eines logischen AND Zustands dar Die Unterpunkte sind hierbei wie im logischen Statechart Modell die Partitionen dieses Zustands Konstruktoren GrafAND Dimension Double Erschafft einen grafischen AND Zustand der die angegebene Gr e hat Er besitzt anfangs genau eine Partition und noch keinen Partitioner GrafAND Dimension Double ZustAND Erschafft einen neuen grafischen AND Zustand und initialisiert ihn mit dem bergebenen logi schen AND Zustand isValidSize Dimension Double boolean berschreibt die Methode der Klasse GrafZustand Testet ob die bergebene Gr e f r diesen Zustand g ltig w re Dabei werden Partitionen und Partitioner beachtet setSize Dimension Double void berschreibt die Methode der Klasse GrafPunkt Setzt die Gr e dieses Zustands Dabei werden Partitionern und Partitioner beachtet addSubPoint GrafPunkt Point2D Double gt Unterpunkt berschreibt die Methode der Klasse GrafZu
270. hzeit angibt 22 auf 15 Sekunden gesetzt Im n chsten Zeitschritt geht das System in den Zustand Stop ber der angibt dass die Uhr nicht l uft Beim Betreten dieses Zustands wird der Timer TI mit dem Wert des Textfeldes initialisiert und das Textfeld 22 sichtbar gemacht damit der Wert umgestellt werden kann Wird in diesem Textfeld ein neuer Wert eingegeben wird dadurch das Ereignis ZZ ausgel st Dies f hrt dazu dass der Zustand zun chst verlassen und sofort wieder betreten wird Dadurch wird der Timer mit dem neuen Wert initialisiert Kapitel A Beispiele Die Teemaschine Ziehzeittimer init erter set Z22 15 Pause EA o TI EA on TI stop WzZ on TI erter set TI ZZ visible ZZue exitvisible Z amp se Abbildung A 5 Die Partition f r die Stoppuhr Wenn das Wasser in den Ziehbeh lter flie t wird das Ereignis WzZ ausgel st und dadurch der Zustand stop verlassen Dies f hrt dazu dass der Wert im Textfeld der Ziehzeit nicht mehr ver ndert werden kann und der Timer TI gestartet wird Das Sy stem befindet sich dann solange im Zustand l uft bis entweder der Ein Ausschalter bet tigt wurde oder der Timer abgelaufen ist Im ersten Fall wird der Timer angehal ten und das System geht in den Zustand Pause ber in dem es so lange bleibt bis der Ein Ausschalter wieder gedr ckt wird Im zweiten Fall wird das Ereignis 7 von der Uhr ausgel st und das System springt in d
271. ibt ob dieses Ereignis eingetreten ist occurred gt boolean Gibt an ob dieses Ereignis eingetreten ist save EasyFileWriter void Speichert dieses Ereignis im EasyFileWriter D 8 4 Klasse EreignisEdit extends score util Observable implements java awt event ActionListener Stellt ein Fenster dar in dem der String eines Ereignisses editiert werden kann Konstruktoren EreignisEdit Ereignis Konstruktor Methoden actionPerformed ActionEvent void Wertet Knopfdr cke aus D 8 5 Klasse EventDialog extends score Ereignisse InlineEventDialog implements java awt event WindowListener Stellt ein Fenster mit einem InlineEventDialog dar Konstruktoren EventDialog Konstruktor 217 Package score GrafSCM Kapitel D Programmdokumentation D 8 6 Klasse InlineEventDialog extends score util Observable implements java awt event ActionListener score util Observer Javax swing event ListSelectionListener Stellt eine Liste aller Ereignisse dar Neue k nnen hinzugef gt werden alte editiert oder gel scht Attribute frame JFrame Referenz auf den Frame in dem der InlineEventDialog dargestellt wird Konstruktoren InlineEventDialog JFrame Konstruktor replaceObservable Observable Observable boolean Wenn da Modell ersetzt wird wird diese Funktion implizit aufgerufen makePanel JPanel Erzeugt das Panel des Dialogs actionPerformed ActionEvent void Wer
272. ibt die Methode der Klasse Observable L scht diesen Pfeil Die Bedingung und komplexe Aktion werden auch gel scht das Triggerer eignis und die eingetragenenn atomaren Aktionen jedoch nicht deleteSoft void Entfernt diesen Pfeil aus der Liste aller LogPfeil Start und Endzust nde bleiben unber hrt Die enthaltene Bedingung wird jedoch gel scht saveProps EasyFileWriter void Speichert den Befehl das Trigger Ereignis und die Bedingung hinzuzuf gen exportAll EasyFileWriter gt void Exportiert den Quelltext f r alle LogPfeile in den EasyFile Writer exportAllConditions EasyFileWriter void Exportiert die Bedingungen aller LogPfeile in den EasyFileWriter Dabei werden nur die Aufrufe der entsprechenden atomaren Bedingungen geschrieben nicht der Quelltext dieser Bedingungen selbst exportQT EasyFileWriter boolean Diese abstrakte Methode exportiert den Quelltext dieses Pfeils wenn sie entsprechend implemen tiert wurde D 11 8 Klasse LogPfeil_1_1 extends score LogSCM LogPfeil Diese Klasse stellt eine logische Verbindung dar Sie besitzt einen Start und einen Zielzustand Konstruktoren LogPfeil_1_1 Der Pfeil besitzt am Anfang weder Start noch Endzustand LogPfeil_1_1 LogPunkt LogPunkt Erzeugt einen 1 1 Pfeil mit gegebenem logischen Start und Endpunkt setSource LogPunkt void Kapitel D Programmdokumentation Package score LogSCM Setzt den Startzustand auf de
273. id berschreibt die Methode der Klasse SCRun Holt die Aktionen aus den Dialogkomponenten throwEvent String void Speichert ein Event getVariable String Variable Fiir den VarServer addLine String void F r den Logger checkForEndStates void berschreibt die Methode der Klasse SCRun Pr ft ob ein EndState erreicht wurde und ruft dann endStateChart auf D 12 4 Klasse Timer extends javax swing JButton implements java lang Runnable Diese Klasse stellt einen Timer im Export dar Dabei wird der Timer wie ein JButton benutzt Konstruktoren Timer int Konstruktor mit Startwert setValue int void Den Timer Wert neu setzen setSelected boolean void berschreibt die Methode der Klasse AbstractButton Starten und stoppen des Timers ber die Zugriffsfunktion von AbstractButton run void Runnable Interface Z hlt hinunter und macht ein doClick bei O Kapitel D Programmdokumentation Package score SCEditor D 13 Package score SCEditor D 13 1 Klassenhierarchie java lang Object java awt Canvas gt score SCEditor BufferedCanvas gt java awt ScrollPane gt score SCEditor ScrollCanvas gt score SCEditor SCCanvas gt java awt event WindowAdapter gt score SCEditor SCEditor gt score SCEditor DrawableRubber gt score SCEditor RubberBand gt score SCEditor RubberRectangle gt score SCEditor RubberOval gt score SCEditor RubberCircle
274. iert und benutzt oder an mehreren Stellen gleichzeitig modifiziert wird In einem solchen Fall ist das Ergebnis davon abh ngig welche der beiden Aktionen zuerst ausgef hrt wird was aber meistens nicht vom Architekten des Systems beeinflusst werden kann Man kann hierbei noch zwischen Schreiben Schreiben Races und Schreiben Lesen Races unterscheiden write write beziehungsweise read write races Abbildung 3 9 zeigt beispielsweise ein Statechart in dem bei einem bergang von den Zust nden B D auf die Zust nde C E einer Variablen zwei verschiedene Werte zugewiesen werden Bei diesem Schreiben Schreiben Race ist nicht vorhersagbar welchen Wert die Variable X nach dem bergang haben wird T A I CU e X 1 e X 2 I I y Abbildung 3 9 ein Schreiben Schreiben Race Es w re daher wiinschenswert solche Schwachstellen im Modell durch den Veri fikator identifizieren zu k nnen Doch dies ist nur in einem begrenzten Ma m glich Festzustellen bei welchen berg ngen etwa Variablen die vom Statechart verwaltet werden neu gesetzt oder ausgelesen werden ist zwar relativ einfach aber ob dadurch ein Race entstehen kann h ngt nicht nur davon ab ob die entsprechenden Bedingun gen der berg nge gleichzeitig erf llt sondern auch ob deren Startzust nde gleich zeitig aktiviert sein k nnen Diese Problemstellung ist offensichtlich der Frage ob die 23 Gleichzeitig bedeutet f r das diskrete
275. iert oder nicht aktiviert ist vgl Abschnitt 1 2 10 1 4 2 Der Zeitschritt Wird nun ein Zeitschritt durchgef hrt also t 1 so werden mittels der berg nge K aus T t die Folgezust nde ermittelt Dadurch und durch die nicht vom Statechart beeinflussbaren Randbedingungen sind bereits P 1 1 Bn t 1 festgelegt Die Werte f r die Ereignisse werden neu aus den jetzt vollzogenen berg ngen sowie ex tern generierten Ereignissen gesetzt und aus den alten Zust nden werden die History informationen ermittelt Danach ist der Vektor T t 1 vollst ndig definiert Im Folgenden betrachten wir eine Kante k K als Tupel V N e Q A Siehe hierzu auch Abschnitt 1 2 9 auf Seite 25 Wir legen weiterhin fest dass wir mit z N explizit einen Zustand meinen F r Historyeinstiege schreiben wir h N Ermittlung der Folgezust nde Sei I f nun der Statechart Konfigurationsvektor zum Zeitpunkt Im Folgezustands vektor Z 1 1 z t 1 2n f 1 gilt nun 123 JIkEK 2 ENA WE V v t 1 124 ZAkEeK zeVA weV v N AkEK zENA WwEV v t 1 AQYNe gt zlt 1 zft 125 HkEK 2 EVA We V v t 1 1 A AkeK z ENA WvEV v t Wenn das Ziel kein Zustand sondern ein Historyeinstieg h H ist gilt analog folgende Bedingung 1 26 IkEK hENA WwveEV v r 1 AQYNe gt Wehl t y t l 1 Diese Gleichungen gelten exklusive der Setzung durch Unter oder Oberzust nde 32 Kapitel 1 De
276. ieser Zustand mit dem bergang CALL je nach dem ob der Spei cher noch Platz hat Anruf lt MaxAnz oder schon voll ist Anruf MaxAnz wird nun der Zustand play mesg oder play only betreten In beiden F llen wird der Timer gestartet eigentlich wird auch eine Ansage abgespielt aber dies wurde nicht in das Modell miteinbezogen Ist der Speicher bereits voll beendet das System nach dem Abspielen den Anruf und geht wieder in den Ruhezustand ber Ansonsten wird nach der Ansage wenn Kapitel A Beispiele Ein einfacher Anrufbeantworter incomingall CALL Anrufe lt MaxAnz PLFMESO ENTER on Timer HANGUP Anrufe MaxAnz plyed record ENTER on Timer plz only lged placa ENTER Anrufer 1 Abbildung A 12 Verhalten bei einem ankommenden Anruf der Anrufer noch nicht aufgelegt hat die Aufnahme begonnen Beim Betreten des Zustands record wird die Anzahl der aufgenommenen Nachrichten um eins erh ht Die Aufnahme wird beendet wenn der Zustand incoming call durch das Ereignis HANGUP wieder verlassen wird Zustand play calls Wenn im Wartezustand der Knopf Abspielen gedr ckt wird und bereits Nachrich ten aufgenommen wurden so wird dieser Zustand betreten Der Zustand ist in Abbil dung A 13 dargestellt Beim Betreten des Zustands play calls wird die Variable PlayNr die angibt welche Nachricht abgespielt wird mit dem Wert 1 initialisiert Der Default Einsti
277. ig d h Vx y Z depth x depth y 0 gt x y 1 2 4 Die Partitionsfunktion T F r jedes z Z ist n z eine vollst ndige Zerlegung von o z in disjunkte Teilmengen Partitionen Ti 2 Tray 2 Mit nz N Das hei t f r je zwei Elemente x Tt und y T mit i j gilt x y N hei t Anzahl der Partitionen von o z2 Definition Partitionen der atomaren Zust nde F r alle atomaren Zust nde z Z mit z ist o z 0 Es ist deshalb n z 0 die disjunkte Zerlegung in eine Partition Wir schreiben auch kurz T z 0 Definition Partition der nichtatomaren Zust nde F r alle nichtatomaren Zust nde z Z soll gelten 1 15 Vn z en z n z 0 Bemerkung Partitionierung aller Unterzust nde Wegen der Vollst ndigkeit der Zerlegung liegen alle Unterzust nde in einer Partition das hei t 1 16 YzEZ y o 2 S Ii 1 nr y T 2 Definition Charakterisierung zusammengesetzter Zust nde vom Typ OR Ein Zustand z Z hei t zusammengesetzter Zustand vom Typ OR gdw o z A 0 Ang 1 Kapitel 1 Definition von Statecharts Formale Definition Definition Charakterisierung zusammengesetzter Zust nde vom Typ AND Ein Zustand z Z hei t zusammengesetzter Zustand vom Typ AND gdw o z A 0 Anri gt 1 Definition Erweiterung der Partitionsfunktion Wir definieren die Erweiterung der Partitionsfunktion wie folgt F r z Z ist 1 17 y
278. igButton DigRadioButton DigTimer Abbildung 6 5 Aufbau des logischen Dialogmodells Das logische Dialogmodell LogDM besteht aus den Klassen f r die logischen Dialogkomponenten DlgCheckbox DlgPopup DigRadiobutton DlgButton DIgText und DlgTimer einer Oberklasse f r diese Komponenten DlgKomponente einer Klasse die diese Komponenten h lt LogDModell und zwei Interfaces die den Zu griff auf die Komponenten regeln DialogCompManager und DialogCompServer Den hierarchischen berblick gibt Abbildung 6 5 Das LogDModell h lt die logischen Dialogkomponenten Ein Zugriff ist von au en ber das DialogCompServer Interface m glich Dieses liefert zu einer ID die da zugeh rige DlgKomponente ber den DialogCompManager ist der Zugriff auf DIgKomponenten m glich Mit diesem Interface k nnen die Komponenten sichtbar unsichtbar oder ein aus ge schaltet werden Dieses Interface wird von der Statechart Klasse implementiert Kapitel 6 Funktionsweise der Module 6 4 Der Editor Der Statechart Editor Der Statechart Editor SCEditor liefert das grafische Benutzerinterface um das gra fische Statechart Modell GrafSCM zu bearbeiten Die Hauptklasse ist hier SCEdi tor Diese erstellt das Fenster mit den Werkzeugleisten und enth lt die Zeichenfl che vom Typ SCCanvas Es werden diverse Klassen zur Darstellung von Editiervorg ngen ben tigt wie alle Rubber Klassen sowie das TranslationWindow und der Painter ber d
279. il Wenn ein Pfeil markiert ist zeigt der Inspektor ein Feld wie in Abbildung 5 4 New Project axi File Edit View Tools Ol gt 6 9 From 1 null To 6 null 9 null Trigger enter 5 Condition in 2 Actions setl a 1 Abbildung 5 4 Inspektor mit markiertem Pfeil Im einzelnen sind hier angegeben From Die Startknoten des Pfeils To Die Zielknoten des Pfeils Trigger Das Ereignis f r den bergang 108 Kapitel 5 Benutzerhandbuch Der Inspektor Condition Die Bedingung f r den bergang Diese wird direkt in diesem Feld edi tiert Actions Die Aktion die bei einem bergang ausgef hrt wird 5 3 3 Inspektor f r einen Text SCed bietet die M glichkeit Texte in das Statechart einzuf gen Diese haben aller dings keine semantische Funktion sondern dienen dem Benutzer lediglich dazu An merkungen zu einzelnen Elementen in die Ansichten zu integrieren Ein solcher Text kann als Bezugspunkt entweder den Zustand haben in dem er liegt oder einen Pfeil Im Inspektor wird das entsprechende Objekt im Feld Reference angegeben siehe hierzu auch Abbildung 5 5 Texte die sich auf einen Pfeil beziehen werden in der Form Ereignis Bedingung Aktion mit den momentanen Werten des Pfeils initialisiert Diese Voreinstellung kann im Inspektor ge ndert werden Durch Dr cken des Knopfes ajust werden wieder die aktuellen Werte des Pfeils bernommen ols TEXT EA Text EA Referen
280. il gt void 211 Package score control Kapitel D Programmdokumentation 212 Felder zeichnen showFields GrafHook void Felder zeichnen showFields GrafPunkt void Felder zeichnen dispose boolean void Dieses Fenster l schen update Observable Object gt void Neuzeichnen wenn sich das Modell ge ndert hat actionPerformed ActionEvent void Werte nach einem Event setzen D 5 13 Klasse Scanner extends java lang Object Der Scanner unterteilt einen Strint in Tokens Konstruktoren Scanner String Erzeugt einen neuen Scanner aus einem String Methoden nextToken gt Token Liefert das n chste Token hasMoreTokens boolean True wenn es keine Tokens mehr gibt setParseDims boolean void Setzt ob im ParseString Dimensions vorkommen k nnen setParsePoints boolean void Setzt ob im ParseString Points vorkommen k nnen setlgnoreParens boolean gt void Setzt ob Klammern ignoriert werden sollen D 5 14 Klasse SCInterpreter extends score control Interpreter Der Interpreter f r die Statechart Befehle Konstruktoren SCinterpreter File Commander Logger Parser JProgressBar Erzeugt einen neuen Interpreter Methoden interprete int int berschreibt die Methode der Klasse Interpreter Interpretiert ein Kommando Kapitel D Programmdokumentation Package score DEditor D 5 15 Klasse Token extends java lang Object Klasse
281. ile Gibt Null zur ck wenn kein entsprechendes Objekt gefunden wird probeDepth int berschreibt die Methode der Klasse GrafZustand Gibt die maximale Tiefe unterhalb dieses Zustands an draw int Painter Point2D Double GrafModellSicht gt void berschreibt die Methode der Klasse GrafZustand Zeichnet diesen grafischen Punkt und Unterzust nde bis zur angegebenen Tiefe Eine Tiefe von 0 hei t dabei dass nur dieser Zustand ohne Partitionen gezeichnet werden soll bei 1 werden die Partitionen und deren direkte Unterzust nde gezeichnet Der angegebene Offset ist der Punkt an dem die linke obere Ecke dieses Zustands effektiv gezeichnet werden soll hasSubPoints boolean 221 Package score GrafSCM Kapitel D Programmdokumentation berschreibt die Methode der Klasse GrafZustand Gibt an ob dieser Zustand Unterpunkte besitzt Dies ist bei einem AND Zustand immer der Fall isValidPartitioner Partitioner boolean Gibt an ob Anfangs und Endpunkt des bergebenen Partitioners innerhalb dieses Zustands lie gen addPartitioner Partitioner void F gt einen Partitioner hinzu Es wird angenommen dass dieser Partitioner ein f r diesen Zustand g ltiger ist isValidHMove double double boolean berschreibt die Methode der Klasse GrafZustand Gibt an ob die bergebene horizontale Bewegung eines Partitioners g ltig ist isValidVMove double double boolean berschreibt die Methode der K
282. imidium facti qui coepit habet Horaz Episteln 1 2 40 Einleitung berblick ber die Arbeit Diese Arbeit soll einen Einblick in die Modellierung von Benutzerschnittstellen mit der Hilfe von Statecharts geben Daf r werden wir Statecharts zun chst als Erweite rung von Zustands bergangs Diagrammen vorstellen und im Anschluss formal de finieren was wir unter einem Statechart verstehen wollen und welche Semantik da hintersteht Dabei werden wir haupts chlich von der Fassung ausgehen in der sie David Harel 1987 erstmals vorgestellt hat Danach wird ein berblick ber einige un terschiedliche Varianten und Erweiterungen gegeben die Statecharts in der Literatur erfahren haben In Kapitel 3 werden dann einige Werkzeuge diskutiert die f r die Arbeit mit Statecharts denkbar sind Hierbei wird sowohl auf die Frage eingegangen welche M glichkeiten diese Werkzeuge bieten sollten als auch Beschr nkungen solcher Pro gramme aufgezeigt Im zweiten Teil soll der Blick genauer auf das Programm SCed gelenkt werden das einige der vorher besprochenen Werkzeuge umsetzt Zun chst wird beschrieben welche Form der Statecharts dem Programm zugrunde liegt und diese Auswahl wird begr ndet In Kapitel 5 folgt das Benutzerhandbuch das die Funktionen von SCed vorstellt und das Arbeiten mit diesen erkl rt Kapitel 6 schlie lich wird auf dieser Grundlage erl utern wie die einzelnen Teile von SCed zusammenarbeiten Zwei Beispiele das
283. imulation starten stopSimulation void Die Simulation stoppen runPhase gt void Ein Phase abarbeiten resetTime void Die Zeit auf O setzen incTime gt void Die Zeit erh hen doTarget LogPunkt Vector Vector boolean Ein Ziel eines bergangs behandeln doTransitions void Die berg nge durchf hren checkTransition LogPfeil Vector Vector boolean berg nge pr fen checkForEndStates void Pr fen ob ein EndState erreicht wurde getEvents Vector Die Events liefern storeEvent Object void Ein Event speichern createDialogs void Die Dialoge erschaffen fetchDlgActions gt void Die Aktionen der Dialoge holen 291 Package score Simulator Kapitel D Programmdokumentation 292 D 15 4 Klasse Simulation extends score Simulator SCRun implements score Ereignisse EventAskable score util Observer score Bedingungen ConditionAskable Javax swing event ListSelectionListener java awt event WindowListener Diese Klasse implementiert SCRun f r die Simulation Konstruktoren Simulation GrafSCModell LogDModell Observable Konstruktor setPhase int void berschreibt die Methode der Klasse SCRun Die Phase setzen createDialogs void berschreibt die Methode der Klasse SCRun Die Dialoge erzeugen occurred Ereignis boolean Pr fen ob Ereignis e geschehen ist refreshLists void Setze die Listen neu runPha
284. ine Fehlermeldung ausgeben Kapitel D Programmdokumentation Package score SCEditor D 13 15 Klasse ScrollCanvas extends java awt ScrollPane Erweitert einen Canvas um eine ScrollPane Konstruktoren ScrollCanvas int int Konstruktor Methoden getCanvas gt BufferedCanvas Das Canvas liefern getGraphics Graphics berschreibt die Methode der Klasse Component Graphics des Canvas liefern getUnbufferedGraphics Graphics Ungepufferte Graphics des Canvas liefern D 13 16 Klasse TranslationWindow extends score util Observable implements java awt event ActionListener Das Fenster mit den bersetzungsvorschl gen beim Kopieren Konstruktoren TranslationWindow Konstruktor Methoden setTables Hashtable Hashtable Hashtable void Die bersetzungstabellen setzen getZustandTable Hashtable Die Zustandstabelle zur ckgeben getEreignisTable Hashtable Die Ereignistabelle zur ckgeben getVariableTable Hashtable Die Variablentabelle zur ckgeben setTopState GrafZustand void Den topState der Translateion setzen show void Das Fenster zeichnen dispose gt void Das Fenster l schen actionPerformed ActionEvent void Auf den OK Knopf reagieren 283 Package score SimSCM Kapitel D Programmdokumentation D 14 Package score SimSCM D 14 1 Klassenhierarchie java lang Object gt score LogSCM LogPunkt gt score
285. inen Zustand zeichnen setColorToDefault void Default Farbe setzen drawText Point2D Double GrafText GrafModellSicht void Textlabel zeichen drawPartition Point2D Double GrafZustand void Zeichnet einen Zustand als Partition d h ohne Umrandung drawPartitioner double double double double Partitioner void Einen Partitioner zeichnen drawArrowSect GPAbschnitt GrafModellSicht boolean boolean void Einen Pfeilabschnitt zeichnen drawUniversal Point2D Double GrafKonnektor void Einen UniversalKonnektor zeichnen drawHistory Point2D Double GrafKonnektor boolean void Einen Historyeinstieg zeichnen drawDefault Point2D Double GrafKonnektor void Einen Defaulteinstieg zeichnen D 13 5 Klasse RubberBand extends score SCEditor DrawableRubber Ein Gummiband Attribute visible boolean Ist er gerade sichtbar Konstruktoren RubberBand Graphics Point Point Color Konstruktor RubberBand Graphics Point Point Color Point 275 Package score SCEditor Kapitel D Programmdokumentation 276 Konstruktor Methoden draw void berschreibt die Methode der Klasse DrawableRubber Rubber zeichnen erase gt void berschreibt die Methode der Klasse DrawableRubber Rubber l schen D 13 6 Klasse RubberCircle extends score SCEditor RubberOval Ein Kreis Konstruktoren RubberCircle Graphics Point int Color Konstruktor
286. ing String boolean String Erschafft eine neue SetVariableAktion mit dem angegebenen Identifier zur angegebenen String Variable createActionSetVar int String int boolean String Erschafft eine neue SetVariableAktion mit dem angegebenen Identifier zur angegebenen Integer Variable createActionSetVar int String double boolean String Erschafft eine neue SetVariableAktion mit dem angegebenen Identifier zur angegebenen Double Variable createActionThrow int int String Erschafft eine neue Throw Aktion mit dem angegebenen Identifier zum angegebenen Ereignis createActionJava int int String String String Erschafft eine neue JavaAktion mit dem angegebenen Identifier mit dem angegebenen Quelltext createDialog DlgKomponente int boolean boolean String Erschafft ein neues Dialogelement mit den bergebenen Angaben zu Typ Sichtbarkeit zu Beginn und Zugeh rigkeit zum Benutzer oder Systemdialog addActionActivate int int gt String F gt die angegebene Aktion zum angegebenen Zustand beim Aktivieren hinzu addActionDeactivate int int String F gt die angegebene Aktion zum angegebenen Zustand beim Deaktivieren hinzu addActionArrow int int String F gt die angegebene Aktion zum angegebenen Pfeil hinzu addActionDialog int int gt String F gt die angegebene Aktion zum angegebenen Dialogelement hinzu addCondition int Bedingung String F gt die bergebene Bedingung zum
287. ionen liegt in der einfachen M glichkeit Automatismen einzuf hren Weiterhin haben wir das Laden und Speichern in diesem Format implementiert so dass die gespeicherten Dateien in einem Klartextformat vorliegen und so auch manuell noch ge ndert werden k nnen Die Sprache in der wir die Kommandos erlauben ist recht einfach aufgebaut um das Parsen m glichst schnell durchzuf hren So wird nur ein Kommando je Zeile erlaubt Eine Zeile wird nach erfolgreichem Parsen eines Befehls nicht weiter geparst Es wird nicht zwischen Gro und Kleinschreibung unterschieden Die Tabelle C ab Seite 175 enth lt die Grammatik der Sprache In diesem Zusammenhang ist auch die Implementation der Undo Funktionalit t zu erw hnen SCed speichert die im Editor vorgenommenen nderungen auf einem Stack indem hier das Statechart in der eben erw hnten Sprache abgelegt wird Wird eine nderung zur ckgenommen so wird das aktuelle Statechart auf einem Redo Stack abgelegt so dass sowohl weitere Undo als auch Redo Aufrufe m glich sind 6 9 Ausblick Es gibt selbstverst ndlich viele M glichkeiten wie das Programm weitergef hrt wer den k nnte Die wohl strengste Einschr nkung die SCed den Statecharts auferlegt ist die Festlegung auf einen einzigen Namensraum Eine naheliegende Erweiterung des Programms w re es daher mehrere Statecharts zuzulassen Dadurch k nnten ge trennte Namensr ume verwendet werden durch die eine echte AND Parametrisierung Kap
288. ioners unter dem Oberzustand der angegebenen Sicht Am Ende dieser Methode wird ein Refresh des Modells aufgerufen isHorizontal boolean Gibt zur ck ob dieser Partitioner waagrecht liegt isVertical boolean Gibt zur ck ob dieser Partitioner senkrecht liegt isInstalled boolean Gibt zur ck ob dieser Partitioner schon installiert wurde getUninstalledFirst Point2D Double Gibt den ersten Endpunkt des Partitioners zur ck Es wird davon ausgegangen dass der Partitioner noch nicht installiert ist getUninstalledSecond Point2D Double Gibt den zweiten Endpunkt des Partitioners zur ck Es wird davon ausgegangen dass der Parti tioner noch nicht installiert ist getInstalledFirst GrafModellSicht Point2D Double Gibt den Anfangspunkt bez glich des Zustands zur ck in dem dieser Partitioner installiert ist getInstalledSecond GrafModellSicht Point2D Double Gibt den Endpunkt bez glich des Zustands zur ck in dem dieser Partitioner installiert ist getDepthTo GrafPunkt int berschreibt die Methode der Klasse GrafTyp Gibt die Tiefe des Partitioners zum gegebenen Oberzustand zur ck Diese ist um 2 gr er als die Tiefe des zugeh rigen AND Zustands Wird kein Oberzustand gefunden wird 1 zur ckgegeben touches Dimension Double boolean Kapitel D Programmdokumentation Package score GrafSCM Gibt an ob der Partitioner den Rand des Oberzustands mit der bergebenen Gr e ber
289. is gemeldet wird Dies erm glicht relativ schnelle Reaktionen des Systems Werden die Ereignisse jedoch in die Bedingungen integriert so m ssen s mtliche ausgehenden Verbindungen aller aktiven Zust nde kontinuierlich berpr ft werden Dies kann bei gro en Systemen und komplexen Bedingungen durchaus die Reaktionsgeschwindig keit beeintr chtigen Ein hnliches Problem ergibt sich aus der Frage ob auch verneinte Ereignisse als Ausl ser zugelassen sind Harel und Namaad schreiben dazu Die Erfahrung zeigt dass praktisch keiner der Benutzer von Statemate negierte Ereignisse benutzt hat au er sie waren mit positiven Ereignissen durch UND verkn pft Auf diese Feststellung lie e sich eingehen indem das erw hnte positive Ereig nis als ausl sendes Ereignis angegeben wird und die Negation in den Bedingungsteil bernommen wird Es w re dann immer noch f r jeden bergang ein Ereignis notwen dig so dass die Software in der oben beschriebenen Weise effizient arbeiten k nnte und die Ereignisse dennoch deutlich flexibler benutzt werden k nnen Als Mittelweg bietet es sich an die Verbindungen die von Ereignissen ausgel st werden sei es durch ein explizit genanntes Ereignis oder eines das durch eine Bedin 3Wir gehen in diesem Zusammenhang davon aus dass das Statechart als Quelltext exportiert werden kann wie es in Abschnitt 3 3 2 beschrieben wird vgl HN96 S 324 Kapitel 3 Werkzeuge f r Statecharts Grafisch
290. ischen Vergr erung gibt es die M glichkeit Ansichten ei nes Zustandes zu ffnen In dieser wird dann nur der entsprechende Zustand und seine Unterzust nde betrachtet sowie ein und ausgehende Verbindungen Wir haben uns Der Editor 143 Der Simulator Kapitel 6 Funktionsweise der Module 144 gegen die M glichkeit einer partiellen Vergr erung in einer Ansicht entschieden da dies eine automatische Platzierung der Komponenten erfordert Hingegen bieten wir mit der M glichkeit mehrere Fenster des gleichen Statecharts in unterschiedlichen Vergr erungen zu ffnen eine hnliche Editierm glichkeit die aber immer die abso lute Positionierung sicherstellt Um die grafische Ansicht bersichtlich zu halten und nicht zu berlasten werden nichtgrafische Informationen in einem separaten Fenster dem Inspektor dargestellt Hier werden alle Daten der markierten Objekte zum Editieren angezeigt nderungen wirken sich sofort auf alle Ansichten aus Der Dialog Editor Neben dem oben erw hnten Statechart Editor bieten wir einen einfachen Dialog Editor der Dialogkomponenten in einer Liste verwaltet Auch die Eigenschaften der Dialoge werden im Inspektor editiert Eingabemasken Zur Eingabe der Bedingungen Aktionen und Freignisse existieren Eingabemasken 6 5 Der Simulator Der Simulator dient der Simulation des erstellten Statecharts Das Verhalten wird tiber die Zeit ermittelt und dargestellt Benutzereingaben ber Dialog
291. itel 6 Funktionsweise der Module m glich wird Auch die starke Rahmenbedingung lie e sich dadurch in naheliegender Weise umsetzen Die Umstellungen die hierf r notwendig werden sind jedoch sehr umfangreich Einige kleinere Modifikationen best nden etwa darin weitere der im Pflich tenheft in Abschnitt B 1 2 aufgef hrten Kann Kriterien umzusetzen wie etwa die statischen Reaktionen oder die Diagramm Konmnektoren Auch das Hinzuf gen von verz gerten Aktionen w re ohne gro en Aufwand machbar Andere Punk te der Kann Kriterien w rden einen deutlichen Umbau des Programms erfordern wie etwa das Umsetzen eines alternativen Zeitmodells oder einer objektbezogenen Undo Redo Funktion Dar berhinaus k nnte auch eine M glichkeit vorgesehen wer den externe Ereignisse als Quelltext einzugeben es m sste hierbei jedoch gegebenen falls die Rolle der Ereignisse im Quelltextexport umgestellt werden Bedingungen an Default Einstiegen haben wir allerdings ausgeschlossen obwohl diese M glichkeit in den Kann Kriterien aufgef hrt wurde weil sie die bersichtlichkeit des Statecharts st ren Bei den Bedingungen lie e sich zus tzlich eine el se Bedingung einf hren Als Erweiterung des Dialog Editors w re denkbar dem Benutzer die M glicheit zu geben auch das grafische Layout des erzeugten Dialogs zu bearbeiten Das Problem hierbei liegt allerdings nicht in der Struktur von SCed wo sich entsprechend erweiter te Dialogkomponen
292. itiert werden soll so wird das Aktions Eigenschaftsfenster ge ffnet siehe Abbildung 5 16 Hier w hlt man mit dem Selektor den Typ der Aktion aus und setzt die Parameter neu Welche Parameter das sind h ngt vom Typ der Aktion ab 5 9 Der Simulator Der Simulator wird aus dem Hauptmen aufgerufen Mit Hilfe des Simulators ist es m glich das Verhalten eines Statecharts ber der Zeit zu simulieren Zu Beginn der Simulation wird das Statechart mit Hilfe des Verifikators siehe Abschnitt 5 13 ab Sei te 127 gepr ft Wenn es Fehler enth lt erscheint eine Warnung Als n chstes ffnet sich das Simulationsfenster siehe Abbildung 5 17 Dieses enth lt folgende Elemente Steuerkn pfe Mit diesen Kn pfen l t sich die Simulation steuern So wird diese mit Run gestartet und mit Stop wieder gestoppt Mit Step kann die Simulation ein Zeitschritt weitergesetzt werden Phase schaltet eine Phase weiter Mit Reset kann die Simulation wieder in den Startzustand gesetzt werden und mit Close wird die Simulation beendet und das Simulationsfenster geschlossen Delay Mit diesem Wert wird die Zeit eingestellt welche die Simulation in der Phase Collect External Events auf Benutzerevents wartet Der Minimalwert ist hier 100 ms Logmeldungen erscheinen direkt im Fenster unter der Schalterleiste Variable In dieser Liste werden alle in der Simulation bisher benutzten Variablen und ihr Wert gelistet Diese k nnen bei angehaltener Simulation hi
293. ittlung aktivierter Unterzust nde Wenn ein komplexer Zustand aktiviert wird wird automatisch auch ein Unterzustand aktiviert Bei komplexen Zust nden vom Typ AND wird sogar in jeder Partition ein Unterzustand aktiviert Formal k nnen wir dieses Verhalten wie folgt erfassen 1 31 Vie f l nz e t l 1 gt Vyed z yl l 1 Die Historyeintr ge werden auf den aktuellen Stand gesetzt das hei t 1 32 Vzez Wy zeoly Az t 1l1ezehlyt l Diese Formeln gelten nat rlich rekursiv Zur Erinnerung Die Historyfunktion ist am Anfang mit dem Defaulteinstiegswert initialisiert Hier gibt es in der Literatur auch andere Varianten Ermittlung deaktivierter Unterzust nde Wenn ein Zustand deaktiviert wird werden auch alle Unterzust nde deaktiviert das hei t 1 33 VEZ 2 t 0 gt VWyE0 z y t 0 Die Historyeintr ge bleiben dabei unver ndert das hei t 1 34 Vi 1 nz Cipng 1 1 1 gt h zi t 1 h zi t Ermittlung aktivierter Oberzust nde Wenn ein Unterzustand direkt angesprungen wird dann werden automatisch alle Ober zust nde aktiviert 1 35 ZEZ z t 1 gt VyEZ z 0 y y t 1 siehe hierzu Abschnitt 2 3 2 Kapitel 1 Definition von Statecharts Abweichungen Ermittlung deaktivierter Oberzust nde Wenn alle Unterzust nde eines Oberzustands deaktiviert wurden dann wird auch der Oberzustand deaktiviert 1 36 VzeZ Vyeo z y t 0 Sz 1 0 Bemerkung Diese Formel stellt ei
294. ivieren gesetzt delete void berschreibt die Methode der Klasse GrafPunkt L scht diesen Zustand und bewegt eventuell vorhandene Unterzustande in den Oberzustand des gel schten OR Zustands maybeArrowSource boolean berschreibt die Methode der Klasse GrafTyp Gibt an dass dieser Zustand Startpunkt eines Pfeils sein darf maybeArrowTarget boolean berschreibt die Methode der Klasse GrafTyp Gibt an dass dieser Zustand Endpunkt eines Pfeils sein darf save EasyFileWriter gt void berschreibt die Methode der Klasse GrafPunkt Speichert diesen Zustand im EasyFileWriter D 9 17 Klasse Partitioner extends score GrafSCM GrafIyp Diese Klasse stellt eine Partitions Grenzlinie dar Sie hat einen Verweis auf den Zustand den sie partitio niert und zwei Endpunkte in Koordinaten dieses Zustands Attribute superOffset Point2D Double Diese Variable enth lt den Offset des Oberzustands bez glich des Hauptzustands in dem dieser Partitioner eingef gt werden soll Ist Null sobald diese Partition wirklich durchgef hrt wurde Konstruktoren Partitioner Point2D Double Point2D Double GrafZustand Point2D Double 247 Package score GrafSCM Kapitel D Programmdokumentation 248 Erzeugt einen neuen Partitioner der aber zun chst nicht eingef gt ist sondern nur eine M glich keit darstellt Er liegt zwischen den beiden Punkten die bez glich des Oberzustandes angegeben werden den dieser
295. klasse der Si mulation aus dem logischen Modell gelesen und ausgef hrt Auch beim Quelltextexport wird dieses Modell benutzt Die in diesem Modell vorhandene Klasse der Konnektoren wird nur f r diesen Fall benutzt Die Verbindun gen werden aus dem logischen Modell bernommen Das hier beschriebene Modell ist jedoch kein aktives Modul es dient wie die anderen beiden Modelle prim r der Datenspeicherung Es sorgt allerdings daf r dass Ober und Unterzust nde so aktiviert beziehungsweise deaktiviert werden dass der Zustand des Statecharts konsistent ist Die eigentliche Durchf hrung der Simulation beziehungsweise des ausf hrbaren Programms obliegt der Klasse SCRun die in Ab schnitt 6 5 2 genauer beschrieben wird Bei den Klassen des Modells sei auf folgende Dinge hingewiesen SimSCModell Wie bei den anderen Modellen auch enth lt diese Klasse den Ober zustand Au erdem ist ber diese Klasse der Zugriff auf die Simulations zust nde m glich Insbesondere k nnen so die Bedingungen testen ob bestimm te Zust nde aktiv sind SimBasic Ein SimBasic ist ein aktivierbarer Zustand Er hat eine logische Entspre chung die mindestens ein atomarer Zustand ist W hrend die berg nge be rechnet werden gibt es zwei Vektoren von besonders markierten Zust nden diejenigen die gerade noch aktiv sind und diejenigen die gerade aktiv werden SimOR Mit dieser Klasse wird die Klasse SimBasic zu einem OR Zustand erweitert Sie erh lt Unterz
296. komponenten beein flussen den Ablauf der grafisch in allen offenen Ansichten dargestellt wird 6 5 1 Verwaltete Daten Der Simulator hat Zugriff auf die Daten die f r den Ablauf der Simulation notwendig sind Dazu geh ren insbesondere e der Konfigurationsvektor mit den aktiven Zust nden e cine Ereignismenge welche die momentan sichtbaren Ereignisse enth lt e cine Aktionsmenge welche die auszuf hrenden Aktionen enth lt e den Zeitz hler e die History Hierarchie f r jeden Zustand bei dem ein History Einstieg m glich ist Diese Daten teilen sich Simulator und Simulationsmodell SimSCM So werden Zustandsvektor und History Hierarchie im Simulationsmodell gespeichert In einem Zeitschritt f hrt der Simulator dann die entsprechenden Transitionen durch Die Si mulationsobjekte f hren selbst die nebenl ufigen Aktivierungen wie Aktivieren von Ober und Unterzust nden durch und liefern dem Simulator die dabei erzeugten Ak tionen zur ck dieses Verfahren wird in Abschnitt 6 5 3 noch genauer beleuchtet Der Simulator h lt die Ereignis und Aktionsmenge welche auf diesem Weg aktualisiert Kapitel 6 Funktionsweise der Module Der Simulator beziehungsweise in den entsprechenden Phasen ausgef hrt werden Der Zeitz hler wird auch vom Simulator aktualisiert und dient ausschlie lich der Benutzerinformati on Der Simulator ben tigt Zugriff auf beziehungsweise Interaktion mit folgenden Komponenten e den Dialogelementen e d
297. koordinaten des vorletzten Punktes zur ck getCoordsOfFirst GrafModellSicht Point2D Double Gibt die Zeichenkoordinaten des ersten Punktes zur ck getCoordsOfLast GrafModellSicht Point2D Double Gibt die Zeichenkoordinaten des letzten Punktes zur ck getPosOfNeighbours GrafHook GrafModellSicht Vector Gibt die Zeichenkoordinaten s mtlicher Nachbarzust nde zur ck addPosOfCrossing Vector GrafPunkt GrafModellSicht void F gt zum bergebenen Vector die Zeichenkoordinaten der Hooks hinzu deren Verbindungslinie die Grenzen des bergebenen GrafPunkts schneidet addHooksJustOutside Vector GrafPunkt gt void F gt zum bergebenen Vector die Hooks dieses Abschnittes hinzu die gerade au erhalb des ber gebene GrafPunkts liegen hasHookOutside GrafPunkt gt boolean Gibt an ob dieser Abschnitt Hooks au erhalb des bergebenen GrafPunkt hat translate Hashtable int GrafPfeil GPAbschnitt Gibt eine bersetzung dieses Abschnitts zur ck die zum bergebenen Pfeil geh rt Mit dem Modus wird bergeben ob der erste oder letzte Hook ein ConnectorHook ist und deshalb nicht mit eingef gt werden soll save EasyFileWriter int gt void Speichert diesen Abschnitt im EasyFileWriter Der Modus gibt dabei an ob einer der Endpunkte dabei vernachl ssigt werden soll weil es sich um den KonnektorHook des Pfeils handelt der gesondert gespeichert wird save EasyFileWriter void Speichert diesen Absc
298. ktionen werden entsprechend erzeugt und gesetzt Das View Men ber das View Men ist der Zugriff auf die folgenden Funktionen m glich Refresh Alt F Aktualisiert s mtliche Ansichten und den Dialog Editor Dialog Editor Alt D ffnet einen Dialog Editor Es kann immer nur ein Dialog Editor gleichzeitig offen sein Event List Alt E ffnet eine Liste aller Ereignisse Hier k nnen Ereignisse hinzu gef gt modifiziert oder gel scht werden Action List Alt A ffnet eine Liste aller Aktionen Hier k nnen Aktionen hinzu gef gt modifiziert oder gel scht werden New View Alt V ffnet eine neue Ansicht auf das globale Statechart New View of Marked State Wenn Zust nde markiert sind werden ber diese Funk tion Sichten auf diese Zust nde ge ffnet Das View Men endet mit einer Liste aller offenen Ansichten durch Ausw hlen eines dieser Eintr ge wird die entsprechende Sicht in den Vordergrund geholt 3F r eine genauere Beschreibung dieses Editors sei auf Abschnitt 5 5 verwiesen 111 Der grafische Editor Kapitel 5 Benutzerhandbuch 112 Das Tools Men Im Tools Men lassen sich die zus tzlichen Werkzeuge ausw hlen Check Alt C Startet den Verifikator Die Ausgabe erscheint in einem separaten Fen ster Die m glichen Fehlermeldungen werden in Abschnitt 5 13 beschrieben Check Options Mit diesem Men eintrag kann der Benutzer ausw hlen welche der Eigenschaften des Statecharts berpr ft we
299. l sogar ignoriert muss f r jede Klasse von Komponenten einzeln spe zifiziert werden Es ist daher w nschenswert die Zahl der Methoden m glichst gering zu halten Es sei zun chst erw hnt dass die Kommunikation des Dialogs mit dem Statechart ber Ereignisse geschehen sollte Da die meisten Komponenten lediglich ein einziges Ereignis ausl sen k nnen wie etwa Knopf gedr ckt sollte dies f r alle Kompo nenten vorausgesetzt werden um sie im Editor einheitlich behandeln zu k nnen Be dingungen deren Wahrheitswert aus dem Dialog abgelesen werden m ssen sind nicht notwendig da sie im Statechart nachmodelliert werden k nnen dies wurde bereits im 8 Auf Komponenten die mehrere Ereignisse ausl sen k nnen wird weiter unten eingegangen Kapitel 3 Werkzeuge f r Statecharts Grafische Editoren letzten Abschnitt besprochen Wir wollen uns nun den Aktionen zuwenden mit denen das Statechart auf den Dialog Einfluss nehmen kann Wie am Anfang dieses Abschnitts erw hnt wurde sollten Dialogkomponenten sichtbar und unsichtbar gemacht werden k nnen f r diese Funktionalit t werden also zwei Methoden ben tigt Werden im Dialog auch Popups angeboten so bietet sich diese Methode an um das Fenster zu ffnen Dies erlaubt es auch das Popup mittels einer Aktion zu schlie en unabh ngig davon ob der Benutzer einen Knopf des Popups gedr ckt hat F r Dialogkomponenten wie Checkboxes oder Radiobuttons w re eine Methode
300. lasse GrafZustand Gibt an ob die bergebene vertikale Bewegung eines Partitioners g ltig ist doHMove double double double double void berschreibt die Methode der Klasse GrafZustand F hrt eine horizontale Bewegung eines Partitioners durch doVMove double double double double void berschreibt die Methode der Klasse GrafZustand F hrt eine vertikale Bewegung eines Partitioners durch copyToNewSuper GrafZustand Point2D Double Hashtable GrafZustand berschreibt die Methode der Klasse GrafZustand Kopiert diesen AND Zustand in den neuen Oberzustand Dabei werden auch Partitioner kopiert delete void berschreibt die Methode der Klasse GrafZustand L scht diesen Zustand revertToOR gt GrafZustand Reduziert diesen AND Zustand zu einem OR Zustand Dies geschieht dadurch dass die Partitio nen aufgel st werden und die in ihnen enthaltenen Zust nde direkt in den ehemaligen AND Zustand eingef gt werden save EasyFileWriter void berschreibt die Methode der Klasse GrafZustand Speichert diesen AND Zustand im EasyFileWriter D 9 5 Klasse GrafHook extends score GrafSCM GrafIyp Diese Klasse ist ein Knotenpunkt eines Grafischen Pfeils 222 Kapitel D Programmdokumentation Attribute Konstruktoren START int CONST Konstante f r Starthooks END int CONST Konstante f r Endhooks PLAIN_MID int CONST Konstante f r normale mittlere Hooks C
301. laufs 6 5 3 Aktivieren in der Zustandshierarchie Wie Abschnitt 6 2 1 erw hnt verwaltet das Simulationsmodell die Information wel che Zust nde aktiviert sind durch eine objektorientierte Zustandshierarchie Das Deaktivieren von Zust nden in dieser Hierarchie ist unproblematisch da s mtliche Unterzust nde deaktiviert werden m ssen Welche Oberzust nde dabei ebenfalls deaktiviert werden sollen kann nicht ausschlie lich in der Hierarchie festge stellt werden da diese Information von der Lage des ausgef hrten bergangs abh ngt Deshalb bernimmt der Simulator selbst die Auswahl des obersten zu deaktivierenden Zustands Wenn ein Zustand aktiviert wird so m ssen auch s mtliche Oberzust nde ak tiviert werden solange sie bisher deaktiviert sind Au erdem m ssen ausgew hlte Unterzust nde durch ihre Default Einstiege oder gegebenenfalls History Einstiege diese Aufgabe wird wieder von der Klasse SCRun bernommen die ja als Oberklasse der Simulation und des als Quelltext exportierten Statecharts auftritt Der Simulator 147 Der Simulator Kapitel 6 Funktionsweise der Module 148 aktiviert werden Diese Informationen liegen s mtlich im Simulationsmodell das die se zus tzlichen Aktivierungen deshalb selbst ndig durchf hrt Dabei wird wie folgt vorgegangen Zun chst werden die atomaren Zust nde festgestellt die aktiviert werden m ssen Dies geschieht entweder ber Default Einstiege oder wenn ein Deep Histo
302. lbstverst ndlich keine weiteren Nachfolger OR 57 58 Grafische Editoren Kapitel 3 Werkzeuge f r Statecharts Zust nde k nnen hingegen beliebig viele Nachfolger besitzen Bei AND Zust nden stellt sich zus tzlich die Frage nach der Verwaltung der orthogonalen Komponenten Es ist einerseits denkbar die in den Komponenten enthaltenen Zust nde als direkte Unterzust nde des AND Zustands anzusehen und zu verwalten dann muss die Infor mation wie die Partitionierung stattfindet separat gespeichert werden Andererseits hat bei genauerer Betrachtung eine einzelne Partition genau die Ei genschaften eines OR Zustands so muss etwa genau einer ihrer direkten Unterzust nde aktiviert sein wenn die Partition also der AND Zustand aktiv ist sie darf genau einen Defaulteinstieg besitzen etc Es bietet sich also an einen AND Zustand so zu modellie ren dass jede Partition als Unterzustand gespeichert wird und die eigentlich direkten Unterzust nde des AND Zustands als Unterzust nde dieser Partitionen angesehen wer den Dies erfordert nat rlich eine entsprechend aufwendigere Behandlung wenn die Tiefe eines Zustands unter einem anderen festgestellt werden soll da die Partitionen keine eigene Hierarchieebene darstellen d rfen Die bersichtlichkeit der Darstellung Durch den im letzten Abschnitt erw hnten Baum ist die logische Struktur des Statecharts bereits vollst ndig beschrieben Die Lage der Unterzust nde in der gra fischen Ansi
303. le geschehen muss Auch das Eintreten von bestimmten Ereignissen Kann so erzwungen werden Durch solche Modifikationen kann das System nat rlich in einen Zustand gebracht werden der durch die eigentliche Benutzung niemals erreicht werden k nnte Wenn infolge dessen Uneindeutigkeiten auftreten ist das Statechart nicht notwendigerweise fehlerhaft Der Simulator sollte sich also merken ob derartige nderungen vorgenommen wurden und im Falle eines Fehlers den Benutzer darauf aufmerksam machen 26 vgl Hor99a S 189 ff 27 ygl Abschnitt 69 Kapitel 3 Werkzeuge f r Statecharts Zeit in der Simulation Die Simulation eines Statecharts kann prinzipiell sowohl in kontinuierlicher oder dis kreter Zeit ablaufen Wie bereits in den Abschnitten 2 8 und 2 5 1 erw hnt wurde arbeitet Statemate mit einem diskreten Zeitmodell in dem die Ereignisse genau einen Schritt lang sichtbar sind Obwohl in verschiedenen Artikeln auch andere Formen be schrieben werden scheint dieses Modell das zuverl ssigste zu sein Doch auch im diskreten Zeitmodell gibt es verschiedene M glichkeiten wie der Ablauf der Simulation gesteuert werden kann Es kommt dabei haupts chlich darauf an wie viele Schritte das System selbst ndig durchf hrt bis wieder auf eine Eingabe gewartet wird Die feinste Aufgliederung w re eine phasenweise Steuerung falls die Simulati on in Phasen aufgeteilt sein sollte Eine deratig detailgenaue Betrachtung ist jedoch nicht al
304. leAktion gt score Aktionen SetVarAktion gt score Aktionen IncVarAktion gt score Aktionen ThrowAktion gt score util Observable gt score Aktionen AktionDialog gt score Aktionen AktionPropertyChange gt score Aktionen AktionProperty D 3 2 Interface Actor Dieses Interface wird von den Klassen implementiert die Aktionen ausf hren k nnen Es erm glicht den einheitlichen Zugriff auf diese Aktionen sowie die Anfrage um welcen Typ es sich handelt 182 Kapitel D Programmdokumentation Package score Aktionen Attribute ACTOR_STATE int CONST Konstante falls dieser Actor ein Zustand ist ACTOR_ARROW int CONST Konstante falls dieser Actor ein Pfeil ist ACTOR_DIALOG int CONST Konstante falls dieser Actor ein Dialogelement ist ACTIVATE int CONST Konstante ber die bei Zust nden auf die Aktionen beim Aktivieren zu gegriffen werden kann DEACTIVATE int CONST Konstante ber die bei Zust nden auf die Aktionen beim Deaktivieren zugegriffen werden kann Methoden getActorType gt int R ckgabewert int entsprechend der Klassenkonstante Gibt den Typ dieses Actors zur ck getCalledAction int CalledAction Gibt eine komplexe Aktion zur ck die f r die angegebene Position Klassenkonstante ACTIVA TE oder DEACTIVATE alle Aktionen enth lt getCalledAction CalledAction Liefert eine komplexe Aktion aller Aktionen doesAction Aktion boolean R ckgabe
305. lement des Statecharts zugeordnet sind In diesem Fall beginnt die Zeile mit dem Zusatz in uncalled action Beim Anklicken werden alle Elemente des Statecharts markiert die den Wert der Variablen nutzen N 1 Arrows start at states N 1 arrow starts at non state Pfeile vom Typ N 1 d rfen nur an Zust nden be ginnen Diese Fehlermeldung wird ausgegeben wenn ein Pfeil an einem Konnektor beginnt Kapitel 5 Benutzerhandbuch Der Verifikator Triggers in Hierarchy The following events trigger transitions on stacked levels Diese Warnung wird ausgegeben wenn von einem Zustand und seinen Oberzust nden mehrere Pfeile aus gehen die vom selben Ereignis ausgel st werden Hierbei wird nicht berpr ft ob diese berg nge sich m glicherweise durch ihre Bedingungen gegenseitig ausschlie Ben Connector loops There is a connector loop Wenn ein Konnektor durch einen oder mehrere berg nge wieder auf sich selbst f hren kann so wird diese Fehlermeldung ausge geben Hierbei wird nicht berpr ft ob ein solcher Rundlauf durch angegebene Er eignisse oder Bedingungen ausgeschlossen ist Es ist jedoch in so einem Fall besser diesen Kreis zu einem einzigen Konnektor zusammenzufassen All states accessible In diesem Test wird berpr ft ob alle Zust nde und Konnektoren eingehende Verbin dungen besitzen Dabei wird bei Zust nden auch darauf geachtet ob m glicherweise Verbindungen auf Unterzust nde f hren Connector has no in
306. lements als Parameter Welche Wir kung ein solcher Aufruf auf die unterschiedlichen Typen von Dialogelementen hat wird in Abschnitt 5 8 beschrieben In Bedingungen sind die folgenden Abfrage m glich in int Diese Methode gibt true zur ck wenn der Zustand mit dem bergebenen Identifier momentan aktiv ist diese Abfrage entspricht der atomaren internen Bedingung in S hasHist int Diese Methode gibt true zur ck wenn der Zustand mit dem berge benen Identifier momentan eine History besitzt diese Abfrage entspricht der atomaren internen Bedingung hasHist S 5 12 Erweitern des Programms um neue Dialogkomponenten Um das Programm um weitere Dialogkomponenten zu erweitern erstellt man eine neue Klasse die von DialogKomponente erbt Theoretisch kann diese sofort benutzt werden jedoch fehlen noch die Eintr ge in der Benutzeroberfl che und der Sprache um die neue Komponente auszuw hlen bzw zu laden und zu speichern Danach ist die Komponente voll einsatzbereit 5 13 Der Verifikator 5 13 1 berblick Mit dem Verifikator l sst sich das konstruierte Statechart auf Korrektheit in verschie denen Punkten berpr fen Einige Probleme werden als Fehler gemeldet andere an scheinende Unstimmigkeiten k nnen vom Benutzer durchaus gewollt sein und f hren 127 Der Verifikator Kapitel 5 Benutzerhandbuch 128 nicht notwendigerweise zu Fehlern In diesen F llen gibt der Verifikator Warnmeldun gen aus Vor dem Start die
307. llen Kombinationen der Tiefenvergr erung ein bersichtliches Statechart ergeben Um dem Benutzer diese Aufgabe zu erleichtern k nnte der Editor die Zust nde automatisch platzieren Dadurch werden allerdings die vgl Har88 S 527 59 60 Grafische Editoren Kapitel 3 Werkzeuge f r Statecharts Abbildung 3 2 Partieller Tiefenverg erung bei den Zust nden A und H bzw E Freiheiten des Benutzers in der grafischen Anordnung deutlich eingeschr nkt eventu ell werden sogar eingegebene Positionen ignoriert obwohl dies nicht die Absicht des Benutzers war Abgesehen davon f hrt das auf ein Optimierungsproblem das bekann terma en NP hart ist Die Variante lediglich eine globale Tiefenvergr erung zu erlauben also die Anzahl der eingeblendeten Hierarchieebenen ber das gesamte Statechart gleich zu halten umgeht diese Probleme Dabei muss jedoch noch die Frage gekl rt werden welche Gr e atomare Zust nde auf den verschiedenen Hierarchieebenen haben Ei nerseits kann eine konstante Gr e f r atomare Zust nde angenommen werden die unabh ngig von der Vergr erung des Statecharts ist Andererseits ist es denkbar dass auch atomare Zust nde gr er angezeigt werden wenn mehr Hierarchieebenen aus gew hlt sind diese Zust nde blieben dann einfach weiterhin leer Dies kann jedoch wieder den berblick erschweren da dabei gro e leere Fl chen im Statechart auf tau
308. llt Nur bei den Defaulteinstiegen ist dieser gefiillt Historyein stiege enthalten ein H und tiefe Historyeinstiege enthalten H Beispiele zeigt Abbil dung 5 9 Das Popup Men f r Konnektoren Bei Konnektoren enth lt das Popup Men nur die folgenden zwei Eintr ge Connector Properties ffnet einen Inspektor der sich nur auf diesen Konnektor be zieht Delete Connector L scht diesen Konnektor Textfelder Als Erweiterung ist es m glich das Statechart mit Textfeldern zu beschriften Die Eigenschaften dieser Textfelder werden im Inspektor angezeigt siehe Abschnitt 5 3 3 Das Popup Men enth lt nur den einen Eintrag Delete Text 5 4 2 Werkzeugleiste z RK O ii a 0 00 Text Abbildung 5 10 Die Werkzeugleiste In der Werkzeugleiste Abbildung 5 10 w hlt man das Werkzeug aus mit dem das Statechart bearbeitet werden soll Im einzelnen sind dies die folgenden Mit dem Pfeil k nnen Objekte markiert werden Hierzu klickt man einmal kurz in das zu markierende Objekt Wird dabei die Strg Taste gedr ckt gehalten so wird das Objekt zus tzlich zu den vorhandenen markiert Markierte Objekte werden rot dargestellt 115 Der grafische Editor Kapitel 5 Benutzerhandbuch 116 Durch Dr cken und Schieben k nnen die Objekte an eine neue Position bewegt werden Achten Sie hierbei auch auf das Feedback Bei einer ung ltigen Posi tion wird das Objekt nicht dargestellt Wenn Sie Zust nde in oder aus anderen Zust n
309. mehr addSubPoint GrafPunkt Point2D Double Unterpunkt 243 Package score GrafSCM Kapitel D Programmdokumentation 244 F gt einen grafischen Unterpunkt hinzu der bereits eine logische Entsprechung haben muss Der neue Punkt hat bez glich dieses Zustands den angegebenen Offset Ist dieser Null wird false zur ckgegeben Der entsprechende Vorgang wird im logischen Modell wiederholt falls dieser Zustand eine logische Entsprechung hat die ein OR Zustand ist In diesem Fall wird der neue Unterpunkt zur ckgegeben ansonsten Null addSubConn GrafKonnektor Point2D Double Unterpunkt F gt einen neuen Konnektor unterhalb dieses Zustands hinzu moveSubPoint GrafPunkt Point2D Double Unterpunkt Bewegt einen Unterzustand der aber nach der Bewegung immer noch Unterzustand dieses Punk tes ist addSubRelative GrafPunkt GrafPunkt double double Unterpunkt F gt einen neuen Zustand hinzu wie addSubPoint allerdings ist der angegebene Offset in Koor dinaten des angegebenen Unterzustands Ist der bergebene Zustand kein direkter Unterzustand dieses Zustands wird Null zur ckgegeben removeSubPoint GrafPunkt void Entfernt einen Unterzustand Im logischen Modell wird dieser Vorgang wiederholt getSubPoint GrafPunkt Unterpunkt Gibt den Unterpunkt der einem GrafPunkt entspricht getSubPoints Enumeration Gibt eine Enumeration der grafischen Unterpunkte zur ck probeDepth gt int bers
310. n Konstruktoren ThrowAktion Ereignis Erschafft eine neue Aktion die das bergebene Ereignis ausl st delete void berschreibt die Methode der Klasse Aktion L scht diese ThrowAktion Wenn das Ereignis von keiner anderen Throw Aktion geworfen wird wird es ebenfalls gel scht und aus allen Pfeilen ausgetragen getEvent Ereignis Gibt das Ereignis zur ck das von dieser Aktion erzeugt wird setEvent Ereignis void Setzt das Ereignis das von dieser Aktion erzeugt wird auf den bergebenen Wert getThrowerOf Ereignis Vector Gibt die ThrowAktion zur ck die das bergebene Ereignis erzeugt oder einen leeren Vector wenn es keine solche gibt execute boolean 195 Package score Bedingungen Kapitel D Programmdokumentation berschreibt die Methode der Klasse Aktion L st das Ereignis aus save EasyFileWriter void berschreibt die Methode der Klasse Aktion Speichert diese Aktion im EasyFileWriter exportQT EasyFileWriter gt void berschreibt die Methode der Klasse Aktion Exportiert den Quelltext f r diese Aktion in den EasyFileWriter D 4 Package score Bedingungen D 4 1 Klassenhierarchie java lang Object gt score Bedingungen Bedingung gt score Bedingungen BedAtomar gt score Bedingungen CompVarBed gt score Bedingungen HasHistoryBed gt score Bedingungen InStateBed gt score Bedingungen JavaBed gt score Bedingungen BedKomplex
311. n bergebenen LogPunkt setDest LogPunkt gt void Setzt den Endzustand auf den bergebenen LogPunkt getSource gt LogPunkt Gibt den LogPunkt zur ck bei dem dieser Pfeil beginnt getDest LogPunkt Gibt den LogPunkt zur ck bei dem dieser Pfeil endet redirect LogPunkt LogPunkt boolean void berschreibt die Methode der Klasse LogPfeil Ersetzt Start und Endpunkt falls sie dem ersten LogPunkt entsprechen durch den zweiten Der Parameter all wird ignoriert getii O gt LogPfeil berschreibt die Methode der Klasse LogPfeil Gibt diesen Pfeil zur ck da er bereits ein 1 1 Pfeil ist delete void berschreibt die Methode der Klasse LogPfeil L scht diesen Pfeil dabei wird er auch aus Start und Endzustand entfernt exportQT EasyFileWriter boolean berschreibt die Methode der Klasse LogPfeil Exportiert den Quelltext f r diesen LogPfeil in den EasyFileWriter D 11 9 Klasse LogPfeil_1_N extends score LogSCM LogPfeil Diese Klasse stellt eine logische Verbindung dar Sie besitzt einen Start und einen Zielzustand Konstruktoren LogPfeil_1_N Der Pfeil besitzt am Anfang weder Start noch Endzustand LogPfeil_1_N LogPunkt Vector Der neue Pfeil enth lt den gegebenen logischen Startzustand und die Endzust nde aus dem Vector Es wird davon ausgegangen dass der Vector nur logische Punkte enth lt LogPfeil_1_N LogPfeil_1_1 Erschafft einen 1 N Pfeil aus
312. n Die Zeitspanne eines Time Out Ereignisses wird ebenfalls an einem Zustand notiert und jedes Mal wenn dieser Slygl HN96 S 316 ff 52 ygl Har87b S 237 oder Har88 S 524 f 53Diese Aktion ist im Statechart allerdings nicht dargestellt sondern nur im erkl renden Text erw hnt 54ygl HN96 S 297 f 5S5vgl Hor99a S 72 ff 55 Der Zeitbegriff Kapitel 2 Varianten von Statecharts in der Literatur 56 Zustand betreten wird wird der Z hler auf Null gesetzt Ist die angegebene Zeit ver strichen wird der Zustand ber eine Verbindung verlassen die mit der Bezeichnung time out versehen ist Es wird dabei kein spezielles Ereignis erzeugt wie es bei Harel und Namaad der Fall ist Ask not what your country can do for you ask what you can do for your country John F Kennedy Kapitel 3 Werkzeuge fur Statecharts Dieses Kapitel besch ftigt sich damit welche Werkzeuge zur Unterst tzung der Arbeit an Statecharts denkbar sind Es sollen die Vorteile dieser Werkzeuge genauer erl utert und die Grundanforderungen daf r aufgezeigt werden Au erdem sollen m gliche Er weiterungen und Kombinationen dieser Werkzeuge diskutiert werden sowie die Frage wie aufwendig die Umsetzung der einzelnen Werkzeuge ist Die ersten beiden Abschnitte dieses Kapitels besch ftigen sich im einzelnen mit Werkzeugen zum Erstellen beziehungsweise berpr fen von Statecharts im dritten Abschnitt werden berlegungen dazu angestellt
313. n Gibt zur ck ob es sich um eine String Variable handelt isDouble boolean Kapitel D Programmdokumentation Package score Aktionen Gibt zur ck ob es sich um eine Double Variable handelt isInt gt boolean Gibt zur ck ob es sich um eine Integer Variable handelt isToVar gt boolean Gibt an ob der String Wert als Variablenname zu interpretieren ist getVarName gt String Gibt den Namen der zu dieser Aktion geh renden Variable zuriick getCheckedVarName gt String Gibt den Namen der Source Variable zur ck falls diese Aktion sich auf zwei Variablen bezieht ansonsten Null getValueAsString gt String Gibt eine String Repr sentation des zu setzenden Wertes zur ck Ein String Wert ist dabei in Anf hrungszeichen eingefasst fehlen diese handelt es sich um einen Variablennamen execute boolean berschreibt die Methode der Klasse Aktion Setzt den Wert der Variablen save EasyFileWriter void berschreibt die Methode der Klasse Aktion Speichert die Aktion im EasyFileWriter exportQT EasyFileWriter gt void berschreibt die Methode der Klasse Aktion Exportiert den Quelltext dieser Aktion in den EasyFileWriter D 3 21 Klasse ThrowAktion extends score Aktionen Aktion Diese Klasse spezialisiert die abstrakte Klasse Aktion als Throw Aktion Attribute evHolder EventHolder Der Vector in dem alle ThrowAktionen ihre Ereignisse ablegen wenn sie ausgel st werde
314. n Setzt den Wert ob nderungen seit dem letzten berpr fen vorgenommen wurden editedSinceSaved boolean Gibt an ob im Grafischen Modell seit dem letzten Speichern nderungen vorgenommen wurden editedSinceSaved boolean boolean Setzt den Wert ob nderungen seit dem letzten Speichern vorgenommen wurden setEdited void Setzt dass nderungen vorgenommen wurden save EasyFileWriter void Speichert das komplette GrafSCM im EasyFileWriter update Observable Object gt void berschreibt die Methode der Klasse AbstractModell Implementation des Observer Interfaces Gibt Aufrufe an die Observer des GrafSCModell weiter alignSize void Setzt die Gr e aller markierten Konnektoren auf den selben Wert Hierf r wird das Minimum aller vorhandenen Gr en genommen D 9 13 Klasse GrafText extends score GrafSCM GrafIyp Mit GrafText ist es m glich beliebige Texte in das Statechart einzugeben Sie k nnen sich entweder in einem Zustand befinden oder auf einen Pfeil beziehen im letzteren Fall ist die Position des Textes relativ zu einem bestimmten Hook Gibt es einen zugeh rigen Pfeil wird auch angegeben ob der Wert des Textes noch den Eigenschaften des Pfeils entspricht Konstruktoren GrafText String GrafTyp Point2D Double Erschafft einen neuen GrafText mit dem angegebenen Inhalt der sich vom bergebenen GrafTyp auf den er sich bezieht an der angegebenen Position befindet G
315. n hat Wie schon bei Ereignissen und Bedingungen lassen sich interne Aktionen die sich auf das Statechart selbst beziehen von externen Aktionen unterscheiden die das restliche System oder dessen Umwelt beeinflussen In der Literatur werden einige interne Aktionen genannt und verwendet Da zu geh ren insbesondere das Ausl sen von weiteren internen Ereignissen und das L schen der History eines Zustands Die ausgel sten Ereignisse werden im diskre ten Zeitmodell im n chsten Schritt in gleicher Weise behandelt wie externe Ereignisse das hei t sie k nnen weitere berg nge ausl sen Es gibt zwei Arten von Aktionen die Histories l schen Die einfache Version bezieht sich lediglich auf einen einzelnen Zustand die andere auch auf alle seine Un terzust nde Diese Formen erinnern zwar an die zwei Formen des Historyeinstiegs sie sind von diesen jedoch unabh ngig Es ist durchaus erlaubt die History eines Zu stands zu l schen der einen Deep Historyeinstieg besitzt ohne seine Unterzust nde zu beeinflussen Harel und Namaad nennen die M glichkeit Aktionen zu verz gern scheduled actions also zu einem sp teren Zeitpunkt auszufiihren F r solche Aktionen wird angegeben um wie viele Zeitschritte sp ter sie ausgef hrt werden sollen Eine denkbare Anwendung solcher verz gerter Aktionen w re es bestimmte Er eignisse nach einer gewissen Zeit auszul sen Diese Konstruktion unterscheidet sich jedoch von den oben genannten au
316. n ist vermutlich sie in einer Tabelle zusammenzufassen Wenn sowohl ein Statechart Editor als auch ein Dialog Editor vorliegen und daher klar ist welche Zust nde und welche Dialog komponenten vorhanden sind so sollte es auch eine M glichkeit geben diese Tabelle zu bearbeiten Eine andere Variante Dialogkomponenten sichtbar und unsichtbar zu machen ist es diesen Zugriff durch Aktionen anzubieten Obwohl in diesem Fall nicht aus dem aktivierten Zustand ablesbar ist welche Dialogkomponenten sichtbar sind f gt sich dieses Konzept leichter in die Struktur eines Statecharts ein So muss keine zus tzliche Tabelle gespeichert werden die Zust nde und Dialog miteinander verbindet sondern die Interaktion zwischen Statechart und Dialog kann weiterhin ausschlie lich ber Ereignisse und Aktionen stattfinden Kommunikation zwischen Statechart und Dialog In diesem Zusammenhang stellt sich die Frage wie das Statechart genau mit dem Dia log kommunizieren soll Selbstverst ndlich ist es denkbar f r jede Dialogkomponente eigene Aktionen Ereignisse und Bedingungen einzuf hren Mit Blick auf eine leichte Erweiterbarkeit des Programms um neue Klassen von Komponenten w re jedoch ei ne vereinheitlichte Schnittstelle w nschenswert F r jede Methode dieser Schnittstelle gibt es dann einen Typ von Aktion der diese Methode bei einer bestimmten Dialog komponente aufruft Wie die Komponente auf einen solchen Aufruf reagiert oder ob sie ihn eventuel
317. n EasyFileWriter D 11 12 Klasse LogSCModell extends score util Observable implements score util Observer Diese Klasse verwaltet das komplette logische Statechart Modell Sie implementiert das Interface Askable fiir die Ereignisse und Bedingungen Konstruktoren LogSCModell Erschafft ein logisches Statechart Modell Dieses wird bei den Ereignissen und Bedingungen gleich als Beantworter der Wahrheitswerte eingetragen Au erdem wird ein neuer atomarer Zu stand erzeugt der als globaler Wurzelzustand eingetragen wird replaceObservable Observable Observable boolean Implementation des Observable Interfaces getTopLevelState LogPunkt Gibt den globalen Wurzelzustand zuriick getLogPunkt int gt LogPunkt Gibt den logischen Punkt mit den angegebenen Identifizierer zur ck Wenn es keinen solchen Punkt gibt wird Null zur ckgegeben update Observable Object void Implementation des Observer Interfaces Gibt Aufrufe an die Observer des LogSCModells weiter exportQT EasyFileWriter gt void Exportiert das gesamte logische Modell in den EasyFile Writer Dabei wird die Methode genera teSCModell erzeugt exportConditions EasyFileWriter gt void Exportiert s mtliche Bedingungen in den EasyFileWriter Hierbei wird die Klasse ExportBed komplett geschrieben exportActions EasyFileWriter gt void Exportiert s mtliche Aktionen in den EasyFileWriter Hierbei wird die Klasse ExportAkr k
318. n Teil der Statechart Syntax Wir wollen uns dieser M glich keit in gleicher Weise bedienen 2 4 1 Zusammengesetzte berg nge Generell beginnen und enden Verbindungen bei Zust nden die bei Ausf hren des bergangs verlassen beziehungsweise betreten werden Bei genauerer Betrachtung kann eine solche Verbindung allerdings aus einzelnen Teilen bestehen die zum Bei spiel mehrere Konnektoren aneinanderreihen Auf diese Weise entsteht ein zusammen gesetzter bergang compound transition Wird das diskrete Zeitmodell benutzt so entspricht eine derartige Konstrukti on einem einzigen bergang mit mehreren Eintr gen wie es Harel und Namaad in HN96 erw hnen Der bergang t in Abbildung 2 7 a kann nicht ausgef hrt werden oh ne dass auch f ausgef hrt wird Sein Ausl ser ist ev amp ev2 und seine Aktion ist act act2 Daher ist Abbildung 2 7 a quivalent zu Ab bildung 2 7 b e At t2 ev2 act2 G i evl and ev2 actl act2 a b Abbildung 2 7 quivalente zusammengesetzte berg nge Im kontinuierlichen Zeitmodell kann ein zusammengesetzter bergang allerdings nicht quivalent ersetzt werden da es auf die Reihenfolge der ausgel sten Ereignisse ankommen kann wie bereits in Abbildung 2 5 im Zusammenhang mit statischen Ver zweigungen in UML gezeigt wurde Ein zusammengesetzter bergang liegt selbstverst ndlich auch vor wenn ein Konnektor benutzt wird von dem mehrere Verbind
319. n Vector aller Elemente dumpMemory String R ckgabewert String des Memory Dumps Gibt einen MemoryDump zur ck toString gt String berschreibt die Methode der Klasse Object R ckgabewert String des Memory Dumps Gibt einen MemoryDump zur ck dumpOwnMemory String R ckgabewert String des Memory Dumps Gibt einen MemoryDump zur ck D 2 3 Klasse MarkableTyp abstrakte Klasse extends score util Observable Abstrakte Oberklasse aller Objekte die markiert werden k nnen Attribute type int Der Typ dieses MarkableTyp NOTHING int CONST Konstante f r ung ltigen Typ STATE int CONST Konstante f r einen Zustand atomar OR AND CONNECTOR int CONST Konstante f r einen Konnektor universal history ARROW int CONST Konstante f r eine Verbindung PARTITIONER int CONST Konstante f r einen Partitionsgrenzentrenner HOOK int CONST Konstante f r einen grafischen Knotenpunkt GRAF_TEXT int CONST Konstante f r einen Text BUTTON int CONST Konstante f r die Dialogkomponente Button TEXT int CONST Konstante f r die Dialogkomponente Textfeld TIMER int CONST Konstante f r die Dialogkomponente Timer CHECKBOX int CONST Konstante f r die Dialogkomponente Checkbox RADIOBUTTON int CONST Konstante f r die Dialogkomponente RadioButton POPUP int CONST Konstante f r die Dialogkomponente Popup VARIABLE int CONST Konstante f r eine
320. n eignet ist das diskrete konfliktfreier in der Implementierung Wir w hlen dieses Modell das auch f r die Implementierung in Statemate gew hlt wurde da hier der Ablauf nicht von der Auswertungsreihenfolge abh ngt und es prinzipi ell immer problematisch ist ein kontinuierliches Modell mit einer diskret arbeitenden Maschine zu simulieren Diskret bedeutet nun genau dass w hrend der Simulation verschiedene Phasen unterschieden werden Nur in bestimmten Phasen werden Aktionen gesammelt und an schlie end gleichzeitig ausgewertet Die dabei erzeugten Ereignisse sind dann erst im n chsten Schritt sichtbar so dass sich die Ereignismenge nicht w hrend der Bear beitung ndern kann 4 3 Die Dialoge Damit der Benutzer mit dem Statechart w hrend der Simulation interagieren kann sind Dialoge notwendig Da der Schwerpunkt dieser Arbeit jedoch nicht auf der com puterunterst tzten Erstellung von Dialogen liegt beschr nken wir uns auf ein recht rudiment res Modell Wir haben genau einen Dialog der in einen Benutzer und einen Systemteil unter teilt ist Zu Beginn der Simulation beziehungsweise des exportierten Programms wird er erzeugt und am Ende wieder gel scht Der Unterschied zwischen den beiden Tei len des Dialogs besteht im Quelltextexport wo f r den Benutzerteil der entsprechende Quellcode erzeugt wird f r den Systemteil jedoch nicht da dieser zur Simulation von 8vgl Har87b S 258 f 2vgl auch Abschnitt 76 auf
321. n ein funktions quivalentes Statechart mit nur einem einzigen Zustand berf hren Man bildet hierzu eine Abz hlung aller m glichen Zustandskombinatio nen Diese ist bei einem endlichen Statechart auch immer endlich Nun f hre man eine neue Variable ein welche diese Zustandskombination repr sentiert Alle Bedingun gen die nun Zust nde abfragen werden umgeschrieben auf Bedingungen die diese Variable vergleichen Ein Beispiel zeigt Abbildung 3 11 Diese Optimierung ist im allgemeinen jedoch wenig vorteilhaft da der Sinn des Statecharts gerade in der sym bolischen Repr sentation von Zust nden liegt Eine weitere M glichkeit ist das Erkennen von nebenl ufigen Eigenschaften die dann durch einen AND Zustand parallelisiert werden k nnen Beispiel Die Zust nde sollen sich die Attribute eines Schrifttyps merken Diese k nnen sein bold b italic i und underline u sowie beliebige Kombinationen dar aus Dies ergibt in sequentieller Repr sentation 2 Zust nde Parallel reichen f r jeden Schrifttyp 2 also insgesamt 2 3 Zust nde Ein Optimierer k nnte nun versuchen sol che Zusammenh nge zu erkennen und zu parallelisieren Abbildung 3 12 zeigt dieses Beispiel wobei auf die Beschriftung der Kanten verzichtet wurde Offensichtlich werden durch diese Art der Optimierung auch Kanten eingespart Au erdem sind Bedingungen die sich auf ein Attribut beziehen jetzt leichter zu for mulieren andererseits werden Bedingungen die sich
322. n geworfen werden sollen actionPerformed ActionEvent gt void implementiert das ActionListener Interface f r die Komponenten save EasyFileWriter void Speichert die Komponente exportQT EasyFileWriter gt void Erzeugt den Quelltext dieser Komponenten delete void berschreibt die Methode der Klasse Observable L scht eine Dialogkomponente D 10 7 Klasse DigPopup extends score LogDM DlgKomponente Ein Popup Konstruktoren DigPopup Erzeugt einen neuen DlgPopup DigPopup String Erzeugt einen neuen DlgPopup mit Label lab setVisible boolean gt void berschreibt die Methode der Klasse D gKomponente Macht das Popup sichtbar setOn gt void berschreibt die Methode der Klasse D gKomponente Keine Funktion hier setOff gt void berschreibt die Methode der Klasse D gKomponente Keine Funktion hier toString String berschreibt die Methode der Klasse D gKomponente Gibt einen String POPUP ID und Label aus createComponent gt Component berschreibt die Methode der Klasse D gKomponente Erzeugt ein quivalent vom Typ Component save EasyFileWriter gt void berschreibt die Methode der Klasse D gKomponente Speichert das Popup setlext String void Setzt den Label setFromVar String gt void berschreibt die Methode der Klasse D gKomponente Setzt den Label mit einem Variablen Wert exportQT EasyFileWriter void berschreibt die M
323. n in Bedingungen Die Oder Verkn pfung l sst sich in unserem Modell nachbilden indem man ein fach mehrere parallele Kanten zeichnet Beispiel Will man die Transition in Abbildung 4 5 modellieren so kann man diese in un serem Modell wie in Abbildung 4 6 darstellen Noch eleganter kann man die Ver kn pfung mit Konnektoren l sen da dann die Aktion nur an einer Kante steht siehe Abbildung 4 7 Dieses Prinzip wird auch im UML Werkzeug Rose der Rational Software Cooperation angewandt vgl beispielsweise Schu99 S 181 SDies ist nat rlich nicht nur auf Throw Aktionen beschr nkt Kapitel 4 Die implementierte Fassung Die Grundelemente El or E2 A E Abbildung 4 5 Transition mit mehreren Ereignissen El A Y E2 A Abbildung 4 6 Analoge Transition mit nur einem Ereignis El e GU E2 Abbildung 4 7 Analoge Transition mit Konnektor 99 Die Grundelemente Kapitel 4 Die implementierte Fassung 100 Im Zusammenhang mit den Ereignissen muss noch erw hnt werden dass in SCed einheitlich die schwache Rahmenbedingung benutzt wird Die Aktionen Aktionen dienen der Kommunikation der einzelnen Objekte untereinander sowie der Kommunikation nach au en Wir implementieren die folgenden Aktionen da wir da von ausgehen hiermit ein recht allgemeines Spektrum an M glichkeiten abgedeckt zu haben Die M glichkeit weitere Aktionen nachzuimplementieren ist aufgrund des objektorientierten Aufbaus der Klassenhi
324. n zus tzlich in das Programm eingebaut werden falls die Zeit dies erlaubt e Objektbezogene Undo Redo Funktion e Komplexere Aktionen Makros zusammenfassen statische Bedingung Aktion Gruppen in Zust nden Bedingungen bei Default Einstieg zulassen Verifikation von komplizierteren Verh ltnissen wie z B Races Diagramm Konnektoren verz gertes Ausl sen von Ereignissen e beide Formen von Zeitmodell synchron asynchron siehe dazu die Diskussion dieses Themas in der Literatur in Abschnitt 2 8 Ereignisse wie bereits Bedingungen und Aktionen aus Java Quelltext generie ren etwa zum Abfangen von Exceptions Endzust nde die das System beenden und nicht nur reaktionslos machen B 1 3 Abgrenzungskriterien Das Programm soll keinen vollst ndigen grafischen Dialog Editor bieten Au erdem werden weder Activity Charts noch die in Statemate implementierte physikalische Sicht angeboten In der Simulation werden die durch Java Quelltext eingegebenen Be dingungen und Aktionen nicht ausgef hrt B 2 Einsatz B 2 1 Anwendungsbereiche Hilfen und logische Konstruktion von interaktiven Systemen Testen des Modells und Erzeugen von Quelltext Ger sten B 2 2 Zielgruppe Dialog und Benutzerschnittstellenentwickler 172 Kapitel B Pflichtenheft B 3 Umgebung B 3 1 Software Zum Betrieb ist ein lauff higes Sun JRE mit einer Version gt 1 2 2 n tig Weiterhin ben tigt man eine grafische Oberfl che inklusive Windowm
325. nd die in Abschnitt 69 auf Seite 69 beschrie benen Erweiterungen um Dialoge und frei formulierbaren Quelltext implementiert Hierf r bietet SCed verschiedene Werkzeuge die in diesem Kapitel genauer beschrie ben werden 105 Der Inspektor Kapitel 5 Benutzerhandbuch Bevor wir die einzelnen Programmmodule beschreiben hier noch ein paar Hin weise zur grunds tzlichen Bedienung des Programms e Das Programm ist f r die Benutzung mit einer Maus konzipiert dennoch gibt es f r einige Men funktionen Tastaturbefehle die dem erfahrenen Benutzer eine schnellere Bedienung erm glichen Zum Selektieren und Bearbeiten von Objekten wird ausschlie lich die linke Maustaste verwendet Mit der rechten Maustaste kann man bei einigen Objekten ein Kontextmen erzeugen Die mittlere Maustaste ist nicht belegt e Es kann immer nur ein Statechart gleichzeitig bearbeitet werden Dieses kann jedoch in mehreren Ansichten und mit mehreren Werkzeugen geschehen Jede nderung in einer Ansicht kann automatisch auch alle anderen Ansichten be einflussen deshalb k nnen einige Editiervorg nge das System f r kurze Zeit verz gern Einige Editiervorg nge werden bereits w hrend der Eingabe auf G ltigkeit ber pr ft und gegebenenfalls zur ckgewiesen Wenn ein Editiervorgang keine of fensichtliche Wirkung zeigt pr fen Sie bitte ob die Operation im Sinne der Statecharts erlaubt ist 5 3 Der Inspektor New Project Fr File Edit View Tools Marked
326. nde sich nur geringf gig voneinander unterscheiden oder gar mehrfach auftreten 1081 HN96 S 297 vgl HN96 S 297 oder HP98b S 61 12Die Funktionsweise dieses Konnektors wird in Abschnitt 2 3 2 genauer beschrieben Zust nde 39 Zust nde 40 Kapitel 2 Varianten von Statecharts in der Literatur In Har87b schl gt Harel f r solche F lle das Konzept der parametrisierten Zust nde vor Ein solcher Zustand wird im Statechart nur ein einziges Mal genau ausgearbei tet doch beim laufenden System kann er mehrere Entsprechungen haben Harel unterscheidet zwei Formen der Parametrisierung die OR bzw AND Parametrisierung Mit dieser Bezeichnung wird angegeben wie die einzelnen Instan zen des parametrisierten Zustands zueinander stehen in einer Gruppe von Instanzen eines OR parametrisierten Zustands wird immer nur genau einer aktiv sein man denke etwa an einen Z hler w hrend eine AND Parametrisierung f r orthogonale vonein ander unabh ngige Vorg nge verwendet wird wie zum Beispiel das Verwalten unter schiedlicher Anrufe in einer Telefonzentrale Horrocks schl gt eine leicht modifizierte Variante von parametrisierten Zust nden vor die er in einem Beispiel zum Anzeigen unterschiedlicher Fehlermeldungen ver wendet Dabei ist lediglich die Funktionsweise des Fehler Dialogs im Zustand selbst modelliert der Text der Meldung wird diesem beim Betreten bergeben Dies kann beispielsweise durch eine Textvariable ges
327. nden LogPfeilen zur ck getSuper LogPunkt berschreibt die Methode der Klasse LogPunkt Gibt den direkten berzustand dieses SimBasic zur ck getSimBasic int SimBasic Gibt den Simulationspunkt mit dem bergebenen Identifier zur ck getAllSimBasic Collection Gibt eine Collection mit allen Simulationspunkten zur ck prepareTimestep void Bereitet einen Zeitschritt vor Dabei werden alle momentan aktiven SimBasic so markiert dass sie auch im n chsten Zeitschritt aktiviert sind Au erdem wird der Vector der CalledActions geleert closeTimestep void Beendet einen Zeitschritt Dabei werden die SimBasics die markiert wurden jetzt auch aktiviert activateBasic void Aktiviert diesen Simulationspunkt Er wird in die Liste der zuk nftig aktiven Punkte eingetragen Au erdem wird das Ereignis das beim Aktivieren dieses Punktes ausgel st wird in die Ereignis Menge eingetragen Ober oder Unterzust nde werden nicht beachtet Diese Methode sollte nur von innerhalb des Simulationspunktes selbst aufgerufen werden deactivateBasic void Deaktiviert diesen Simulationspunkt Er wird aus der Liste der zuk nftig aktiven Punkte gestri chen Au erdem wird das Ereignis das beim Deaktivieren dieses Punktes ausgel st wird in die EreignisMenge eingetragen Ober oder Unterzust nde werden nicht beachtet Diese Methode sollte nur von innerhalb des Simulationspunktes selbst aufgerufen werden isActi
328. ne Erweiterung der Gleichung in 1 33 dar 1 5 Abweichungen Unser Modell beschreibt formal nicht dass auch Kanten von Historyeinstiegen aus gehen k nnen Dieses Konzept welches also auch h V f r eine Kante k vorsieht erweitert das formale Modell nicht wesentlich da dies nur ein weiterer Defaultein stieg ist der benutzt wird wenn noch keine History vorhanden ist Um diese formale Definition bersichtlicher zu halten haben wir uns entschlossen die Historyfunktion mit dem Defaulteinstieg zu initialisieren Wir umgehen so viele Fallunterscheidungen sowie Abfragen ob berhaupt eine History vorhanden ist setzen jedoch voraus dass jeder komplexe Zustand einen Defaulteinstieg hat 35 Abweichungen Kapitel 1 Definition von Statecharts 36 T VTO pei Heraklit Kapitel 2 Varianten von Statecharts in der Literatur 2 1 Einleitung In diesem Kapitel sollen die Unterschiede einzelner Fassungen von Statecharts erkl rt werden die in der Literatur vorgestellt werden Unser besonderes Augenmerk gilt da bei HN96 denn einer der beiden Autoren ist gerade jener David Harel der 1987 den Formalismus der Statecharts zum ersten Mal vorgeschlagen hat Desweiteren werden wir die Art und Weise betrachten wie Statecharts im Programm Statemate implemen tiert wurden Laut Harel der an diesem Programm mitgearbeitet hat war diese Fassung viele Jahre die einzige implementierte und funktionierende Semantik f r Statcharts
329. ngef gt werden sollen Konstruktoren ZustandAtom Der Konstruktor setzt diesen atomaren Zustand auf den folgenden definierten Startzustand F r das Aktivieren und Deaktivieren sind keine Ereignisse gesetzt Der Zustand ist deaktiviert ZustandAtom LogPunkt Erzeugt einen Zustand aus einem logischen Punkt der neue Zustand ersetzt den alten Punkt Methoden delete void berschreibt die Methode der Klasse Observable L scht diesen Zustand und die Aktionen die nur von ihm ausgel st werden swapActions ZustandAtom ZustandAtom void Tauscht die Aktionen der beiden Zust nde aus getActorType int Kapitel D Programmdokumentation Package score LogSCM Implementation des Actor Interfaces gibt zur ck dass es sich um einen Zustand handelt doesAction Aktion boolean Implementation des Actor Interfaces gibt zur ck ob dieser Zustand die bergebene Aktion beim Aktivieren oder Deaktivieren ausl st removeAction Aktion void Entfernt die bergebene Aktion aus diesem Zustand sowohl aus den Aktionen beim Aktivieren als auch beim Deaktivieren getCalledAction int CalledAction Implementation des Actor Interfaces gibt die komplexe Aktion zur ck die angefragt wurde bergeben wird dabei Actor ACTIVATE falls es sich um die Aktion beim Aktivieren handelt soll und Actor DEACTIVATE falls es sich um die Aktion beim Deaktivieren handeln soll getCalledAction
330. nkommentierte private Attribute und Methoden ausgege ben werden sollen outltem ProgramElementDoc void Beginnt ein neues Item mit der passenden Kombination aus public private protected package private static final abstract Parameter doc das ProgrammElementDoc auf das Bezug genommen wird outSignature ExecutableMemberDoc boolean R ckgabewert true wenn die Signatur nicht leer ist Gibt die Signatur einer Methode oder Konstruktors aus Der Inhalt der Klammern wird als Typ gesetzt Parameter exm das ExecutableMemberDoc dessen Signatur gemeint ist start RootDoc boolean Beginnt die Ausgabe der Dokumentation Parameter root das RootDoc das alle Informationen enth lt die dokumentiert werden sollen e printPackages PackageDoc void Gibt die Packages eines Arrays aus Dadurch wird eine neue section begonnen Die Reihenfolge der Klassen und Interfaces ist Error Exception Interface Klasse Parameter packages der auszugebende Array von PackageDocs loadHierarchy ClassDoc gt void Baut eine Klassenhierarchie der im Array bergebenen Klassen auf Parameter classes der Array der Klassen printHierarchy gt void Gibt die vorher aufgebaute Klassenhierarchie aus Dies erzeugt eine eigene subsection die aus geschachtelten itemize Umgebungen bestehen e printClasses ClassDoc gt void Gibt einen Array von Klassendokumentationen aus
331. nsamen Oberzustands in dieser Liste zur ck getFirstFor GrafPunkt GrafPunkt Gibt den tiefsten gemeinsamen Oberzustand aller betrachteten Punkte zuz glich dieses Punktes zur ck getFirstGommon gt GrafPunkt Gibt den tiefsten gemeinsamen Oberzustand aller betrachteten grafischen Punkte zur ck D 9 19 Klasse Unterpunkt extends java lang Object Diese Klasse ist ein Paar aus einem Offset und einem Grafischen Punkt Attribute offset Point2D Double Der Offset des Unterpunktes point GrafPunkt Der grafische Punkt der an der entsprechenden Stelle liegt Konstruktoren Unterpunkt GrafPunkt Point2D Double 249 Package score LogDM Kapitel D Programmdokumentation 250 Erschafft einen neuen Unterpunkt mit dem entsprechenden Punkt und bergebenen Offset localizeX double double Transformiert die X Koordinate des Oberzustands in lokale Koordinaten dieses Unterzustands localizeY double double Transformiert die Y Koordinate des Oberzustands in lokale Koordinaten dieses Unterzustands getTotalOffset Point2D Double Point2D Double Gibt den Punkt zur ck an dem die linke obere Ecke dieses Unterpunktes effektiv gezeichnet werden soll Genauer gesagt wird der Offset dieses Unterpunktes zum bergebenen Offset addiert und das Ergebnis zur ckgegeben D 10 Package score LogDM D 10 1 Klassenhierarchie java lang Object gt score AbstractModell AbstractModell score L
332. nspektor f r einen Zustand Wenn ein Zustand markiert ist zeigt der Inspektor ein Feld wie in Abbildung 5 3 Dieses Beispiel zeigt einen Inspektor mit markiertem AND Zustand Im einzelnen sind hier angezeigt Typ Der Typ des Zustands OR ANDoder Atomar ID Eine eindeutige Nummer Name Ein frei zu vergebender Name Dieses Feld kann vom Benutzer hier editiert werden Super Der eindeutige Oberzustand Incoming Eine Liste aller eingehenden Pfeile InActions Die Aktion die ausgef hrt wird wenn der Zustand aktiviert wird Outgoing Eine Liste aller ausgehenden Pfeile OutActions Die Aktion die ausgef hrt wird wenn der Zustand deaktiviert wird Sub Eine Liste aller Unterzust nde Partitions Eine Liste der enthaltenen Partitionen 107 Der Inspektor Kapitel 5 Benutzerhandbuch New Project Axi File Edit View Tools Typ AND ID 1 Name Super 8 null Incoming 7 gt 1 InActions throwlienter 1 Qutgoing 1 gt 6 OutActions throw l exit 1 Partitions 4 null 5 null Abbildung 5 3 Inspektor mit markiertem AND Zustand Unterschiede bei einem atomaren Zustand Bei einem atomaren Zustand gibt es zus tzlich eine Checkbox mit dem Namen End State Durch Selektieren dieser wird der Zustand zu einem Endzustand erkl rt Unterschiede bei einem OR Zustand Hier finden sich der Eintrag Sub durch die einzelne Unterzust nde markiert werden k nnen 5 3 2 Inspektor f r einen Pfe
333. nuten ohne Tastendruck zur Zeitanzeige zur ckschaltet In dem von Harel gezeigten Statechart wird dies einfach durch die Angabe nach 2 Min anstelle eines Ereignisse am bergang deutlich gemacht Die in terne Stoppuhr wird dabei bei jedem Tastendruck wieder auf Null gesetzt und wenn die angegebene Zeit verstrichen ist wird der entsprechende bergang ausgef hrt In HN96 geben Harel und Namaad eine genauere Definition der Funktionsweise eines Time Out Ereignisses Das spezielle Ereignis timeout e d tritt d Zeiteinheiten nach dem letz ten Eintreten des Ereignisses e ein Interessant ist dabei zu bemerken dass sich diese Ereignisse beim asynchronen Zeit modell nicht auf Schritte im Statechart beziehen sondern auf die simulierte Zeit Es kann daher nicht vorher festgelegt werden wie viele berg nge im Statechart bis zum Eintreten des Ereignisses wirklich vergangen sind Au erdem handelt es sich um re gul re Ereignisse das hei t sie sind im gesamten Statechart sichtbar Dies steht im Gegensatz zu der Form die im Zusammenhang mit der Armbanduhr beschrieben wur de da in jenem Fall kein Ereignis im eigentlichen Sinn benutzt wurde Horrocks schl gt ein etwas anderes Konzept vor indem er Verz gerungen und Time Outs in die Zust nde integriert Eine Verz gerung bewirkt dabei dass Ein gaben des Benutzers nicht vor einer gewissen Zeit beachtet werden da das System den Zustand nicht vor Ablauf der Frist verlassen kan
334. ogDM LogDModell gt score AbstractModell MarkableTyp gt score LogDM DlgKomponente gt score LogDM DlgButton gt score LogDM DlgCheckbox gt score LogDM DlgPopup gt score LogDM DlgRadiobutton gt score LogDM DlgText gt score LogDM DlgTimer D 10 2 Interface DialogCompManager Regelt den Zugriff auf eine Dialogkomponente setDigVisible int boolean void Macht die Dialogkomponente id visible oder invisible setOn int void Setzt Komponente id auf on setOff int void Setzt Komponente id auf off D 10 3 Interface DialogCompServer Regelt den Zugriff um eine Dialogkomponente zu erhalten getComponentWithld int Object Soll die Komponente mit der ID id zuriickgeben Kapitel D Programmdokumentation Package score LogDM D 10 4 Klasse DigButton extends score LogDM DlgKomponente Ein Button Konstruktoren DigButton Konstruktor mit DefaultAktion DigButton String Konstruktor setz den Label Methoden setVisible boolean void berschreibt die Methode der Klasse D gKomponente Setzt sichtbar oder unsichtbar setOn gt void berschreibt die Methode der Klasse DlgKomponente wird ignoriert setOff gt void berschreibt die Methode der Klasse D gKomponente wird ignoriert toString String berschreibt die Methode der Klasse D gKomponente Liefert eine String Repr sentation createComponent Component berschreibt die Methode der Klasse
335. ogischen Punkte und Pfei le sie wird von der Oberklasse des logischen Modells beobachtet so dass nde rungen an diese weitergegeben werden k nnen Eine genaue Beschreibung dieses Verfahrens findet sich in Abschnitt 6 5 3 137 Die Datenstruktur des Statecharts Kapitel 6 Funktionsweise der Module 138 LogPunkt Diese Klasse ist die abstrakte Oberklasse aller Punkte im Statechart das hei t aller Stellen an denen logische Pfeile beginnen oder enden k nnen Diese berg nge werden im LogPunkt gehalten Au erdem besitzt jeder LogPunkt einen Oberzustand ZustandAtom Der atomare Zustand enth lt die meisten Informationen eines Zu stands Hier werden die Aktionen gespeichert die beim Aktivieren und De aktivieren dieses Zustands ausgel st werden sollen Wird ein solcher Zustand erschaffen werden die Aktionen automatisch so initialisiert dass beim Akti vieren das Ereignis enter S und beim Deaktivieren das Ereignis exit S ausgel st werden ZustKomplex Der komplexe Zustand erweitert den atomaren Zustand in dem Sin ne dass er Unterzust nde enthalten kann Er ist jedoch noch abstrakt und muss entweder als OR oder AND Zustand erweitert werden ZustAND Diese Klasse erweitert den komplexen Zustand nur um spezielle Methoden aber nicht um weitere Daten ZustOR Ein OR Zustand kann die Information enthalten welcher seiner Unter zust nde als Defaulteinstieg markiert ist Konnektor KonUniversal KonHistory Diese Klassen e
336. oint2D Double void Zeichnet einen Hook an die angegebene Position Die Vergr erung wird noch beachtet fillRoundRect Point2D Double Dimension Double void Zeichnet ein ausgef lltes Rechteck mit abgerundeten Ecken mit der bergebenen Position und Gr e Die Vergr erung wird noch beachtet fillRoundRect double double double double void Zeichnet ein ausge lltes abgerundetes Rechteck mit der bergebenen Position und Gr e Die Vergr erung wird noch beachtet drawRoundRect Point2D Double Dimension Double gt void Zeichnet ein Rechteck mit abgerundeten Ecken mit der bergebenen Position und Gr e Die Vergr erung wird noch beachtet drawRoundRect double double double double void Zeichnet ein Rechteck mit abgerundeten Ecken mit der bergebenen Position und Gr e Die Vergr erung wird noch beachtet fillRect double double double double void Zeichnet ein ausgef lltes Rechteck mit der bergebenen Position und Gr e Die Vergr erung wird noch beachtet drawSchranke Point2D Double Dimension Double void Zeichnet eine Abschlusslinie an die bergebene Position die senkrecht zur bergebenen Richtung ist Die Vergr erung wird noch beachtet drawArrowHead Point2D Double Dimension Double void Zeichnet eine Pfeilspitze an die bergebene Position in der bergebenen Richtung Die Vergr e rung wird noch beachtet D 17 Package score Verifikator D
337. oint2D Double Dimension Double gt void berschreibt die Methode der Klasse ZoomGraphics Diese Methode lenkt das Zeichnen eines markierten Rechtecks durch berschreiben der entspre chenden Methode in ZoomGraphics auf das Zeichnen eines abgerundenten Rechtecks um drawHook Point2D Double void berschreibt die Methode der Klasse ZoomGraphics Deaktivert das Zeichnen von Hooks durch das berschreiben der entsprechenden Methode in ZoomGraphics setColor Color gt void berschreibt die Methode der Klasse ZoomGraphics Deaktiviert das Setzen der Farbe durch berschreiben der entsprechenden Methode in ZoomGra phics getColor Color berschreibt die Methode der Klasse ZoomGraphics Gibt Null zur ck da diese Klasse keine Farben f r MetaPost benutzt Kapitel D Programmdokumentation Package score util D 16 17 Klasse NumPField extends javax swing JPanel implements java awt event ActionListener Diese Klasse zeigt ein Nummernfeld mit Buttons zum de und inkrementieren Konstruktoren NumField Konstruktor Numfield String int Konstruktor NumField String int int int int int Konstruktor NumField String int int int int Konstruktor Numfield String int int Konstruktor setNumber int void Die Zahl setzen setNumberSilent int void Die Zahl Setzen ohne eine Event auszul sen getNumber gt int Die Nummer ausl sen setStepSize int void In und
338. omplett geschrieben Package score LogSCM 267 Package score LogSCM Kapitel D Programmdokumentation 268 D 11 13 Klasse ZustAND extends score LogSCM ZustKomplex Diese Klasse stellt einen AND verfeinerten Zustand dar Attribute newlyActivatedANDs Vector In dieser Klassenvariable werden die AND Zust nde gesam melt die gerade aktiviert wurden Um eine Aktivierung abzuschlie en m ssen diese Zust nde nachtr glich aktiviert werden um sicherzustellen dass alle Partitionen aktiviert sind Konstruktoren ZustAND Der Konstruktor setzt den Typ dieser Instanz ZustAND LogPunkt Erschafft einen neuen ZustAND der einen alten logischen Punkt ersetzt Methoden addPartition ZustOR void F gt einen ZustOR als Partition dieses Zustandes hinzu F r diesen wird der Oberzustand gesetzt removePartition ZustOR void Entfernt einen ZustOR der eine Partition dieses Zustands ist F r diesen wird der Oberzustand auf Null gesetzt exportQT EasyFileWriter gt void berschreibt die Methode der Klasse ZustandAtom Exportiert diesen AND Zustand in den EasyFileWriter D 11 14 Klasse ZustandAtom extends score LogSCM LogPunkt implements score Aktionen Actor Diese Klasse erweitertn den logischen Punkt zu einem Atomaren Zustand Attribute createDefaultActions boolean Gibt an ob beim Erschaffen eines Zustands die Aktionen throw enter und throw exit erschaffen und ei
339. on allerdings meist mittels eines Benutzerdialogs stattfinden Die Komponenten aus denen ein solcher Dialog aufge baut ist k nnen bei der Konstruktion des Statecharts bereits eingeplant werden Auf diese Weise wird der Statechart Kern um einige spezielle Ereignisse Bedingungen und Aktionen erg nzt die sich direkt aus der Verbindung mit diesen Komponenten ergeben So wird etwa durch das Dr cken eines Knopfes ein neues Ereignis ausgel st es kann abgefragt werden ob ein bestimmtes Feld angekreuzt ist Textfelder k nnen durch das Anzeigen eines bestimmten Textes auf eine Aktion reagieren und so fort Um diese neuen Elemente auf einfache Weise in das Statechart integrieren zu k nnen ist die Kombination des reinen Statechart Editors mit einem Dialog Editor naheliegend darauf soll in Abschnitt 3 1 2 genauer eingegangen werden Die maximale Erweiterung durch Quelltext Obwohl ein Editor der die zus tzli che Benutzung von Dialogkomponenten bereits anbietet deutlich m chtiger ist als ein reiner Statechart Editor lassen sich viele Probleme immer noch nicht komplett mo dellieren Es fehlt eine M glichkeit mit anderen Komponenten oder Programmen des Systems zu kommunizieren Hier gibt es wieder beliebig viele Varianten wie zum Beispiel der Zugriff auf eine Datenbank das Ansteuern von Hardware wie etwa CD Spielern die Kommunikation ber ein Netzwerk und so weiter Diese Funktionen sind so vielf ltig dass sie nicht zu weiteren speziellen
340. on aus diesem Pfeil getCompAction gt AktKomplex Gibt die komplexe Aktion zuriick setCompAction AktKomplex void Setzt die komplexe Aktion dieses LogPfeil auf den bergebenen Wert calcScope gt void Berechnet den ersten Zustand der alle Start und Endzust nde enth lt setScope LogPunkt void Setzt den Scope auf den bergebenen LogPunkt getScope gt LogPunkt Gibt den ersten Zustand zur ck der alle Start und Endzust nde enth lt Dieser Zustand wird in dieser Methode nicht neu berechnet redirect LogPunkt LogPunkt boolean void 261 Package score LogSCM Kapitel D Programmdokumentation 262 Ersetzt Start und Endzust nde die dem ersten bergebenen LogPunkt entsprechen durch den zweiten Muss von den einzelnen PfeilTypen entsprechend implementiert werden isBasicallyPossible boolean berpr ft Ereignis und Bediungung dieses bergangs is1_1 gt boolean Gibt zuriick ob dies ein 1 1 Pfeil ist isi_N gt boolean Gibt zuriick ob dies ein 1 N Pfeil ist isN_1 0 gt boolean Gibt zur ck ob dies ein N 1 Pfeil ist getType int Gibt den Typ dieses Pfeils zur ck isEmpty O gt boolean Gibt zur ck ob dieser Pfeil leer ist also weder Ereignis Bedingung noch Aktionen besitzt getii O gt LogPfeil Gibt einen 1 1 Pfeil zur ck Diese Methode muss von den einzelnen Pfeiltypen entsprechend implementiert werden delete void berschre
341. onzept ist das bei dem immer nur genau die letzte nderung r ckg ngig gemacht werden kann die Edi tiervorg nge werden sozusagen auf einen Stack abgelegt Ein Redo wird dadurch erm glicht dass vom Stack genommene Vorg nge auf einem eigenen Stack gespei chert und dementsprechend in der richtigen Reihenfolge wieder hergestellt werden k nnen Neue nderungen machen diesen Redo Stack unzug nglich Diese Form von Undo ist sehr bersichtlich hat aber den eben beschriebenen Nachteil vorhergehen de nderungen an Objekten die in den letzten Vorg ngen nicht bearbeitet wurden k nnen nicht r ckg ngig gemacht werden Dem gegen ber stehen Verfahren bei denen s mtliche Vorg nge in einer Baum struktur gespeichert werden bei der ein neuer Ast begonnen wird wenn nach einem Redo neue Aktionen durchgef hrt werden Hierbei gehen keine Editiervorg nge verlo ren durch geschicktes Navigieren in diesem Baum ist es also m glich fr here nde 63 64 Grafische Editoren Kapitel 3 Werkzeuge f r Statecharts rungen zur ckzunehmen und dann sp tere nderungen wiederherzustellen Das Pro blem ist allerdings dass der Benutzer nur schwer die bersicht beh lt an welcher Position im Baum er sich befindet Das hier erw hnte Konzept bietet die bersichtlichkeit des ersten Verfahrens kombiniert mit der Flexibilit t eines baum orientierten Undos Es muss allerdings bei der Umsetzung noch genauer bestimmt werden was bei nderungen ges
342. ook hook hook P hook targetState targetArrow targetDialog STATE stateld ON ACTIVATION DEACTIVATION ARROW arrowld DIALOG digCompld lt anchorStateld offset textld gt Kapitel C Grammatik des Datenformats varname zoom size offset first second depth name text javaCommand filename id eventld actionld textld timerld dlgCompld popupld anchorStateld stateld arrowld visible dimension point double string identifier integer digit boolean operator identifier double dimension point point point integer string string string string integer integer integer integer integer integer integer integer integer integer boolean P double double double double integer integer character character character digit digit Wil TRUE FALSE 6993 gt gt lt te gt lt gt 177 Kapitel C Grammatik des Datenformats 178 The Dean glared That s not magic he snapped That s just engineering Terry Pratchett Interesting Times Anhang D Programmdokumentation D 1 Package score D 1 1 Klassenhierarchie java lang Object gt score start D 1 2 Klasse start extends java lang Object score Hauptklasse Ruft die Steuerklasse auf und startet dadurch
343. or beschreiben dessen Elemente wir unten konstruieren werden Damit kann man das Verhalten des Statecharts ber die Zeit als eine Folge von Vektoren darstellen Es gilt nun diese Vektoren zu bestimmen Folgende Werte ndern sich ber die Zeit e welche Zust nde aktiviert bzw deaktiviert sind e welche Ereignisse gerade ausgel st wurden e welchen Wert die Historyeinstiege haben e welche Bedingungen welchen Wahrheitswert haben Den ersten und den letzten Punkt haben wir bereits in der formalen Definition der Sprache Lpg in den aussagenlogischen Variablen pm zusammengefasst siehe Ab schnitt 1 2 10 Dies sind zwar nach Definition unendlich viele jedoch reicht immer eine endliche Teilmenge zur Beschreibung des Systems indem man nur die p be trachtet die in den benutzten Formeln des Statecharts vorkommen Wir nummerieren diese p um und erhalten den Vektor P Pnp Analog erhalten wir aus den Ereig nissen einen Ereignisvektor 1 n und erg nzen diesen noch um die Werte der Historyeinstiege Die Konfiguration eines Statecharts ist also 1 22 re Pitt Bnp t t En t h z1 t MZnz t 31 Temporale Auswertung Kapitel 1 Definition von Statecharts Im folgenden schreiben wir auch Us 1 wenn der Zustand z aktiv ist 7 1 0 wenn der Zustand z inaktiv ist Bemerkung Man beachte dass einige der f mit einem z t identisch sind wenn in Bedingungen getestet wird ob ein Zustand j aktiv
344. ore control Logger Diese Klasse stellt die grafischen Komponenten des Simulationsfensters Attribute logList JList Die verschiedenen Listen in der Anzeige activeStateList JList Die verschiedenen Listen in der Anzeige actionList JList Die verschiedenen Listen in der Anzeige variableList JList Die verschiedenen Listen in der Anzeige eventList JList Die verschiedenen Listen in der Anzeige delay NumField Das Zahlenfeld f r die Zeit Konstruktoren SimWindow ActionListener WindowListener Konstruktor Methoden setTime int void Die Zeit setzen setPhase String void Die Phase setzen startRunning void Auszuf hren beim Start der Simulation stopRunning void Auszuf hren beim Ende der Simulation addLine String void Eine Meldung ausgeben dispose void Das Fenster l schen 293 Package score Simulator Kapitel D Programmdokumentation D 15 7 Klasse Variable abstrakte Klasse extends score AbstractModell MarkableTyp implements java lang Comparable Dies ist die abstrakte Oberklasse fiir die Variablen Attribute compServer DialogCompServer Referenz auf den DialogkomponentenServer name String Der Name der Variablen DLG_PREFIX String CONST Das Prefix f r Dialogvariablen LESS int CONST Konstanten f r die Vergleichsoperatoren GREATER int CONST Konstanten f r die Vergleichsoperatoren EQUAL int CO
345. ory Konnektor Konstruktoren KonHistory Der Konstruktor erzeugt einen History Konnektor Er wird anfangs nicht als Deep History Konnektor gesetzt KonHistory boolean Erschafft einen neuen History Konnektor der als Deep History Konnektor gesetzt wird wenn true libergeben wird setDeep boolean void Setzt die Angabe ob es sich bei diesem Konnektor um einen Deep History Konnektor handelt oder nicht exportQT EasyFileWriter gt void berschreibt die Methode der Klasse LogPunkt Exportiert diesen Historykonnektor in den EasyFileWriter D 11 4 Klasse Konnektor abstrakte Klasse extends score LogSCM LogPunkt Diese abstrakte Klasse liegt zwischen einem logischen Punkt und den beiden konkreten Konnektor Klassen 259 Package score LogSCM Kapitel D Programmdokumentation 260 D 11 5 Klasse KonUniversal extends score LogSCM Konnektor Diese Klasse konkretisiert den Konnektor als Universal Konnektor Konstruktoren KonUniversal Der Konstruktor setzt den Typ dieses Objektes Methoden exportQT EasyFileWriter gt void berschreibt die Methode der Klasse LogPunkt Exportiert diesen Universalkonnektor in den EasyFileWriter D 11 6 Klasse LogComponent abstrakte Klasse extends score util Observable Diese Klasse ist die abstrakte Oberklasse aller Elemente im logischen Statechart Modell Sie wird vom LogSCModell beobachtet und leitet einen Refresh Aufruf an dieses weiter Attri
346. peichert diese atomare Aktion in den bergebenen EasyFileWriter exportAll EasyFileWriter gt void Exportiert alle Aktionen in den EasyFileWriter Dabei wird eine switch Anweisung geschrieben die mit dem Inhalt der atomaren Aktionen mittels exportQT gef llt wird exportQT EasyFileWriter gt void Diese abstrakte Methode muss von den Aktionen entsprechend implementiert werden um den entsprechenden Quelltext in den EasyFileWriter zu exportieren D 3 7 Klasse AktionDialog extends score util Observable implements java awt event ActionListener score util Observer Javax swing event ListSelectionListener Java awt event WindowListener Diese Klasse stelle einen Dialog zum Ausw hlen von Aktionen zur Verf gung Attribute undo UndoManager Globaler UndoManager Konstruktoren AktionDialog LogDModell WindowListener String Konstruktor erzeugt einen neuen Dialog mit logischem Modell Idm AktionDialog LogDModell Erschafft einen AktionDialog zum bergebenen LogDModell als globale Aktionen Liste Methoden replaceObservable Observable Observable boolean 185 Package score Aktionen Kapitel D Programmdokumentation 186 Die Observables wurden ersetzt actionPerformed ActionEvent void F r den ActionListener dispose void L scht diesen AktionDialog update Observable Object void F r den Observable valueChanged ListSelectionEvent void Die Listenselektion h
347. r translate Hashtable gt Bedingung berschreibt die Methode der Klasse Bedingung Gibt eine bersetzung dieser NOT Bedingung zur ck save EasyFileWriter void berschreibt die Methode der Klasse Bedingung Speichert die Bedingung und ihre Unterbedingung im EasyFileWriter exportQT EasyFileWriter gt void berschreibt die Methode der Klasse Bedingung Exportiert den Quelltext dieser Bedingung in den EasyFileWriter D 4 8 Klasse BedOR extends score Bedingungen BedKomplex Erweitert die komplexe Bedingung im Sinne einer OR Bedingung Konstruktoren BedOR Erschafft eine neue leere BedOR Methoden isTrue boolean berschreibt die Methode der Klasse BedKomplex Gibt zur ck ob mindestens eine der Unterbedingungen wahr ist Die weiteren werden nicht mehr getestet translate Hashtable Bedingung berschreibt die Methode der Klasse Bedingung Gibt eine bersetzung dieser OR Bedingung zur ck D 4 9 Klasse CompVarBed extends score Bedingungen BedAtomar Spezialisiert die atomare Bedingung zu einer Abfrage einer Variablen Konstruktoren CompVarBed String String int Erschafft eine neue Bedingung die sich auf die Variable mit dem bergebenen Namen bezieht mit dem entsprechenden Operator und Vergleichswert CompVarBed String int int Erschafft eine neue Bedingung die sich auf die Variable mit dem bergebenen Namen bezieht mit dem entsprechenden Operator und Ve
348. r 225 GrafModellSicht 226 GrafModellSicht visHook 231 GrafModellSicht visText 231 GrafPfeil 231 GrafPunkt 234 GrafSCModell 239 Graf Text 240 Graf TopLevelZust 241 Graf Typ 242 GrafZustand 243 HasHistoryBed 201 IncVarAktion 191 InlineEventDialog 218 Inspector 208 InStateBed 202 Interpreter 208 Intersect 301 JavaAktion 192 JavaBed 202 KonDefault 259 KonHistory 259 Konnektor 259 KonUniversal 260 LaTeXDoclet 215 LaTeXString 301 LogComponent 260 LogDModell 257 LogPfeil 260 LogPfeil_1_1 262 LogPfeil_1_N 263 LogPfeil_N_1 264 LogPunkt 265 LogSCModell 267 MainWindow 209 MarkableTyp 181 MetaPostGraphics 301 Numfield 303 Observable 303 Painter 275 Pair 304 Parser 210 Partitioner 247 PropertyView 211 RubberBand 275 RubberCircle 276 RubberFilledCircle 276 RubberOval 276 RubberRectangle 277 RubberRoundRect 277 RubberSet 278 RubberText 279 Scale 304 Scanner 212 SCCanvas 279 SCEditor 280 SCInterpreter 212 ScrollCanvas 283 SCRun 290 SetDialogOnAktion 192 SetDialogVisibleAktion 193 SetVarAktion 194 SimAND 284 SimBasic 285 SimConn 287 SimHist 287 SimOR 288 SimSCModell 289 Simulation 292 SimVariable 293 SimWindow 293 start 179 StateChart 271 StringCheck 305 SuperList 249 TextEditField 305 Throw Aktion 195 Timer 272 Token 213 TranslationWindow 283 Triplet 306 UndoStack 306 Unterpunkt 249 Variable 294 VecArithmetik 307
349. r nicht und stellt au erdem fest dass die Differenz falls sie nicht leer ist mit E bezeichnet wird und mit F durch die Beziehung R verbunden ist Da jedoch auch bei den blichen Zust nden im Statechart nicht zwingend voraus gesetzt wird dass sie erreichbar sind und es sie daher im obigen Sinne gibt kann dies ebenso ohne die Einf hrung unsicherer Zust nde modelliert werden Auch diese Idee wird daher weder in weiterer Literatur aufgegriffen noch in Statemate implemen tiert Schlie lich spielt Harel noch mit dem Gedanken dass es Zust nde geben k nnte die betreten werden d rfen ohne dass dadurch ein Oberzustand aktiviert wird Harel yg Har88 S 526 18vg Har88 S 526 Zust nde 41 Konnektoren 42 Kapitel 2 Varianten von Statecharts in der Literatur Abbildung 2 3 unsichere Zust nde gibt ein Beispiel bei dem er die oben beschriebenen berlappenden Zust nde ver wendet So ist es zum Beispiel denkbar dass ein Zustand in zwei sich nur teilweise berschneidenden Oberzust nden liegt und dass beim Betreten dieses Zustands nur einer der beiden Oberzust nde aktiviert werden soll Bezogen auf Abbildung 2 1 hie e dies dass etwa Zustand D betreten wird und Zustand B dadurch ebenfalls aktiviert wird w hrend Zustand C deaktiviert bleibt Dieses Konzept steht jedoch im Widerspruch zur sonst verfolgten strengen Hierarchie Vermutlich liegt darin begr ndet dass in der Li teratu
350. r Benutzer die Zust nde direkt so verbinden kann wie es letzten Endes gemeint ist Allerdings ist die Verbindung von zwei Fenstern in einer Aktion nicht ganz bersichtlich da es hierbei im Unterschied etwa zu Drag and Drop Aktionen zwi schen zwei Fenstern auch auf die Verbindungsstrecke zwischen Start und Endpunkt der Aktion ankommt Andererseits kann der Pfeil in einer gr beren Ansicht eingef gt werden wo er lediglich an einen Zustand angeh ngt wird der ein Oberzustand des eigentlichen Start oder Endzustands ist In einer detaillierteren Darstellung kann er dann so umgeh ngt werden dass er den beabsichtigten Zustand anbindet Pfeile mit mehreren Start oder Endpunkten Weiterhin muss berlegt werden wie Pfeile eingef gt werden k nnen die bei mehre ren Zust nden beginnen oder enden Dies sollte sich im Vorgehen nicht zu sehr vom Einf gen von Pfeilen unterscheiden die einen einzigen Startzustand mit einem einzi gen Endzustand verbinden Wird f r derartige einfache Pfeile die Maus so benutzt dass der Knopf auf dem Startzustand gedr ckt und auf dem Endzustand losgelassen wird so ist das folgende Verfahren denkbar Zun chst werden alle Startzust nde mar kiert dann wird eine Verbindung gezogen alle Endzust nde markiert und schlie lich dem Editor mitgeteilt dass die Aktion abgeschlossen ist Dieses Vorgehen hat jedoch wie alle Methoden die s mtliche Start bzw Endzust nde lediglich als Zustandsmen gen
351. r Punkt im entsprechenden Zustand in der N he der rechten unteren Ecke liegt getPosition GrafPunkt Point2D Double Gibt die Position zur ck die der bergebene GrafPunkt bez glich des Oberzustands dieser Sicht hat draw Painter void Zeichnet den Hauptzustand mit der eingestellten Tiefe in den bergebenen Painter hasBeenDrawn GrafPfeil boolean Gibt an ob der bergebene Pfeil bereits gezeichnet wurde drawsArrow GrafPfeil void Sagt der Sicht dass der bergebene Pfeil gezeichnet wurde getPartitioners Point2D Double Partitioner Gibt die m glichen Partitioner bei einem gegebenen Punkt zur ck Liegt der Punkt nicht im Hauptzustand wird Null zur ckgegeben getHorizPartitioner Point Partitioner Gibt einen m glichen horizontalen Partitioner oder Null zur ck getVertPartitioner Point Partitioner Gibt einen m glichen vertikalen Partitioner oder Null zur ck getPosOfNeighbours GrafHook Point2D Double Gibt einen Array der Zeichenpositionen der Hooks neben dem bergebenen Hook zur ck update Observable Object void Implementation des Observer Interfaces F hrt ein Refresh durch solange sie nicht von einem TranslationWindow aufgerufen wird In diesem Fall ist das bergebene Argument der GrafZu stand der kopiert wurde refresh Observable void Erneuert die Darstellung aller Observer dieser Sicht refresh void Kapitel D Programmdokumentation Package
352. r Startzustand vorhanden ist wird wird ein 1 1 Pfeil zur ckgegeben der diesem 1 N Pfeil entspricht Start und Endzust nde werden auf den neuen Pfeil umgesetzt und dieser alte Pfeil aus der Liste aller LogPfeil entfernt Sind jedoch mehrere Startzust nde vorhan den wird Null zur ckgegeben delete void Kapitel D Programmdokumentation Package score LogSCM berschreibt die Methode der Klasse LogPfeil L scht diesen LogPfeil er wird dabei auch aus allen Start und Endzust nden entfernt exportQT EasyFileWriter boolean berschreibt die Methode der Klasse LogPfeil Exportiert den Quelltext f r diesen LogPfeil in den EasyFileWriter D 11 11 Klasse LogPunkt abstrakte Klasse extends score LogSCM LogComponent Diese abstrakte Klasse stellt einen Punkt im logischen Statechart dar Ein Punkt kann als Start oder Endpunkt von Verbindungen benutzt werden Attribute type int der Typ dieser Instanz H TYP_CONN_UNIV int CONST Konstante f r einen Universal Konnektor TYP_CONN_HIST_FLAT int CONST Konstante f r einen History Konnektor TYP_CONN_HIST_DEEP int CONST Konstante f r einen Deep History Konnektor TYP_CONN DEF int CONST Konstante f r Default Einstiegs Konnektoren TYP_ST_ATOM int CONST Konstante f r einen atomaren Zustand H TYP_ST_XOR int CONST Konstante f r einen OR Zustand TYP_ST_AND int CONST Konstante f r einen AND Zustand Konstruktoren LogPunkt
353. r Unterzustand eingef gt so wird das logische Ge genst ck gegebenenfalls von einem atomaren auf einen OR Zustand umgestellt Unterzust nde erhalten beim Einf gen jeweils einen Offset der von der linken oberen Ecke ihres direkten Oberzustands gerechnet ist GrafAND Dies ist die beschriebene Erweiterung des grafischen Zustands um Partitio ners Au erdem sind f r AND Zust nde andere Methoden zur Berechnung der Tiefe und Sichtbarkeit notwendig Partitioner Auch diese Klasse erbt von GrafTyp da sie vom Benutzer markiert wer den kann Ein Partitioner ist eine Trennlinie zwischen zwei Partitionen eines AND Zustands Ihre beiden Endpunkte sind dabei bez glich der linken oberen Ecke des AND Zustands angegeben GrafTopLevelZust Obwohl der virtuelle Oberzustand in den Sichten nicht auftaucht ist er im Prinzip ein OR Zustand Dennoch m ssen einige Funktionen ber schrieben werden um dieser Sonderrolle gerecht zu werden GrafKonnektor Diese Klasse fasst alle logischen Konnektoren zusammen Sie er weitert den GrafPunkt hnlich wie GrafZustand nur dass keine Unterzust nde erlaubt sind und der Konnektor nicht durch ein abgerundetes Rechteck sondern einen Kreis dargestellt wird Dementsprechend sind andere Methoden n tig um die Positionen der Start und Endpunkte von berg ngen zu berechnen GrafPfeil Der grafische Pfeil entspricht allen drei Typen von logischen Pfeilen und erweitert die Klasse GrafTyp Er besitzt einen Vektor von Start
354. r false zur ck touches Dimension Double boolean Gibt an ob dieser Punkt den Rand der alten Gr e des Oberzustands ber hrt adoptSize Dimension Double Dimension Double void Setzt die neue Gr e passend f r die bergebene neue Gr e des Oberzustands falls dieser Zu stand den Rand des Oberzustands mit der alten Gr e ber hrt addincoming GrafPfeil gt void F gt eine eingehende Verbindung zu diesem grafischen Punkt hinzu Das entsprechende wird beim logischen Punkt wiederholt addOutgoing GrafPfeil void F gt eine ausgehende Verbindung zu diesem grafischen Punkt hinzu Das entsprechende wird beim logischen Punkt wiederholt getincoming Vector Gibt eine Enumeration der ankommenden Pfeile zur ck getOutgoing Vector Gibt eine Enumeration der abgehenden Pfeile zur ck hasOutgoing boolean 235 Package score GrafSCM Kapitel D Programmdokumentation 236 Gibt an ob dieser GrafPunkt ausgehende Verbindungen hat canExit GrafPunkt boolean Gibt an ob von diesem Punkt Verbindungen ausgehen die den bergebenen GrafPunkt verlassen getAllArrows Vector Gibt einen Vector zur ck der s mtliche ein und ausgehenden GrafPfeil enth lt removelncoming GrafPfeil void Entfernt einen ankommenden Pfeil aus diesem Punkt Das entsprechende wird beim logischen Punkt wiederholt removeOutgoing GrafPfeil void Entfernt einen ausgehenden Pfeil aus diesem Punkt
355. r m sste der Programmierer jedoch den automatisch erzeugten Quelltext nachtr glich entsprechend erweitern Wird das Statechart f r das erzeugte Programm andererseits lediglich als Modul konzipiert so kann es von einem umfangreicheren Hauptprogramm genutzt werden Diese Variante hat den Vorteil dass der Quellcode der innerhalb des Statecharts gehal ten wird auf das eigentliche Programm umgelagert und der Umfang des Statecharts damit reduziert werden kann Hierbei wird das Statechart hnlich wie beispielswei se Fenster oder andere Widgets in Java vom Hauptprogramm erzeugt l uft dann aber unabh ngig von diesem weiter Die Kommunikation vom Hauptprogramm zum Statechart wird ber direkte Funktionsaufrufe die umgekehrte Richtung ber das in Java bliche Listener Konzept stattfinden Ereignisse k nnen nun im Hauptprogramm erkannt und an das Statechart bergeben werden dies vereinfacht den berblick ber das endg ltige Programm und erleichtert damit die Einbindung eines Statecharts Eigenschaften des erzeugten Programms So bersichtlich Statecharts auch sind die Umsetzung in Quelltext ist nicht notwen digerweise ann hernd leicht lesbar Wenn er zudem ohne das urspr ngliche Statechart betrachtet wird d rfte er vollends unverst ndlich sein Daher sollte beim Erzeugen des Quelltextes darauf geachtet werden dass dem Programmierer der die Software er weitern will geeignete Methoden zur Vef gung gestellt werden mit denen er ar
356. r nicht n her darauf eingegangen wird 2 3 Konnektoren 2 3 1 Grundformen der Konnektoren Zu Konnektoren l sst sich zun chst bemerken dass dieser Begriff in Har87b und Har88 noch nicht auftaucht Auch Horrocks verzichtet in Hor99a auf diese Klasse von Elementen Allerdings treten in jeder Beschreibung von Statecharts Elemente auf die keine vollwertigen Zust nde sind aber dennoch meistens mangels eines besseren Begriffs als Zust nde bezeichnet werden In Statemate werden diese Elemente als Konnektoren klassifiziert und in sp teren Arbeiten bernimmt Harel diesen Begiff Wir wollen uns hier dieser Bezeichnungs weise anschlie en da sie die Unterscheidung zu den eigentlichen Zust nden leichter macht Konnektoren hneln transienten atomaren Zust nden in der bereits in Ab schnitt 2 2 1 beschriebenen Form zu gro en Teilen der Unterschied besteht allerdings darin dass Konnektoren nicht wie Zust nde aktiviert werden k nnen In Statechart Modellen mit diskreter Zeit verz gern sie die Reaktion des Systems daher nicht um einen Zeitschritt generell k nnen sie insbesondere keine Ereignisse oder Aktionen ausl sen und sind damit eher Teil der Verbindung 19 81 Har88 S 527 f 20jn UML als Pseudozust nde vgl zum Beispiel HK99a S 133 oder Rum99 S 397 Kapitel 2 Varianten von Statecharts in der Literatur Konnektoren in Statemate In Statemate werden sieben Formen von Konnektoren unterschieden die auch in d
357. rafText GrafText GrafIyp Copy Konstruktor mit Referenz getlD gt int Gibt den Identifier dieses Textes zuriick delete gt void berschreibt die Methode der Klasse GrafTyp L scht diesen Text aus dem Hashtable aller Texte resetCounter void Setzt den Z hler der Texte wieder auf 1 und entfernt alle Texte aus dem Hashtable getText Integer gt GrafText Gibt den Text mit dem angegebenen Identifier zuriick getAll gt Collection Kapitel D Programmdokumentation Package score GrafSCM Gibt eine Collection aller Texte zur ck checkReferences void berpr ft bei allen Texten die sich auf einen Pfeil bzw Hook beziehen welchen Wert diese Referenz besitzt getText gt String Gibt den angezeigten Text zur ck differs boolean Gibt an ob sich der angezeigte Text von dem der Referenz unterscheidet setText String gt boolean Setzt den Text Bei GrafTexten die sich auf Pfeile beziehen kann dadurch eine Abweichung vom Referenztext entstehen Wird bei solchen Texten der leere Text oder Null angegeben so wird der Referenztext gesetzt Gibt true zur ck falls eine Anderung stattgefunden hat setLabel String void Setzt den Referenztext Wenn sich der angezeigte Text nicht vom urspr nglichen Referenztext unterschieden hat wird auch der angezeigte Text ge ndert getReference gt GrafTyp Gibt die Referenz dieses GrafTextes zur ck setReference
358. ratur die Definition in eher informeller Weise durchgef hrt wird geben wir hier keinen direkten Bezug auf Literatur anderer Autoren an Wir beginnen unsere Definition mit den grundlegenden Elementen des Statecharts Danach definieren wir formal den Aufbau der Statecharts In Abschnitt 1 3 verbinden wir dann diesen formalen Aufbau mit einer grafischen Notation Es folgen in Abschnitt 1 4 einige Definition die das Verhalten des Statecharts in einem Ablauf wiedergeben 1 1 Grundlegende Definitionen Statecharts bestehen aus den folgenden Elementen e Zust nde e berg nge e Bedingungen e Ereignisse e Aktionen Vorbemerkungen Hilfreich ist es wenn man die Definition von endlichen Auto maten betrachtet und Statecharts als solche erweitert um Tiefe und Nebenl ufigkeit ansieht Weiter ist zu beachten dass wir f r die Abarbeitung der Statecharts eine dis krete Zeit t N benutzen Hier gibt es in der Literatur auch andere Konzepte Um sich mit den Elementen des Statcharts vertraut zu machen betrachte man zum Beispiel Abbildung A 3 auf Seite 158 in der alle wesentlichen Elemente der Statecharts benutzt werden 18 Grundlegende Definitionen Kapitel 1 Definition von Statecharts 1 1 1 Zust nde Ein Zustand ist ein abstraktes Gebilde dessen Aufgabe in dem Wissen liegt ob er aktiviert oder deaktiviert ist Zust nde haben eine Identifikation und sind dadurch un terscheidbar Desweiteren gibt es die Ereignisse e Zustand betreten
359. rden sollen Run Simulation Alt R Hiermit wird eine Simulation gestartet Sollte das Statechart Fehler enthalten wird zun chst eine entsprechende Warnung ausgegeben F r die Funktionsweise des Simulators siehe Abschnitt 5 9 Export Source Alt X Wenn dieser Men punkt ausgew hlt wird wird das Statechart als ausf hrbarer Programmtext gespeichert vergleiche hierzu auch Abschnitt 5 11 Command Line Alt L ffnet ein Kommando Fenster Hier kann der Benutzer ein zelne Befehle eingeben die der in Anhang C angegebenen Grammatik entspre chen Da hierbei jedoch direkt in die Struktur der Statechart Modelle eingegrif fen wird ist mit diesem Werkzeug besondere Vorsicht geboten 5 4 Der grafische Editor Der grafische Editor Abbildung 5 2 dient dem Editieren eines Statecharts Er ist un terteilt in Werkzeugleiste Zeichenfl che und Eigenschaftsleiste welche wir im folgen den beschreiben Die Eigenschaftsleiste und die Werkzeugleiste k nnen innerhalb der grafischen Ansicht an allen R ndern positioniert werden Sie k nnen auch vom Fenster abgekoppelt in einem eigenen Fenster dargestellt werden 5 4 1 Zeichenfl che Bevor wir das Zeichenfenster erkl ren wollen wir hier erst kurz aufz hlen wie Ob jekte dargestellt werden Zust nde Der Kern der Statecharts sind wohl die Zust nde die wir in drei Typen in unserem Programm unterst tzen atomare AND und OR Zust nde Sie werden in der Zeichen fl che als Rechtecke mit a
360. rdinaten relativ zur linken oberen Ecke befindet Bei der Suche wird bis in die angegebene Tiefe weitergegangen Eine Tiefe von 0 hei t dass nur dieser Zustand betrachtet werden soll Gibt einen Null zur ck wenn kein entsprechendes Objekt gefunden wird getPointAt double double GrafPunkt Gibt den Punkt zur ck der sich an dieser Stelle befindet getPointOrPartitionAt double double gt GrafPunkt Gibt den Punkt oder die Partition zur ck die sich an dieser Stelle befindet getSuperOf double double double double gt GrafPunkt Gibt den direkten Oberzustand zur ck zu dem dieses Rechteck geh ren w rde sprich diesen Zustand wenn das Rechteck ganz drin liegt Es wird davon ausgegangen dass der erste Punkt die linke obere Ecke und der zweite die rechte untere darstellt makeRelativeToSuper double double GrafZustand gt Point2D Double Kapitel D Programmdokumentation Package score GrafSCM Gibt einen Punkt zur ck der die bergebenen Koordinaten f r den bergebenen Zustand passend macht Gibt false zur ck wenn ein Fehler auftritt zum Beispiel der angegebene Zustand kein Oberzustand dieses Zustands ist makeLocalFromSuper double double GrafZustand Point2D Double Gibt einen Punkt zur ck der die bergebenen Koordinaten des bergebenen Zustands f r diesen Zustand lokalizisert Gibt false zur ck wenn ein Fehler auftritt zum Beispiel der angegebene Zustand kein Oberzustand dieses Zustands ist mak
361. rdnet wird k nnen eng miteinander verbundene Teile zu eigenst ndigen Modulen zusammenge fasst werden Dieses Modell erm glicht es das Verhalten eines Systems bei dem einzelne Teile mehrfach auftreten k nnen komfortabel zu modellieren Dies kann beispielsweise bei einem Statechart f r eine Datenbank auftreten zu der mehrere Benutzer ber identi sche Schnittstellen gleichzeitig Zugriff haben sollen Im Statechart sollte diese Schnitt stelle nur ein einziges Mal modelliert werden im ausf hrbaren Quelltext muss dieser Ausschnitt des Statecharts aber beliebig h ufig nebeneinander existieren k nnen In anderen Worten muss dieser Ausschnitt mehrfach instanziiert werden k nnen Harel nennt dieses Verfahren AND Parametrisierung Beschr nkt man sich darauf lediglich einen Statechart Editor zu verwenden ist diese Aufgabenstellung mit einigen Problemen verbunden Es stellen sich beispiels weise die Fragen wie weit Ereignisse sichtbar sind die in einem der mehrfach in stanziierten Teile auftreten und wie die Ereignisse einer Instanz von denen anderer Instanzen unterschieden werden k nnen Zun chst ist auch nicht offensichtlich auf welche Instanz sich etwa eine Bedingung in einem bergeordneten Zustand beziehen soll Au erdem m ssen einzelne Instanzen beendet werden k nnen ohne dass dies zu Unstimmigkeiten im Programmablauf f hrt Werden auch Module des Programms modelliert stellen sich diese Fragen nicht da jedes Modul im
362. re ausgehende Verbindungen haben darf maybeArrowSource gt boolean berschreibt die Methode der Klasse GrafTyp Gibt zur ck ob dieser Hook mehrere ausgehende Verbindungen haben darf maybeArrowTarget boolean berschreibt die Methode der Klasse GrafTyp Gibt zur ck ob dieser Hook mehrere eingehende Verbindungen haben darf getObjectAt double double double GrafTyp Gibt das Objekt an den bergebenen Koordinaten des Oberzustands zur ck d h diesen Hook wenn er sich nah genug daran befindet makeDouble void F gt einen neuen Knoten neben diesem Knoten ein Bei Mittelpunkten wird dieser Knoten durch zwei benachbarte ersetzt addLabel void F gt zu diesem Hook den Text hinzu der das Label des zugeh rigen Pfeils ist removeText GrafText void berschreibt die Methode der Klasse GrafTyp Entfernt den angegebenen Text von diesem Hook der zugeh rige Pfeil hat dann auch kein Label mehr getPosOfNeighbours GrafModellSicht Vector Gibt die Zeichenkoordinaten aller benachbarten Hooks zur ck getDrawCoords GrafModellSicht Point2D Double Gibt die Zeichenkoordinaten dieses Hooks zur ck Kann Null sein wenn sich dieser Hook nicht innerhalb des Oberzustands der bergebenen Sicht befindet getOuterDrawCoords GrafModellSicht Point2D Double Gibt die Koordinaten dieses Hooks zur ck bez glich des angegebenen Views in dem dieser Hook eigentlich nicht mehr sichtbar ist da er nicht
363. ressed MouseEvent void berschreibt die Methode der Klasse MouseAdapter Implementation f r MouseListener D 6 3 Klasse DIgKompsSelektor extends score util Observable implements java awt event ActionListener Javax swing event ListSelectionListener Stellt eine Auswahlbox in der alle Dialogkomponenten oder nur Dialogkomponenten eines Typs dargestellt oder ausgew hlt werden k nnen Attribute frame JFrame Referenz auf den Frame in dem der Selektor dargestellt wird Konstruktoren DigKompSelektor JFrame LogDModell int Konstruktor DigKompSelektor JFrame LogDModell Konstruktor Methoden makePanel JPanel Erzeugt das Panel des Selektors actionPerformed ActionEvent void Auf ButtonEvents reagieren valueChanged ListSelectionEvent void Wenn sich die ListenSelektion ge ndert hat die Buttons updaten setValue DigKomponente void Die DlgKomponente value in der Liste markieren D 7 Package score doclet D 7 1 Klassenhierarchie Java lang Object gt com sun javadoc Doclet gt score doclet LaTeXDoclet Kapitel D Programmdokumentation Package score doclet D 7 2 Klasse LaTeXDoclet extends com sun javadoc Doclet Ein Doclet f r die LaTeX Ausgabe Formatiert die von JavaDoc eingelesenen Daten und gibt sie als LaTeX Quelltext an die Standardausgabe weiter Attribute nl String CONST Portabler NewLine String allPrivates boolean true falls auch u
364. rft eine Aktion wenn er gedr ckt wurde ein Timer wenn die Zeit abgelaufen ist etc Zust nde werfen je eine Aktion beim Betreten und beim Verlassen berg nge werfen eine Aktion wenn der bergang ausgef hrt wird 6ygl Abschnitt 2 5 2 Kapitel 4 Die implementierte Fassung Die Grundelemente Mit Aktion meinen wir in diesem Zusammenhang eine komplexe Aktion also eine Menge der oben aufgez hlten Basisaktionen Diese Aktionsmenge kann gegebe nenfalls auch die leere Menge sein Es gibt keine Priorit t bei der Ausf hrung der Aktionen Theoretisch sollen sie gleichzeitig ausgef hrt werden was jedoch technisch nicht m glich ist So werden sie in einer zuf lligen Reihenfolge ausgef hrt es wird also keine Reihenfolge definiert Sie werden jedoch alle innerhalb eines Zeitschrittes ausgef hrt Konflikte m ssen in der Konstruktion vermieden werden Beispiel Die zwei Aktionen erh he Variable A um 2 und setze Variable A auf 3 Werden im gleichen Zeitschritt ausgef hrt A hatte bisher den Wert O Im n chsten Zeitschritt kann A den Wert 5 oder 3 haben Die Bedingungen In unserer Beschreibung von Bedingungen wollen wir eine m glichst m chtige Aus drucksweise implementieren Wir beschreiben Bedingungen auch in unserer Imple mentation als aussagenlogische Ausdr cke welche also Wahrheitswerte mit und oder und nicht verkn pfen und die Auswertungsreihenfolge durch Klammerung beeinflus sen Die aussagenlogischen Variablen
365. rgleichswert CompVarBed String double int Erschafft eine neue Bedingung die sich auf die Variable mit dem bergebenen Namen bezieht mit dem entsprechenden Operator und Vergleichswert Methoden comparesToVariable boolean Setzt diese Bedingung auf den Vergleich einer Variablen mit einer Variablen Dies geht nur bei einer Bedingung die einen String als zweites Argument bergeben bekam ansonsten wird false zur ckgegeben Der bergebene Vergleichsstring wird bei g ltigem Aufruf nun als Variablenname verwendet Es ist damit allerdings nicht sichergestellt dass diese Variable existiert tut sie dies nicht ergibt jeder Vergleich false getCheckedVars Vector void 200 Kapitel D Programmdokumentation Package score Bedingungen berschreibt die Methode der Klasse Bedingung Sammelt alle berpr ften Variablen im bergebenen Vector translate Hashtable Bedingung berschreibt die Methode der Klasse Bedingung Gibt eine bersetzung dieser Bedingung zur ck isTrue boolean berschreibt die Methode der Klasse Bedingung Gibt zur ck ob die Vergleichsbedingung erf llt ist save EasyFileWriter gt void berschreibt die Methode der Klasse BedAtomar Speichert die Bedingung im EasyFileWriter exportAtom EasyFileWriter gt void berschreibt die Methode der Klasse BedAtomar Exportiert den Quelltext f r diese atomare Bedingung in den EasyFileWriter D 4 10 Klasse ExportBedin
366. rm keine Gr e akzeptiert wird movePointintoThis GrafPunkt double double boolean Bewegt den angegebenen Punkt in diesen Zustand hinein Muss entsprechend implementiert wer den da in der uniiberschriebenen Form kein Punkt akzeptiert wird conflictsWith double double double double boolean Gibt true zuriick falls das in Koordinaten relativ zur linken oberen Ecke angegebene Rechteck diesen Zustand schneidet Wenn eines der beiden Rechtecke im anderen liegt wird false kein Konflikt zur ckgegeben isWithin double double double double boolean Gibt zur ck ob sich dieser Punkt im angegebenen Rechteck befindet das in Koordinaten dieses Punktes angegeben wird draw int Painter Point2D Double GrafModellSicht gt void Zeichnet den grafischen Punkt der angegebene Offset gibt die Position der linken oberen Ecke direkt an Muss entsprechend implementiert werden drawArrows Painter GrafModellSicht void Zeichnet die Pfeiles die bei diesem Punkt beginnen oder enden drawArrowsCrossing Painter GrafModellSicht GrafPunkt void Zeichnet die Pfeile dieses Punktes die den bergebenen Punkt verlassen oder betreten getArrowsCrossing GrafPunkt Vector Gibt einen Vector aller Pfeile zur ck die den bergebenen Punkt verlassen oder betreten getPartitioners double double Point2D Double Partitioner 237 Package score GrafSCM Kapitel D Programmdokumentation 238 Gibt
367. rts actionPerformed ActionEvent gt void 209 Package score control Kapitel D Programmdokumentation 210 Funktion zum Event Handling implementiert f r ActionListener Parameter e Der bergebene Event initMenuBar gt void R ckgabewert Die erstellte MenuBar Erstellt die MenuBar commit void Best tigt einen Undo Vorgang prepare void Bereitet einen Undo Vorgang vor isPrepared gt boolean Ist ein Undo Vorgang vorbereitet undo gt void Fiihrt ein Undo durch clearForUndo gt void Bereitet die Modelle f r ein Undo vor finishUndo void Beendet einen Undo Vorgang initAll void Initialisiert das ganze System enableToolbars boolean void Enabled die Toolbars aller Editoren windowClosing WindowEvent void Lenkt auf die Methode quit um D 5 11 Klasse Parser extends score control AbstractParser Parser f r die SC Kommandos Konstruktoren Parser File Logger Commander JProgressBar Erzeugt einen neuen Parser mit Progressbar Parser File Logger Commander Erzeugt einen neuen Parser parse int berschreibt die Methode der Klasse AbstractParser Startet den Parse Vorgang parseCommand String boolean int parsed ein Commando command Wenn printSummary true ist gibt er auf dem Logger eine Zu sammenfassung aus Kapitel D Programmdokumentation Package score control D 5 12 Klasse Property
368. rts ableiten zu k nnen Die Teemaschine besitzt zwei Kontrollelemente n mlich einen Ein Ausschalter und einen Drehknopf an dem eingestellt werden kann wie lange der Tee ziehen soll Au erdem gibt es mehrere Beh lter in denen sich das Wasser zu unterschiedlichen Zeitpunkten der Teezubereitung befindet Anfangs wird es in einen Wassertank ein gef llt in dem es erhitzt wird Ist dies geschehen flie t das Wasser in den Ziehbeh lter in den vorher bereits Tee eingef llt wurde In diesem Moment wird eine Uhr gestartet um die eingestellte Ziehzeit zu messen Am Ende dieser Zeitdauer wird das Wasser in die Teekanne geleitet und der Tee ist fertig A 1 2 Elemente des Dialogs Um die Teemaschine durch SCed simulieren zu k nnen m ssen die Zugriffsm glich keiten durch Dialogelemente beschrieben werden Dies wird durch die folgenden Ele mente realisiert siehe Abbildung A 2 Strom eingeschaltet Diese Checkbox gibt an wie der Ein Ausschalter momentan steht Ziehzeit In diesem Textfeld kann die Zeit eingegeben werden die der Tee ziehen soll Dieses Dialogelement entspricht dem Drehregler der echten Teemaschine 155 Die Teemaschine Kapitel A Beispiele 156 Abbildung A 1 Die Teemaschine die simuliert wird Ziehzeittimer Die Stoppuhr f r die Ziehzeit erscheint nur w hrend der Simulation im exportierten Quelltext wird die Zeit nur intern gemessen Wasser einf llen Durch bet tigen dieses Knopfes wird der Wassertank
369. rweitern den logischen Punkt entsprechend Sie unterscheiden sich von den Zust nden darin dass sie nicht aktiviert werden k nnen und deshalb auch keine Aktionen enthalten KonDefault Diese Klasse ist lediglich w hrend der Konstruktion des Statecharts als logisches Gegenst ck zum grafischen Defaulteinstiegs Konnektor notwendig F r die Simulation wird stattdessen der entsprechende Unterzustand eines je den OR Zustands als Defaulteinstieg markiert LogPfeil Die abstrakte Klasse LogPfeil wird von den drei spezialisierten Pfeiltypen erweitert Dementsprechend sind Anfangs und Endpunkte des bergangs auch erstin den Unterklassen enthalten Allen gemeinsam sind jedoch ein ausl sendes Ereignis eine Bedingung und eine Aktion diese sind daher bereits in LogPfeil enthalten LogPfeil_1_1 LogPfeil_1_N LogPfeil_N_1 Je nach Typ des bergangs enthalten die se Klassen einen einzelnen LogPunkt oder einen Vektor von LogPunkten als Anfangs und Endpunkte 6 2 3 Das Grafische Statechart Modell Die Klassen des Logischen Statechart Modells haben alle eine Entsprechung im gra fischen Modell allerdings werden dabei mehrere logische Klassen in einer grafischen Klasse zusammengefasst So gibt es im GrafSCM keine eigene Klasse f r OR Zust nde diese finden sich zusammen mit den atomaren Zust nden in der Klasse GrafZustand Die Klasse f r AND Zust nde wird im GrafSCM von diesem gemeinsamen Zustand abgeleitet und lediglich um die Information ber
370. ry Einstieg benutzt wurde in jeder Ebene der Hierarchie durch die History der Zust nde Bei AND Zust nden wird dieses Aktivieren in jeder Partition durchgef hrt Dabei wird in der Zustandshierarchie solange hinabgestiegen bis ein atomarer Zustand angetroffen wird Von diesem atomaren Zustand aus werden nun alle Oberzust nde aktiviert bis ein bereits aktivierter Oberzustand angetroffen wird Aktionen die bei diesem Akti vieren ausgel st werden werden w hrend dieses Aufsteigens in der Hierarchie zentral gespeichert und sp ter vom Simulator bernommen Problematisch sind berg nge die in mehreren Partitionen eines AND Zustands enden Da die berg nge vom Simulator und nicht im Simulationsmodell verwaltet werden wird dem Modell f r jeden Endzustand separat mitgeteilt dass dieser aktiviert werden muss Dabei d rfen in den anderen Partitionen selbstverst ndlich nicht auto matisch die Default Einstiege aktiviert werden Andererseits wird von der Syntax der Statecharts nicht verlangt dass in diesen F llen in jeder Partition ein Endzustand des bergangs liegen muss Daher kann es vorkommen dass nach Aktivieren aller End zust nde einige Partitionen immer noch nicht aktiv sind Um dies zu verhindern wer den die AND Zust nde nach Durchf hren aller berg nge nachgef hrt Das hei t es wird bei allen AND Zust nden die in diesem Zeitschritt aktiviert wurden berpr ft ob alle Partitionen aktiviert sind Partitionen b
371. s yeo z 1 6 Ha Uo i l 1 7 o z Uoi i 0 Definition Fixpunktfreiheit der transitiven H lle Es gilt 1 8 VzeZ zgo z Beweis der Fixpunktfreiheit von 1 9 1 8 gt 1 3 ot z n Def 1 6 U o z i 1 o z U U o z i 2 Es ist also o z C otz Damit folgt aus z ot z gt z 0 2 O Korollar Direktheit Es gilt 1 10 VEZ x 0 2 gt x 0 z oder in einer anderen Formulierung 1 11 WEZ xE0 gt 1xg 0 z f a i gt 1 Das hei t dass ein Zustand x der in einer Tiefe von zwei unter z liegt nicht auch direkter Nachfolger von z sein kann 21 Formale Definition Kapitel 1 Definition von Statecharts 22 Beweis der Direktheit Annahme 3x 2 Z x 0 2 Ax 0 2 Mit x 0 z gilt also 3y 0 2 x O y Nach Annahme ist auch x o z Aus x G y und x o z folgt dann mit 1 2 dass y z Da y o z war hei t das z 0 z Dies steht aber im Widerspruch zu 1 3 O Der Beweis der anderen Formulierung verl uft hnlich Korollar Symmetriefreiheit von Aus 1 8 folgt direkt 1 12 Vy 2EZ y E 0 2 gt 2 E oly 1 13 bzw Yz Z z 0 2 Definition Tiefe Die Tiefe eines Zustands z ist definiert durch 0 wenn AyEZ z G6 y 1 14 depth z f maxfie N dy Z z c y sonst Ein Zustand z mit depth z 0 hei t Zustand auf oberster Ebene oder Wurzelzustand Der Wurzelzustand ist eindeut
372. s aus mehreren Unterzust nden besteht von denen immer genau ein einziger ak tiviert ist wenn der Oberzustand aktiviert ist Durch die Zuordnung der Zust nde zu Oberzust nden entsteht eine neue Struktur die generell mit dem Begriff der Zustandshierarchie bezeichnet wird Ein Unterschied zwischen atomaren und zusammengesetzten Zust nden ist der dass der zusammengesetzte Oberzustand nicht direkt durch eine Verbindung erreich bar zu sein braucht Der Zustand wird auch dann aktiviert wenn ein Unterzustand betreten wird Bei OR Zust nden ist dies unproblematisch da ja der zu aktivierende Unterzustand direkt angegeben ist bei AND Zust nden kann es vorkommen dass bei dem bergang eine oder mehrere der orthogonalen Komponenten nicht an dem ber gang teilhaben aber selbstverst ndlich dennoch aktiviert werden m ssen F r diesen Fall und f r den Fall dass ein OR Zustand direkt aktiviert wird ist bei diesen blicherweise einer ihrer Unterzust nde als Defaulteinstieg markiert Wird der OR Zustand aktiviert ohne dass ein spezieller Unterzustand betreten wird so wird auch der so markierte Unterzustand aktiviert Dies wird durch die Hierarchie von Zust nden so lange fortgesetzt bis ein atomarer Zustand erreicht ist Alternativ kann der bergang oder der Defaulteinstieg auch auf einen Historykonnektor f hren 2 2 3 Parametrisierte Zust nde Beim Modellieren von interaktiven Systemen kommt es gelegentlich vor dass Zust
373. s ausgel st werden ver ndert werden Das Popup Men f r Partitionsgrenzen Bei Partitionsgrenzen besteht das Men nur aus einem einzigen Eintrag Delete Partitions Hiermit werden s mtliche Partitionsgrenzen eines AND Zustands gel scht Der Zustand wird dadurch wieder zu einem OR Zustand Transitionen Transitionen zwischen verschiedenen Zust nden werden durch Kantenz ge von Strecken dargestellt An jedem Schnittpunkt zwischen zwei Strecken und dem Anfangs und Endpunkt wird ein Anfasshaken oder Hook ein kleines Quadrat dar gestellt Mit diesen kann die Position der Verbindungspunkte bestimmt werden Der Kantenzug hat eine Richtung die durch eine Pfeilspitze dargestellt wird Es k nnen beliebig viele Hooks in eine Transition eingef gt werden so dass deren Verlauf frei modelliert werden kann Die Hooks dienen auch dazu die Kante zu markieren Abbil dung 5 8 zeigt einige Beispiele 113 Der grafische Editor Kapitel 5 Benutzerhandbuch 114 gl Pfeil qjeflexiver Pfeil Abbildung 5 8 Verschiedene Transitionen in der Ansicht Das Popup Men f r berg nge Genaugenommen k nnen Pfeile nicht direkt an geklickt werden deshalb gibt es auch kein Popup Men f r sie Stattdessen gibt es ein Popup Men f r die Hooks das die folgenden Eintr ge enth lt Arrow Properties ffnet einen neuen Inspektor der sich nur auf diesen Pfeil bezieht Label Arrow F gt zu dem Hook einen Text hinzu der sich auf den zugeh
374. s erste Stufe der Simulation empfehlenswert wenn das Statechart auf seine Funktionsweise gepr ft werden soll Sie ist allerdings durchaus sinnvoll wenn Unter schiede zwischen Konzept und Ausf hrung des Statecharts auftreten und festgestellt werden soll ob diese m glicherweise darauf beruhen dass einzelne Vorg nge inner halb eines bergangs in der falschen Reihenfolge abgearbeitet werden Auch bei der Analyse von Races kann eine solche Simulation hilfreich sein Die n chste Stufe besteht darin einen einzelnen bergang auszuf hren Damit kann schrittweise berpr ft werden ob das Statechart so reagiert wie es vom Architek ten vorgesehen wurde Es kommt nun darauf an ob ein synchrones oder asynchrones Zeitmodell zugrunde gelegt wurde Beim synchronen Modell entspricht ein solcher bergang genau einer Zeiteinheit Beim asynchronen Modell ist es naheliegend die Simulation zus tzlich auch in Zeiteinheiten fortschreiten zu lassen wobei dann ge gebenenfalls mehrere berg nge des Statecharts hintereinander ausgef hrt werden bis die Kontrolle an den Benutzer zur ckgegeben wird Eine solche zeitschrittweise Ausf hrung der Simulation d rfte f r die Analyse des Statecharts am besten geeignet sein Letztendlich gibt es nat rlich auch die M glichkeit die Simulation ununterbro chen laufen zu lassen dies entspricht am ehesten dem erzeugten Programm Wenn keine Eingaben des Benutzers vorliegen und keine berg nge stattfinden so blei
375. s lassen sich zwei externe Ereignisse die entgegengesetzten Vorg ngen ent sprechen wie etwa das Ein und Ausschalten eines Systems mittels einer Checkbox zusammenfassen und bersichtlicher verwalten Eine andere denkbare Form der Behandlung von externen Bedingungen w re es vom Benutzer durch eine Ja Nein Anfrage den Wahrheitswert einer Bedingung zu er fragen wenn dieser ben tigt wird Hierbei ist es nicht notwendigerweise von Vorteil dem Benutzer den Wahrheitswert bei der letzten Anfrage als Default Wert vorzuschla gen da diese Anfrage gegebenenfalls recht lange zur ckliegen kann Es ist jedoch wichtig dass bei dieser Methode ein intelligenter Algorithmus verwendet wird da mit der Benutzer nicht durch unz hlige berfl ssige Anfragen bel stigt wird Bei ei ner Bedingung der Art extern irgendwas und in A beispielsweise sollte der Benutzer nicht ununterbrochen den Wahrheitswert der externen Bedingung eingeben m ssen solange die interne Bedingung in A nicht erf llt ist Die Notwendigkeit der Nachfrage ist jedoch auch bei komplexeren Bedingungen mit etwas Aufwand feststellbar Aktionen Aktionen werden vom System erzeugt und ausgef hrt hnlich wie Er eignisse sind sie nur kurzzeitig zu sehen nur geht die Infomation hierbei in die entgegengesetzte Richtung vom Statechart zum Benutzer Das hierf r bei der Simu lation geeignetste Dialogelement sofern man es als Dialogelement bezeichnen will ist ein Fenster mit ein
376. satz her haben wir den Quelltextexport der art gestaltet dass jede Komponente ihren Code in eine Datei schreiben kann Da bei erzeugt beispielsweise die Dialogkomponente Button den Code der zum er zeugen eines javax swing JButton n tig ist Die erzeugten Aktionen werden durch Java awt event ActionListener empfangen Das Statechart selbst erzeugt ebenfalls sei nen Aufbau innerhalb einer Datei und eine modifizierte Simulations Klasse erzeugt eine analoges Modell Letztendlich konnten wir so prinzipiell die gleichen Klassen benutzen wie sie auch zur Simulation verwendet werden Der Aufbau im berblick zeigt Abbildung 6 10 149 Das Kommandointerface Laden und Speichern Kapitel 6 Funktionsweise der Module 150 Me Men ee Mn o rn a Loa 1 SCRun ActionListener ConditionAskable VarServer ho sn A NN AO do o TREE StateChart AktKomplex Bedingung A A A Export ExportAktion ExportBedingung Variable A i Generierte Klassen ExportAkt ExportBed ExportVariable Abbildung 6 10 Hierarchie des Quelltextexports 6 8 Das Kommandointerface Laden und Speichern Wir haben das Programm mit einem Kommandointerface ausgestattet so dass der Be nutzer die M glichkeit hat die meisten Editiervorg nge durch Textkommandos ein zugeben Der Vorteil dieser einheitlichen Schnittstelle f r alle Funkt
377. sbesondere w re es dadurch m glich einen Zustand w hrend eines bergangs mehrfach zu verlassen und wieder zu betreten Dies ist je doch nur dann sinnvoll wenn man ein kontinuierliches Zeitmodell zugrunde legt da ansonsten die Ereignisse ohnehin nur im n chsten Zeitschritt sichtbar sind und es hier bei keinen Unterschied macht ob ein Ereignis einmal oder mehrfach aufgetreten ist Er regt weiterhin an dass man es Verbindungen erm glichen k nnte grafische Grenzen eines Zustands die berschritten werden m ssen um den geplanten Weg der Verbindung einzuzeichnen zu ignorieren Dies f hrt jedoch wieder auf Zust nde deren Aktivierung oder Deaktivierung von ihren Oberzust nden unabh ngig ist wie sie bereits in Abschnitt 2 2 4 angesprochen wurden In Har87b schl gt er vor stochastischen Nichtdeterminismus in die Statecharts einzubauen indem etwa Wahrscheinlichkeiten f r verschiedene berg nge angegeben werden Diese Erweiterung nennt er Markov Charts da sie Markov Ketten in hnlicher Weise verallgemeinern wie Statecharts die Zustands bergangs Diagramme Es wird jedoch in der Literatur nicht weiter darauf eingegangen da die modellierten Systeme meist deterministisch bleiben sollen 2 5 Ereignisse Mit Ereignissen sind Signale gemeint die gesetzt werden um das System zu beeinflus sen Diese Einflussnahme geschieht dadurch dass durch die aufgetretenen Ereignisse berg nge ausgel st werden k nnen Je nach Herkunft sind
378. schreibt die Methode der Klasse GrafTyp Gibt an wie tief dieser Punkt unter dem angegebenen Zustand liegt Eine Tiefe von 0 hei t dass es sich um diesen Punkt selbst handelt Wird der Oberzustand nicht gefunden bis kein weiterer Oberzustand angegeben ist wird 1 zur ckgegeben probeDepth gt int Gibt die Tiefe zur ck die Zust nde unterhalb dieses Zustands haben Eine Tiefe von 0 gibt an dass es unter diesem Zustand keine weiteren gibt getLocalOffset double double int Point2D Double Gibt den Offset zur ck den diese Koordinaten innerhalb dieses Punktes haben wenn sie innerhalb dieses Punktes liegen getLocalAlignment double double int int Gibt den entsprechenden Wert aus javax swing SwingConstants zur ck NORTH NOR HT_EAST EAST und CENTER Als illegaler Wert wenn die bergebeben Koordinaten nicht in diesem Punkt liegen wird SwingConstants TRAILING definiert Wie gro der Anteil des Punktes ist der zum Rand geh rt wird in der Klassenkonstante sect festgelegt getPosAtBorder Point2D Double Point2D Double Gibt die orthogonale Projektion des bergebenen Punktes auf den Rand dieses Punktes zur ck Als Bereich wird hierf r der Wert von getLocalAlignment benutzt putOntoRim Point2D Double Point2D Double Point2D Double Gibt die Projektion des ersten Punktes in Richtung des zweiten Punktes auf den Rand dieses grafsichen Punktes zur ck calcLocAlign double double int Berechnet d
379. schreibung kann man zwar zugute halten dass sie auch von Laien verstanden werden kann doch sind insbesondere der Umfang und die Tendenz zur Unvollst ndigkeit Argumente die Statecharts als die bessere Alternative bekr ftigen Durch diese deutlichen Vorteile ist es nicht verwunderlich dass Statecharts zu nehmend Beachtung finden Es wurden zahlreiche Arbeiten ver ffentlicht die sich mit dem Thema besch ftigen und verschiedene Varianten vorschlagen sowohl in Um fang und Aussehen der grafischen Darstellung als auch in der Bedeutung der ein zelnen Elemente So hat Harel selbst einige von seiner ersten Fassung abweichende Versionen beschrieben und auch in die Unified Modelling Language UML fanden Statecharts Eingang Dar ber hinaus wurden auch Werkzeuge entwickelt die das Ar beiten mit Statecharts erleichtern Von diesen sollte insbesondere das Programm State mate erw hnt werden das unter anderem von David Harel selbst mitentwickelt wurde F r genauere Details dieser Varianten sei hier jedoch zun chst auf Kapitel 2 ver wiesen 2vgl Hor99a S 37 55 3vgl Hor99a S 71 vgl Hor99a S 54 ff Teil Diskussion der Statecharts vom theoretischen Standpunkt Let there be light Genesis 1 3 Kapitel 1 Definition von Statecharts Im Folgenden wollen wir eine Definition von Statecharts als Grundlage f r die nach folgende Diskussion erstellen Wir beziehen uns dabei im Wesentlichen auf Har88 Da in der Lite
380. score GrafSCM Erneuert die Darstellung dieser Sicht refreshModell void Ruft die Methode refresh des Modells auf save EasyFileWriter gt void Speichert diese Sicht zu ihrem Zustand im EasyFileWriter D 9 8 Klasse GrafModellSicht visHook extends java lang Object Diese interne Klasse steht f r einen Hook der gezeichnet wurde Unabh ngig von seiner Lage in der Hierarchie kann damit einfach getestet werden ob die Maus gerade auf ihn zeigt Attribute point Point2D Double die Zeichenkoordinaten des Hook hook GrafHook der gezeichnete Hook Konstruktoren GrafModellSicht visHook GrafModellSicht Point2D Double GrafHook Erschafft ein neues Paar von Hook und Zeichenpunkt D 9 9 Klasse GrafModellSicht visText extends java lang Object Diese interne Klasse steht f r einen Text der gezeichnet wurde Unabh ngig von seiner Lage in der Hierarchie kann damit einfach getestet werden ob die Maus gerade auf ihn zeigt Attribute point Point2D Double die Zeichenkoordinaten des Textes text GrafText der gezeichnete Text Konstruktoren GrafModellSicht visText GrafModellSicht Point2D Double GrafText Erschafft ein neues Paar von Text und Zeichenpunkt D 9 10 Klasse GrafPfeil extends score GrafSCM GrafIyp implements score util Observer Diese Klasse beschreibt einen grafischen Pfeil Konstruktoren GrafPfeil GrafPunkt GrafPunkt Point2D Double Point2D Double Erzeugt einen ne
381. se gt void berschreibt die Methode der Klasse SCRun Eine Phase bearbeiten resetTime void berschreibt die Methode der Klasse SCRun Die Zeit auf O setzen incTime void berschreibt die Methode der Klasse SCRun Die Zeit erh hen startSimulation void berschreibt die Methode der Klasse SCRun Die Simulation starten stopSimulation void berschreibt die Methode der Klasse SCRun Die Simulation stoppen actionPerformed ActionEvent gt void Auf die ButtonEvents reagieren fetchDlgActions gt void berschreibt die Methode der Klasse SCRun Eine Dialogaktion holen update Observable Object void Aktion von Dialogkomponente bekommen getSimBasic int SimBasic berschreibt die Methode der Klasse SCRun ConditionAskable Interface getVariable String Variable VarServer Interface Kapitel D Programmdokumentation Package score Simulator D 15 5 Klasse SimVariable extends score Simulator Variable Diese Klasse implementiert eine Variable f r die Simulation Konstruktoren SimVariable String Konstruktor SimVariable String String Konstruktor SimVariable String int Konstruktor SimVariable String double Konstruktor Methoden checkDialogVar void berschreibt die Methode der Klasse Variable Pr ft ob dies eine Dialogvariable ist und holt von dort einen Wert D 15 6 Klasse SimWindow extends java lang Object implements sc
382. se erzeugen k nnen wie etwa eine Ja Nein Anfrage Hierbei l sst sich ein einziges Ereignis definieren Auswahl getrof fen und die Angabe um welche Eingabe es sich handelt wird dem Statechart in der Variablen der Dialogkomponente bergeben Obwohl nat rlich noch beliebig viele weitere Methoden denkbar sind d rften die meisten Dialogkomponenten durch eine derartige Schnittstelle zum Statechart in ausreichendem Umfang benutzbar sein 3 1 3 Der Programmstruktur Editor Gro e Systeme die ohne zu gro en Aufwand gepflegt werden sollen k nnen prak tisch nicht monolithisch sein sie m ssen aus Modulen und Untersystemen zusam mengesetzt werden Diese Struktur kann durch einen speziellen Editor parallel zu den Statecharts die ihr Verhalten beschreiben aufgebaut werden Ist nur ein Statechart vorhanden so kann diese Struktur daraus nicht abgelesen werden Es ist wohl nie sinnvoll jeden Zustand als eigenst ndiges Objekt anzusehen oder eine Methode mit zus tzlichem Parameter vom Typ boolean lOSeparate Fenster die ge ffnet werden um eine Meldung anzuzeigen Il ygl die Beschreibung der Radiobuttons im letzten Abschnitt 69 Grafische Editoren Kapitel 3 Werkzeuge f r Statecharts 70 aber eine andere Gliederung des Statecharts ist zun chst nicht m glich Um diese Un terteilung zus tzlich modellieren zu k nnen ist der Einsatz eines Programmstruktur Editors empfehlenswert Indem den Statecharts noch eine Ebene bergeo
383. se und Aktionen gilt ein solcher globaler Namens raum Das Binden dieser Objekte an einzelne Zust nde w rde zu Schwierigkeiten bei der Behandlung der berg nge f hren So stellt sich die Frage auf welchen Zustand sich die Angaben von Ereignissen und Aktionen eines bergangs beziehen Dadurch dass berg nge bei mehreren Zust nden beginnen und enden k nnen ist es nicht m glich die Start und Endzust nde hierf r zu benutzen Und obwohl es genau einen Zustand im Statechart gibt der als erster s mtliche Start und Endzust nde eines ber gangs enth lt Scope ist es auch nicht konsistent die Angaben auf diesen Zustand zu beziehen wie Abbildung 4 3 zeigt Hier gibt es einen Zustand der eine Fehlermeldung anzeigt der Text dieser Fehlermeldung wird in der Variablen ERROR gespeichert und auf diese Weise dem Zustand bergeben Offensichtlich ist es hier nicht sinnvoll diese Variable im Scope einer der beiden berg nge zu halten da eventuell noch weitere Verbindungen bei diesem Fehlerzustand enden wodurch die Variable in h herliegen de Zust nde der Hierarchie verlagert werden m sste Obwohl es in diesem Fall sch n Die globale Eindeutigkeit wird im Programm durch eine fortlaufende Nummerierung sichergestellt Es ist daher nicht notwendig dass der Benutzer sich f r jeden weiteren Zustand einen neuen Namen berlegt 95 96 Die Grundelemente Kapitel 4 Die implementierte Fassung w re die Textvariable im Fehlerzustand
384. selbst zu verwalten w rde dies zur bereits erw hnten Inkonsistenz bei der Verwaltung von 1 N Verbindungen f hren N A ERROR Fehlerl ERROR Fehler Fehler meldung y Abbildung 4 3 Inkonsistenz bei lokalem Namensraum f r Variablen Es ist also durchaus angebracht einen globalen Namensraum anzunehmen Dies wirft jedoch in Verbindung mit einer AND Parametrisierung erhebliche Probleme auf So m ssen die Zust nde Ereignisse und Aktionen einer bestimmten Instanz des para metrisierten Zustands zugeordnet werden k nnen um im Namensraum nicht zu Kon flikten zu f hren Insbesondere wenn man geschachtelte AND Parametrisierungen er laubt wird dadurch eine relativ aufwendige Kennzeichnung notwendig Au erdem stellt sich die Frage ob und wie auf die Unterzust nde eines mehr fach auftretenden Zustands zugegriffen beziehungsweise auf dort ausgel ste Ereignis se reagiert werden kann Prinzipiell sind diese ja wegen des globalen Namensraumes im gesamten Statechart sichtbar und k nnen etwa durch Bedingungen abgefragt wer den Da aber die Anzahl der Instanzen nicht notwendigerweise festgelegt ist kann keine bestimmte Instanz angesprochen werden Es kann sogar vorkommen dass keine einzige Instanz dieses Zustands existiert Hier w re etwa eine mehrwertie Logik not wendig um diesen Fall abzufangen Andererseits ist es auch nicht unproblematisch diese Anfragen mit Existenz oder Allquantor
385. ses Tests kann durch die Auswahl der Optionen angegeben wer den welche Eigenschaften des Statecharts untersucht werden sollen Es ist empfeh lenswert zun chst alle Punkte zu berpr fen und die Auswahl lediglich im weiteren Verlauf der Testphase einzuschr nken etwa um die Anzahl der Warnungen in einem berschaubaren Rahmen zu halten File Edit View Tools From Konnektor 2 To Konnektor 3 re Condition const TRUE 15 59 48 Verification started WARNING Partition has no default entry It may not lead to an exception thoug WARNING Partition has no default entry It may not lead to an exception thoug ERROR The global statechart has no default entry ERROR Transition crosses border of partitions ERROR Partition has no substates ERROR There is a connector loop ERROR State has no incoming transitions ERROR State has no incoming transitions WARNING Statechart no end states 15 59 48 There were 3 warnings 15 59 48 There were 6 errors A DEE Abbildung 5 20 Der Verifikator nach einem Durchlauf Der Test wird gestartet wenn der Verifikator im Menii aufgerufen wird In einem neuen Fenster gibt SCed dann Fehlermeldungen und Warnungen aus die in diesem Abschnitt genauer erl utert werden Siehe auch Abbildung 5 20 Wenn sich die Meldungen auf Zust nde Pfeile oder Dialogelemente beziehen so k nnen sie in diesem Fenster angeklickt werden woraufhin das oder die zugeh rigen Elemente des Statechar
386. sie schneidet eine Partitionsgrenze Semantisch w rde also der Zustand A deaktiviert und B aktiviert werden Dies bedeutet jedoch dass in der linken Partition berhaupt kein Zustand mehr aktiv ist Dieser Fall darf nach Definition der Statecharts nicht auftreten Hingegen ist die Transition unter dem Ereignis E2 korrekt Wird der Oberzustand verlassen und anschlie end wieder betreten so wird der Zustand B aktiviert Da der Oberzustand betreten wurde werden in allen Partitionen in denen kein Zustand akti viert wird die Defaulteinstiege benutzt Somit ist auch A aktiviert und keine Partition ohne aktiven Zustand 4Eine Diskussion ber eine andere Definition findet sich in Abschnitt 2 2 4 Kapitel 1 Definition von Statecharts E2 y Grafische Definition Abbildung 1 6 Fehlerhaftes Statechart da Partitionsgrenzen geschnitten werden Abbildung 1 7 Ein komplexer bergang 29 Grafische Definition Kapitel 1 Definition von Statecharts 1 3 3 Defaulteinstieg Defaulteinstiege werden durch einen gef llten Kreis dargestellt der genau eine ausge hende und keine eingehende Kante hat Das Ziel dieser Kante muss in derselben Par tition liegen wie der Defaulteinstieg selbst Siehe hierzu die Abbildungen 1 8 und 1 9 A Xx Abbildung 1 8 Korrekte Defaulteinstiege Abbildung 1 9 Fehlerhafte Defaulteinstiege 1 3 4 Historyeinstieg Der Historyeinstieg wird
387. sition als Trigger Man stellt ein Ereignis als Ausl ser ber das Kontextmen der Transition ein Wird kein Ereignis festgelegt so gilt das Ereignis als immer ausgel st Ssiehe Abschnitt 5 4 1 Ereignisse 121 Aktionen Kapitel 5 Benutzerhandbuch 5 8 Aktionen javal d setl a 1 throw BUTTONO pressed throw CHECKBOX2 pressed throw POPUP4 pressed throw RADIOBUTTON3 pressed throw TEXTFIELD1 changed throw TIMERS timeout New Cancel Abbildung 5 15 Die Aktionsliste Fast alle Objekte k nnen Aktionen ausl sen So l st zum Beispiel jede Dialog komponente Aktionen aus Zust nde l sen beim Betreten und Verlassen Aktionen aus und Transitionen wenn sie durchgef hrt werden Diese k nnen frei spezifiziert wer den Einen berblick ber die bereits definierten Aktionen liefert die Aktionsliste Ab bildung 5 15 Die folgenden Aktionen sind implementiert Java Action Dies ist eine frei in Java programmierbare Aktion Ihr Code wird in der Simulation nicht interpretiert jedoch im exportierten Programm In der Simula tion wird ein Popup ge ffnet welches anzeigt dass diese Aktion jetzt ausgef hrt worden w re Clear History Diese Aktion l scht im spezifizierten Zustand die History Deep Clear History Diese Aktion l scht im spezifizierten Zustand und allen darin liegenden Zust nden die History Throw Event Diese Aktion wirft das spezifizierte Ereignis
388. so welche Zust nde aktiviert sind sowie die auftretenden Ereignisse und Aktionen verwalten Dar ber hinaus muss er bei Zust nden bei denen der Einsteig ber einen Historykonnektor m glich ist auch speichern welche Unterzust nde zuletzt aktiv waren Und schlie lich muss er die simulierte Zeit mitz hlen um Timer und hliche Komponenten kor rekt nachvollziehen zu k nnen Die Art und Weise wie die Zeit dabei fortschreitet h ngt offensichtlich stark davon ab ob ein diskretes oder kontinuierliches Zeitmodell gew hlt wurde Zum Vergleich der Modelle siehe Abschnitt 2 8 Der Simulator kann mit dem Statechart Editor auf vielen Wegen zusammenar beiten Zun chst sollte nat rlich in der Ansicht des Editors dargestellt werden welche Zust nde gerade aktiv sind damit der Benutzer den Globalzustand des Systems ber blickt Dadurch sollten sich grundlegende Fehlkonzeptionen sehr schnell feststellen lassen Es ist au erdem sinnvoll s mtliche Ereignisse und Aktionen die auftreten be ziehungsweise ausgef hrt werden anzuzeigen da der Benutzer dadurch nicht nur den statischen Zustand des Systems erf hrt sondern auch dessen Dynamik nachvollziehen kann Das Testen eines Statecharts Gegen ber dem Verifikator bietet der Simulator die M glichkeit die Fragestellungen anzugehen die f r eine automatische berpr fung zu umfangreich sind Dazu geh rt etwa die in Abschnitt 3 2 1 diskutierte Frage ob das System durch die angegebenen Be
389. spiel skizziert die grundlegende Verhaltensweise eines einfachen Anrufbe antworters Um das Modell bersichtlich zu halten wurde auf die tats chliche Spei cherung von Ansagetexten und Nachrichten verzichtet Wenn der Anrufbeantworter eingeschaltet ist so wartet er zun chst auf einen neu en Anruf oder die Eingabe des Benutzers die bisher aufgezeichneten Nachrichten ab zuspielen oder zu l schen Bei einem eingehenden Anruf wird solange noch Speicherplatz frei ist zun chst eine Ansage abgespielt und dann eine Nachricht des Anrufers aufgenommen Ist der Speicher jedoch bereits voll wird lediglich eine Ansage abgespielt Jeder dieser Vorg nge kann entweder dadurch abgebrochen werden dass der Anrufer auflegt oder dass die Stop Taste des Anrufbeantworters gedr ckt wird Der Apparat geht dann wie der in den Wartezustand zur ck Sollen die aufgenommenen Nachrichten abgespielt werden so wird immer bei der ersten begonnen Das Abspielen der n chsten Nachricht wird begonnen wenn die vorhergende fertig abgespielt wurde oder der Abspielknopf des Anrufbeantworters erneut gedr ckt wird Das Bet tigen der Stop Taste setzt den Anrufbeantworter wieder in den Wartezustand zur ck Die aufgezeichneten Nachrichten k nnen durch Dr cken eines Knopfes gel scht werden 6Die Aktionen werden jeweils ausgef hrt wenn die Zust nde betreten werden aus Platzgr nden wur de hierbei auf die Kennzeichnung enter verzichtet Kapitel A Beispiele Ein
390. ss das Ereignis CALL ignoriert wird wenn entweder bereits ein Anruf bearbeitet wird oder die aufgezeichneten Nachrichten gerade abgespielt werden Da die ser Pfeil auf einem Universalkonnektor endet ist der bergang noch nicht ganz abgeschlossen f r Details der Verzweigung sei jedoch auf Abschnitt A 2 3 ver wiesen DELETE Wird im Zustand waiting der Knopf L schen gedr ckt so wird die ser bergang ausgef hrt der den Zustand waiting sofort wieder betritt Dieser Pfeil ist mit der Aktion set Anrufe 0 versehen wodurch die Anzahl der gespeicherten Nachrichten auf 0 gesetzt wird Beim Betreten von waiting wird der Wert des Textfeldes sofort aktualisiert PLAY Dieser bergang wird durch die Bedingung var Anrufe gt 1 geregelt Dadurch wird bei dem Ereignis PLAY nur dann mit dem Abspielen von Nach richten begonnen wenn vorher einige aufgenommen wurden STOP Da dieser Pfeil bei dem Oberzustand on beginnt wird er beim Dr cken des Knopfes Stop ausgef hrt unabh ngig davon in welchem Unterzustand sich das System gerade befindet H UP Dieser bergang beendet einen eingehenden Anruf Er wird entweder aus gef hrt wenn der Anrufer auflegt bevor die Aufnahme begonnen wurde oder wenn der Anrufer seine Nachricht vollst ndig aufgesprochen hat Zustand incoming calls Dieser Zustand entspricht der Bearbeitung eines eingehenden Anrufs Eine detaillierte Darstellung findet sich in Abbildung A 12 Betreten wird d
391. sse bzw Variablen ersetzt werden Die Ereignisse die sich auf Zust nde beziehen die kopiert wurden werden in der bersetzungstabelle automatisch mit den neuen Zust nden angegeben Die Namen der Zust nde werden unver ndert bernom men so dass eventuelle Umbenennungen von Hand durchzuf hren sind Die 117 Der Dialog Editor Kapitel 5 Benutzerhandbuch Eindeutigkeit von Abfragen die sich auf die Zust nde beziehen wird durch die intern verwalteten Identifier sichergestellt 5 4 3 Die Eigenschaftsleiste Ei azi di Grid vi Hooks IDs vi Labels 0 O Depth 4 ol Zoom 4 100 Abbildung 5 12 Die Eigenschaftsleiste Mit der Eigenschaftsleiste Abbildung 5 12 der grafischen Ansicht k nnen Sie einstellen wie Objekte dargestellt werden sollen Grid Soll das graue Gitter in der Zeichenfl che dargestellt werden Hooks Sollen die Hooks Anfasser an den Pfeilen dargestellt werden Achtung Wenn diese nicht dargestellt werden k nnen die Pfeile nicht direkt mit der Maus bearbeitet werden IDs Sollen die ID s an den Zust nden angezeigt werden Labels Sollen die Textfelder dargestellt werden Depth Die logische Tiefe der Darstellung Zoom Die optische Vergr erung der Darstellung in Prozent 5 5 Der Dialog Editor NewButton BUTTON O O TEXTFIELD 1 1 New Textfield CHECKBOX 2 2 NewCheckbax RADIOBUTTON 3 3 NewRadioButtan NewPapup New Timer sho
392. ssen VWindow VerifMesg Stellt das Fenster f r die Verifikatorausgabe dar Konstruktoren VWindow GrafSCModell Konstruktor Methoden addEntry String MarkableTyp void Einen neuen Eintrag ins Verifikatorlog addEntry String Vector void Einen neuen Eintrag ins Verifikatorlog addTitle String MarkableTyp gt void Einen Titeleintrag schreiben actionPerformed ActionEvent gt void Auf Dismiss reagieren schliessen valueChanged ListSelectionEvent void Auf Selektion in der Liste reagieren markieren D 17 6 Klasse VWindow VerifMesg extends java lang Object Diese innere Klasse enth lt einen String und entweder einen einzelnev MarkableTyp oder einen Vector von solchen Die Methode toString gibt nur den Text aus so dass dieser in Listen verwendet werden kann Konstruktoren VWindow VerifMesg VWindow String MarkableTyp Erzeugt eine neue VerifMesg mit dem bergebenen Text und einem einzelnen MarkableTyp VWindow VerifMesg VWindow String Vector Erzeugt eine neue VerifMesg mit dem bergebenen Text und dem Vector von MarkableTypen Methoden isSingle gt boolean Gibt an ob diese VerifMesg einen einzelnen MarkableTyp enth lt toString String berschreibt die Methode der Klasse Object Gibt den Text dieser VerifMesg zur ck Durch diese Methode kann die VerifMesg ordentlich in Listen ausgegeben werden getMarkableTyp MarkableTyp Gibt den MarkableTyp zur ck
393. st also Ax z 1 2 6 Die Historyfunktion h und die Menge der Historyeinstiege A Jedem komplexen Zustand z kann ein Historyeinstieg h H zugeordnet werden Wir bezeichnen den Historyeinstieg des Zustands z mit h Analog zu d ordnet die Hi storyfunktion h diesem Zustand z Z zu jedem Zeitpunkt N eine Menge von Einstiegszust nden y o z welche die letzten aktivierten Zust nde sind zu Es ist also eine Funktion definiert auf Z x N gt Z Der Funktionswert kann jedoch nicht im voraus spezifiziert werden da sich die Werte der Funktion w hrend der Laufzeit ergeben Siehe hierzu Abschnitt 1 4 ab Seite 31 F r die Zeit t 1 wird vereinbart 1 19 Vh eH hlz 1 d z 1 2 7 Die Menge der Ereignisse E Die Menge der m glichen Ereignisse ist E e n mit ng N ng gt 2nz Je zwei e E sind verschieden Kapitel 1 Definition von Statecharts Formale Definition Um die unterschiedlichen Ereignisse zu trennen partitionieren wir die Menge der Indizes 1 ng wie folgt e EA l nz f r die Ereignisse Zustand aktiviert e ED 4 nz 1 2nz f r die Ereignisse Zustand deaktiviert e EI 2nz 1 2nz ng f r weitere interne Ereignisse e EX 2nz ngr 1 2nz Ng negx f r externe Ereignisse Die Semantik der Ereignisse legen wir nun wie folgt fest e Fiir alle i EA ist e das Ereignis dass z aktiviert wurde e F ralleie ED ist e das Ereignis dass
394. st daher auch denkbar dass SEin Feld das entweder ausgew hlt oder nicht ausgew hlt ist 6Kn pfe von denen immer genau einer gedr ckt ist beim Dr cken eines nicht aktivierten Knopfes wird der bisher aktivierte deaktiviert 7Die Ereignisse an den Verbindungen wurden dabei nicht dargestellt 67 68 Grafische Editoren Kapitel 3 Werkzeuge f r Statecharts der Dialog diese Information nicht in das Statechart bertr gt sondern selbst verwal tet und auf entsprechende Anfragen antwortet Diese Variante widerspricht jedoch in einem gewissen Ma den Programmmodellen die eine strikte Trennung von Benut zerschnittstelle und Datenverwaltung fordern Dar berhinaus kann das Statechart dann nicht mehr getrennt vom Dialog betrachtet werden da die Kommunikation zwischen ihnen nicht nur aus Ereignissen besteht die vom Dialog ausgel st werden Zugriff auf Dialogkomponenten Aus der Erfahrung mit praktisch jedem Programm ist klar dass nicht zu jedem Zeit punkt alle Eingaben m glich sind In guten Benutzerschnittstellen wird dies dem Be nutzer dadurch angezeigt dass die Kn pfe und Felder die im Moment nicht akzeptiert werden deaktiviert beziehungsweise unsichtbar sind In der Sprache der Statecharts hei t dies beispielsweise dass jedem Zustand ein Vektor zugeordnet werden kann der angibt welche Dialogkomponenten sichtbar sind wenn der Zustand aktiviert ist und welche nicht Die bersichtlichste Weise diese Vektoren darzustelle
395. stand F gt eine Partition hinzu die bereits eine logische Entsprechung haben muss die ein OR Zustand ist Der neue Punkt hat bez glich dieses Zustands den angegebenen Offset Ist dieser Null wird false zur ckgegeben Der entsprechende Vorgang wird im logischen Modell wiederholt falls dieser Zustand eine logische Entsprechung hat die ein AND Zustand ist In diesem Fall wird der neue Unterpunkt zur ckgegeben ansonsten Null addSubRelative GrafPunkt GrafPunkt double double Unterpunkt berschreibt die Methode der Klasse GrafZustand F gt eine neue Partition hinzu wie addSubPoint allerdings ist der angegebene Offset in Koor dinaten des angegebenen Unterzustands Ist der bergebene Zustand kein direkter Unterzustand dieses Zustands wird Null zur ckgegeben removeSubPoint GrafPunkt gt void berschreibt die Methode der Klasse GrafZustand Entfernt eine Partition Im logischen Modell wird dieser Vorgang wiederholt getObjectAt double double int double GrafTyp berschreibt die Methode der Klasse GrafZustand Gibt den grafischen Punkt zur ck der sich an den angegebenen Koordinaten relativ zur linken oberen Ecke dieses Zustands befindet Bei der Suche wird bis in die angegebene Tiefe weiter gegangen Dieser Zustand selbst wird nicht zur ckgegeben sondern nur seine Partitionen Eine Tiefe von 0 hei t dass nur die Partitionen dieses Zustands betrachtet werden sollen aber nicht die Partitioner oder Pfe
396. stand einsortiert wobei die SuperList des Pfeils benutzt aber nicht ver ndert wird moveToNewAnchor Point2D Double GrafPunkt void Bewegt diesen Hook an die bergebene Stelle des neuen Ankers relocalize void Stellt sicher dass sich der Hook im richtigen Zustand befindet ohne ihn zu bewegen getAnchor gt GrafPunkt Gibt den Oberzustand dieses Hooks zur ck getAnchorAtPos gt GrafPunkt Gibt den Anker Point or Partition zur ck der sich an der Position dieses Hooks befindet isStart boolean Gibt zur ck ob dieser Hook ein Startpunkt ist isPlainMid boolean Package score GrafSCM 223 Package score GrafSCM Kapitel D Programmdokumentation 224 Gibt zur ck ob dieser Hook ein normaler mittlerer Hook ist isEnd boolean Gibt zur ck ob dieser Hook ein Endpunkt ist isConnectin gt boolean Gibt zur ck ob dieser Hook ein mittlerer Hook ist der mehrere eingehende Verbindungen hat isConnectOut boolean Gibt zur ck ob dieser Hook ein mittlerer Hook ist der mehrere ausgehende Verbindungen hat isConnect boolean Gibt zur ck ob dieser Hook ein erweiterter mittlerer Hook ist isMid boolean Gibt zur ck ob dieser Hook ein mittlerer Hook ist entweder normal oder erweitert mayBeConnectin gt boolean Gibt zuriick ob dieser Hook mehrere eingehende Verbindungen haben darf mayBeConnectOut gt boolean Gibt zuriick ob dieser Hook mehre
397. stehen und wo die Zwischenpunkte Hooks liegen Die Konstruktion dieser beiden Modelle ist in den Abbildungen 6 2 und 6 3 dargestellt vgl Seite 61 135 Die Datenstruktur des Statecharts Kapitel 6 Funktionsweise der Module Verifikator Aktionen SCEditor GrafSCM LogSCM Ereignisse Bedingungen I control AbstractModell SimSCM Simulator QTExport DEditor LogDM Abbildung 6 1 berblick ber die Pakete 136 Kapitel 6 Funktionsweise der Module Die Datenstruktur des Statecharts W hrend die Simulation l uft existiert noch ein weiteres Modell das Simula tionsmodell SimSCM Dieses Modell verwaltet die Information welche Zust nde momentan aktiv sind und aktiviert beziehungsweise deaktiviert die Ziel und Start zust nde von berg ngen sowie die daf r notwendigen Ober und Unterzust nde Auch im exportierten Quelltext wird prinzipiell das Simulationsmodell benutzt aller dings werden die berg nge aus dem logischen Modell bernommen Dieses Modell ist in Abbildung 6 4 dargestellt Abschnitt 6 5 besch ftigt sich mit einer detaillierten Beschreibung des Simulationsablaufes und der Zusammenarbei
398. t Default entry has no more than one outgoing arrow Ein Default Konnektor darf nur genau einen ausgehenden Pfeil besitzen Da diese Pfeile weder Ereignisse noch Bedingungen haben d rfen w re sonst nicht eindeutig welcher Zustand gemeint ist Default entry connector needs outgoing arrow of type 1 1 Wenn der Pfeil am Default Einstieg vom Typ 1 N oder N 1 ist wird diese Fehlermeldung ausgegeben Beide Typen sind nicht erlaubt Sollen durch den ausgehenden 1 N Pfeil mehrere Par titionen betreten werden so ist es besser jeder Partition einen eigenen Default Einstieg zuzuweisen Default entry connector needs outgoing arrow without event condition or action Ein Pfeil der von einem Default Einstieg ausgeht darf weder durch ein Ereignis noch eine Bedingung eingeschr nkt sein Au erdem darf sich an ihm keine Aktion befinden eine solche Aktion l sst sich stattdessen dem Zielzustand als Aktion beim Aktivieren zuordnen Default entry must mark a substate of its own containing state Der von einem Default Konnektor ausgehende Pfeil muss auf einem Zustand enden der direkt in dem Zustand liegt in dem auch der Default Konnektor liegt Es ist nicht m glich auf diese Weise mehrere Hierarchieebenen des Statecharts zu berqueren stattdessen sollte in jeder Ebene ein eigener Default Einstieg gesetzt werden History connectors History connector s outgoing arrows must not lead to this end state Pfeile die von einem History Konnektor ausge
399. t 2 wa 8 u Ran aeg 280 D 13 15 Klasse Scrolllanvas 283 D 13 16 Klasse TranslationWindow 283 D 14 Package score SimSCM o o oo e e 284 D 14 1 Klassenhierarchie 284 D 14 2 Exception NoTargetStateException 284 D 14 3 Klasse SIMAND 4 008 8 a da 284 D144 Kl sseSimBasie su s noari w zen weinen na 285 D 14 5 Klasse SIMCO o e neea area ran 287 D 14 6 Klasse SimHist 287 D 14 7 Klasse SimOR ocu cacas ace 2 da Rara 288 D 14 8 Klasse SimSCModell 289 D 15 Package seore Simulator o soc 22 2 284 22H 4 HR re 290 D 15 1 Klassenhierarchie cocos 8 20 sr ade a ae 290 D 15 2 Interface VAEServer as somu na er naeh nad 290 D1S3 Klasse SCRUM cu sa aan a en see en 290 D 154 Klasse Simwl atien cocos soda da 292 DIS Klasse SIMVanable oboe 42a dd a 293 D 15 6 Klasse SimWindow 293 D 157 Klasse Variable oo 23 2 ios aca nee 294 D 16 Package Score ml 20 i a a ana wur ern A 295 D 16 1 Klassenhierarchie 2 2222 Co non 295 D 16 2 Interface ErrorPrintet s a 820 BR ra 296 Inhaltsverzeichnis 12 D 16 3 Interface Observer 2 2 2 om onen 296 D 16 4 Interface UndoManager 2 2 2 2 none 296 D 16 5 Klasse Animatedlmage 2 2 2 220er 296 D 16 6 Klasse BlackLabel 297 D 16 7 Klasse Compare 22 22 si ta 0 neh a 297 D 1
400. t So ist beispiels weise die Angabe wo sich das Wasser gerade befindet oder ob bereits wieder neues Wasser eingef llt wurde obwohl der Tee gerade zieht nicht davon abh ngig ob der Strom eingeschaltet ist Daher ist die Unterteilung des globalen Statecharts in mehrere Partitionen naheliegend die jeweils den Zustand eines dieser Elemente darstellen Wir haben diese Einteilung wie folgt vorgenommen Strom Hier wird angezeigt in welcher Stellung sich der Ein Ausschalter befindet Ziehzeittimer Diese Partition stellt die Stoppuhr f r die Ziehzeit dar und gibt an ob diese Uhr gerade l uft oder nicht Wasserbeh lter Wenn Wasser in den Tank eingef llt wurde wird das durch diese Partition modelliert Tee im Ziehbeh lter Die Angabe ob sich gerade Tee im Ziehbeh lter befindet und ob dieser frisch ist oder bereits zur Zubereitung einer Kanne Tee benutzt wurde ist in dieser Partition angegeben Wasser im Ziehbeh lter Ist das Wasser erhitzt und in den Ziehbeh lter geflossen so ist das in dieser Partition zu erkennen Teekanne Es gibt mehrere M glichkeiten wie die Teekanne gef llt sein kann diese werden in der letzten Partition modelliert 157 Die Teemaschine Kapitel A Beispiele 158 Wird die Teemaschine auf diese Weise durch ein Statechart beschrieben so wird dieses etwa wie in Abbildung A 3 aussehen In dieser Darstellung sind die Pfeile nicht beschriftet um das Statechart bersichtlicher zu halten Auf genauere D
401. t dass e wenn zu einem Zeitpunkt ein Zustand inaktiv ist und im Zeitpunkt t 1 der selbe Zustand aktiv ist dann das Ereignis e Zustand i aktiviert erzeugt wird 1 27 e wenn zu einem Zeitpunkt ein Zustand aktiv ist und im Zeitpunkt t 1 der selbe Zustand inaktiv ist dann das Ereignis e Zustand i deaktiviert erzeugt wird 1 28 e das Ereignis e Zustand i aktiviert genau dann erzeugt wird wenn es eine Kan te gibt von der z Zielzustand ist alle Startzust nde vorher aktiv waren das Ereignis e erzeugt wurde und die Bedingung wahr ist 1 29 e das Ereignis e Zustand i deaktiviert genau dann erzeugt wird wenn es eine Kante gibt von der z Startzustand ist alle Startzust nde vorher aktiv waren das Ereignis e erzeugt wurde und die Bedingung wahr ist 1 30 33 Temporale Auswertung Kapitel 1 Definition von Statecharts 34 Bemerkungen 1 Insbesondere folgt hieraus dass wenn z V und z N also eine Schleife auf einem Zustand benutzt wird sowohl das Ereignis e Zustand i aktiviert als auch das Ereignis ey Zustand i deaktiviert erzeugt werden 2 Die Formeln 1 27 und 1 28 stellen nicht nur Folgerungen der Formeln 1 29 und 1 30 dar da ein Aktivieren bzw Deaktivieren von Zust nden in einem Zeitschritt nicht nur durch einen direkten Kanten bergang ausgel st werden kann sondern auch durch indirekte Ober oder Unterzustandsaktivierungen oder durch Historyeinstiege Erm
402. t nden die zuletzt aktivierte Situation wieder her Damit gibt es vier Varianten des Historykonnektors die sich durch Reichweite und Verhalten bei fehlender History unterscheiden 2 4 Verbindungen Verbindungen dienen dazu den Folgezustand eines aktivierten Zustands zu bestim men also den bergang von einem aktivierten Zustand auf den n chsten Generell besitzt eine Verbindung drei Attribute n mlich ein Ereignis eine Bedingung und eine Aktion Diese Gruppe braucht jedoch nicht in jedem Fall vollst ndig zu sein So hat zum Beispiel eine von einem transienten Zustand ausgehende Verbindung weder ein Ereignis noch eine Bedingung da dieser bergang in jedem Fall ausgef hrt werden soll Andererseits braucht auch nicht jede Verbindung spezielle Aktionen ausl sen 30yg beispielsweise Har87b S 238 oder Hor99a S 65 f Kapitel 2 Varianten von Statecharts in der Literatur Verbindungen Verbindungen ohne ausl sendes Ereignis haben in der UML eine weitere Bedeutung auf die in Abschnitt 2 4 3 genauer eingegangen werden soll Es ist nicht ausgeschlossen dass zwischen einem Ausgangs und einem Zielzu stand mehrere parallele Verbindungen bestehen die unterschiedliche Ereignisse oder Bedingungen tragen und unterschiedliche Aktionen ausl sen k nnen Zur Darstellung sei einleitend erw hnt dass Harel in seinen Abbildungen auch Verbindungen mit Namen versieht Diese Bezeichner dienen jedoch nur zur leichteren Bezugnahme und sind kei
403. t nden Partitionen ein Be wegen Sie den Cursor in einen Zustand und sehen Sie wie die Partition den Zustand teilen w rde Best tigen Sie das Einf gen durch Dr cken der linken Maustaste al Mit diesem Werkzeug f gen Sie eine neue Verbindung in das Statechart ein Bewegen Sie den Cursor ber die Zeichenfl che Bei einer g ltigen Startpositi on wird der Mauspfeil zu einem Fadenkreuz Dr cken Sie an der gew nschten Startposition die linke Maustaste Ziehen Sie den Cursor auf die gew nschte Endposition auch hier wird der Cursor bei g ltigen Positionen zu einem Faden kreuz und lassen Sie die linke Maustaste los Die neue Kante wird eingef gt wobei Start und Endpunkte automatisch auf die n chstgelegenen R nder der Objekte gesetzt werden Start und Endpunkte f r Kanten k nnen sein Zust nde Hooks mit Ein schr nkungen Defaulteinstiege nur Startpunkte Konnektoren und History konnektoren SHierbei beziehen sich die Positionen der Unterzust nde grunds tzlich auf die linke obere Ecke der Partition in der sie liegen Diese relativen Positionen ver ndern sich durch das Schieben von Partitions grenzen nicht Kapitel 5 Benutzerhandbuch Der grafische Editor Mit diesem Werkzeug kann keine Kante von einem Zustand auf sich selbst ge zogen werden Der Versuch dieser Aktion bricht das Kantenziehen genauso ab wie das Ziehen auf eine ung ltige Position Um eine Kante von einem Zustand auf sich selbst zu ziehen benutzen Si
404. t die Methode der Klasse Bedingung Gibt zur ck ob der OR Zustand eine History gesetzt hat translate Hashtable gt Bedingung berschreibt die Methode der Klasse Bedingung Gibt eine bersetzung dieser Bedingung zur ck save EasyFileWriter gt void berschreibt die Methode der Klasse BedAtomar Speichert die Bedingung im EasyFileWriter exportAtom EasyFileWriter void berschreibt die Methode der Klasse BedAtomar Exportiert den Quelltext f r diese atomare Bedingung in den EasyFileWriter D 4 12 Klasse InStateBed extends score Bedingungen BedAtomar Spezialisiert die atomare Bedingung zu einer Anfrage ob ein bestimmter Zustand momentan aktiv ist Konstruktoren InStateBed ZustandAtom Erschafft eine Bedingung die sich auf den bergebenen Zustand bezieht Methoden translate Hashtable Bedingung berschreibt die Methode der Klasse Bedingung Gibt eine bersetzung dieser Bedingung zur ck isTrue boolean berschreibt die Methode der Klasse Bedingung Gibt zur ck ob der Zustand momentan aktiv ist save EasyFileWriter gt void berschreibt die Methode der Klasse BedAtomar Speichert die Bedingung im EasyFileWriter exportAtom EasyFileWriter gt void berschreibt die Methode der Klasse BedAtomar Exportiert den Quelltext f r diese atomare Bedingung in den EasyFileWriter D 4 13 Klasse JavaBed extends score Bedingungen BedAtomar Spezialisiert die atomare Bedingun
405. t die Methode der Klasse SimBasic Aktiviert diesen OR Simulationspunkt durch einen Deep History Einstieg Ist keine History ge setzt wird der Default Einstieg benutzt Der ausgew hlte Unterzustand wird ebenfalls mittles Deep History Einstieg aktiviert activateUpwards SimBasic void berschreibt die Methode der Klasse SimBasic Aktiviert diesen OR Simulationspunkt im aufsteigenden Durchlauf Diese Methode sollte nicht von au en aufgerufen werden Sie bernimmt das eigentliche Aktivieren des Simulationspunktes und f hrt dann bei seinem Oberzustand fort solange dieser noch nicht markiert ist deactivate void berschreibt die Methode der Klasse SimBasic Deaktiviert diesen Zustand und den als aktiv gemerkten Unterzustand deactivateBelow int void berschreibt die Methode der Klasse SimBasic Deaktiviert diesen Zustand und alle Oberzust nde unterhalb des bergebenen Zustands hasHistory boolean berschreibt die Methode der Klasse SimBasic Gibt zur ck ob dieser Zustand momentan eine nicht leere History besitzt clearHistory void L scht die History dieses Zustands deepClearHistory void berschreibt die Methode der Klasse SimBasic L scht die History dieses Zustands und aller Unterzust nde awaitDefault int void Kapitel D Programmdokumentation Gibt diesem OR Zustand den Identifier des Default Einstiegs Dieser ist jedoch noch nicht als Unterzustand eingef gt w
406. t von Simulator und Simulationsmodell Die folgenden Abschnitte besch ftigen sich mit einer etwas detaillierteren Vor stellung dieser drei Modelle 6 2 2 Das Logische Statechart Modell Observable LogSCM 1 1 Tar GrafSCModell LogSCModell LogComponent 1 1 p GrafPunkt LogPunkt 1 2 LogPfeil 1 ZustandAtom Konnektor LogPfeil_1_1 LogPfeil_1_N LogPfeil_N_1 1 ZustKomplex KonHistory KonUniversal KonDefault 1 lt default entry gt ZustAND ZustOR Abbildung 6 2 Klassen berblick des Pakets LogSCM Das Logische Statechart Modell ist das grundlegendste der drei Modelle Es enth lt die wichtigsten Informationen des Statecharts und ist prinzipiell ohne die bei den anderen Modelle denkbar Zu den einzelnen Klassen sind die folgenden Anmerkungen zu machen LogSCModell Diese Klasse ist die Oberklasse des Logischen Statechart Modells Sie implementiert das Interface Observer und beobachtet dadurch alle ihre Kompo nenten Sie enth lt einen virtuellen also in der Sicht auf das Statechart nicht dargestellten Oberzustand unter den s mtliche Elemente des Statecharts unter geordnet werden LogComponent Diese Klasse ist die Grundklasse f r alle l
407. tatechart zur Erl uterung von O und T 23 1 2 Atomarer Zustand mit Identifikation A 27 1 3 Zusammengesetzter Zustand Typ OR 2 2 2 20 27 1 4 Zusammengesetzter Zustand mit Partitionierung Typ AND 28 1 5 Ein einfacher bergang von A nach B oaaao aaa 28 1 6 Fehlerhaftes Statechart da Partitionsgrenzen geschnitten werden 29 1 7 Ein komplexer bergang a 29 1 8 Korrekte Defaulteinstiege cocoa cada ea e 30 1 9 Fehlerhafte Defaulteinstiege o s cs co co nn nennen 30 1 10 Korrekte Historyeinstiege oaaae 30 1 11 Fehlerhafte Historyeinstiege o o osou c Connor nennen 31 2 1 berlappende Zust nde naaa a 41 2 2 Aufl sung der berlappenden Zust nde 41 2 3 unsichere Zust nde oo sea 2a Sn ae P Ea 42 2 4 berg nge mit mehr als einem End bzw Startzustand 43 2 5 Reihenfolge von Aktionen bei statischen Verzweigungen 44 2 6 Produzent und Konsument sind ber einen Synch Zustand verbunden 45 2 7 quivalente zusammengesetzte berg nge 22 2222 47 2 8 Defaulteinstieg mit Bedingung o 48 2 9 Unterschiede bei Simulation und Quelltext 2 2 2 22222020 48 2 10 Priorit ten an berg ngen seen een 49 2 11 Strukturelle Priorit t 2 2 2 2 resume ne 50 3 1 Darstellung von Pfeilen bei verschiedenen Tiefenvergr erungen 59 3 2 Partieller Tiefenverg erung bei den Zust nden A und Hbzw E 60
408. tel D Programmdokumentation 230 Gibt den Offset zur ck den der bergebene Punkt im bergebenen Zustand hat getLocalAlignment Point2D Double int Gibt die Ausrichtung zur ck den der bergebene Punkt im untersten sichtbaren Zustand hat isAtBorder Point2D Double boolean Gibt zur ck ob sich der angegebene Punkt im untersten sichtbaren Zustand in der N he des Ran des befindet Was in diesem Sinne der Begriff N he bedeutet wird im GrafPunkt dadurch geregelt ab wann getLocalAlignment nicht mehr javax swing SwingConstants CENTER zuriickgibt getPosAtBorderOf Point GrafPunkt Point2D Double Gibt eine Position auf dem Rand des bergebenen grafischen Punktes zur ck die f r den berge benen unskalierten Punkt nahe liegt getPosAtBorderOf Point2D Double GrafPunkt Point2D Double Gibt eine Position auf dem Rand des bergebenen grafischen Punktes zur ck die f r den berge benen Punkt nahe liegt isValidConnPos Point2D Double Point2D Double boolean Gibt zur ck ob das bergebene Rechteck eine g ltige Position f r einen Konnektor ist getSuperOf Point2D Double Point2D Double GrafPunkt Gibt den grafischen Punkt zur ck der oberhalb des angegebenen Rechtecks liegt isSECorner Point int boolean Gibt zur ck ob dieser unskalierte Punkt im entsprechenden Zustand in der N he der rechten unteren Ecke liegt isSECorner Point2D Double double boolean Gibt zur ck ob diese
409. ten relativ einfach einf gen lie en sondern im Umfang den ein Dialog Editor erfordert um zu einem komfortablen Werkzeug zu werden Das Programm lie e sich auch weiterf hren indem als zus tzliches Werkzeug noch ein Programmstruktur Editor hinzugef gt wird wie er in Abschnitt 3 1 3 be schrieben wurde 6vgl die Beschreibung auf Seite 39 7ygl Abschnitt 31 8vgl Abschnitt 2 7 Im Gegensatz dazu lie e sich die Implementation von aufgeschobenen Ereignisse im Sinne von Abschnitt 2 5 1 nicht so einfach erg nzen da dies tiefer in die Konzeption der Ereignisse eingreift l0yg Abschnitt 2 8 lygl hierzu die berlegungen auf Seite 63 12 gl die Gegen berstellung der zwei M glichkeiten auf Seite 87 3ygl die Argumentation in Abschnitt 4 2 1 Ausblick 151 Ausblick Kapitel 6 Funktionsweise der Module 152 Teil Ill Anhang Beispiel und Programmdokumentation 153 They look into the beauty of thy mind and that in guess they measure by thy deeds Shakespeare Sonnet 69 Anhang A Beispiele A 1 Die Teemaschine Statecharts eignen sich nicht nur daf r Software und Benutzerschnittstellen zu model lieren Sie lassen sich auch auf andere interaktive Systeme anwenden wie das folgende Beispiel einer Teemaschine zeigen soll A 1 1 Beschreibung des Systems Zun chst soll der Aufbau und die Benutzung der Teemaschine Abbildung A 1 be schrieben werden um daraus im zweiten Schritt die Struktur des Statecha
410. ten von Statecharts in der Literatur Der Zeitbegriff ablaufen wurde der Synch Zustand eingef hrt der im Zusammenhang mit Konnekto ren bereits in Abschnitt 32 besprochen wurde Die beiden erw hnten Formen von diskreter Zeit nennen Harel und Namaad synchron h chstens ein bergang des Statecharts pro Zeiteinheit beziehungswei se asynchron mehrere berg nge des Statecharts sind pro Zeiteinheit m glich In HN96 gehen sie allerdings nicht genauer auf die Unterschiede der beiden Modelle ein sondern beschreiben haupts chlich welche Befehle der Simulator von Statema te zur Verf gung stellt derartige Betrachtungen geh ren jedoch nicht direkt zur Be schreibung von Statecharts und sollen deshalb auf Abschnitt 92 verschoben werden in dem die Anforderungen an einen Simulator genauer diskutiert werden 2 8 2 Delays und Time Outs Verz gerungen und Ereignisse die nach einer bestimmten Zeitdauer eintreten wer den in der Literatur in vielen unterschiedlichen Fassungen vorgestellt Dazu geh ren verz gerte Aktionen scheduled actions und verz gerte Ereignisse deferred events die in den Abschnitten 2 7 beziehungsweise 2 5 1 besprochen wurden Dar ber hinaus gibt es Ereignisse die im Prinzip von einer Stoppuhr erzeugt wer den und selbst berg nge ausl sen k nnen die sogenannten Time Out Ereignisse Harel benutzt diese bereits in seinen ersten Ver ffentlichungen zu dem Thema im Bei spiel einer Armbanduhr die nach zwei Mi
411. tet ButtonEvents aus update Observable Object void Observerfunktion wenn sich die Ereignisse ndern valueChanged ListSelectionEvent gt void Wenn sich die Selektion der Liste ge ndert hat setValue Ereignis void Setzt die Liste von aussen D 9 Package score GrafSCM D 9 1 Klassenhierarchie java lang Object gt java util Vector gt score GrafSCM GPAbschnitt gt score AbstractModell AbstractModell gt score GrafSCM GrafSCModell gt score AbstractModell MarkableTyp gt score GrafSCM GrafTyp gt score GrafSCM GrafHook gt score GrafSCM GrafPfeil gt score GrafSCM GrafPunkt gt score GrafSCM GrafKonnektor gt score GrafSCM GrafZustand gt score GrafSCM GrafAND gt score GrafSCM GraflopLevelZust gt score GrafSCM Graflext gt score GrafSCM Partitioner gt score GrafSCM GrafModellSicht visHook gt score GrafSCM GrafModellSicht visText gt score GrafSCM SuperList gt score GrafSCM Unterpunkt 218 Kapitel D Programmdokumentation gt score util Observable gt score Graf SCM GrafModellSicht D 9 2 Error InvalidConstructionError extends java lang Error Dieser Error wird geworfen wenn beim Einf gen eines neuen Zustandes ung ltige Koordinaten angege ben werden Konstruktoren InvalidConstructionError String Erzeugt einen neuen Error mit dem angegebenen Text D 9 3 Klasse GPAbschnitt extends java util Vector Diese Klasse stellt einen Abschnitt eines Graf
412. tieg im w rtlichen Sinn nicht m glich ist Das Verhalten ist das folgende Ist eine History vorhanden so wird der auf diese Weise gespeicherte Zustand wieder hergestellt Ist aber keine History vorhanden weil der Zustand zum ersten Mal betre ten wird oder die History explizit gel scht wurde so wird eine vom Historykonnektor ausgehende Verbindung genutzt Ist keine solche vorhanden oder mit einer Bedingung versehen die nicht erf llt ist so wird der Defaulteinstieg verwendet Die M glichkeit eine solche Verbindung anzugeben ist besonders interessant wenn der Defaulteinstieg auf einen Historykonnektor verweist Wird ein solcher Zu stand zum ersten Mal betreten und dabei der Defaulteinstieg benutzt so w rde das System in eine Schleife geraten der Defaulteinstieg will den Historyeinstieg benutzen da aber noch keine History vorhanden ist wird wieder der Defaulteinstieg betrachtet Eine vom Historykonnektor ausgehende Verbindung l st dieses Problem Au erdem gibt es in der Literatur zwei Arten des Historykonnektors die sich darin unterscheiden ob sie sich lediglich auf den Zustand beziehen in dem sie sich befinden oder auch auf die jeweils aktiven Unterzust nde Die zweite Variante wird meist als deep history bezeichnet W hrend der einfache Historykonnektor lediglich die History des ersten Zustand betrachtet und in allen darunterliegenden Zust nden die Defaulteinstiege nutzt stellt der Deep Historykonnektor auch in allen Unterzus
413. tifier Name und Gr e createANDState int String Dimension Double String Erschafft einen AND Zustand mit angegebenem Identifier Name und Gr e createConnDefEntry int Dimension Double String Erschafft einen DefaultEntryKonnektor mit angegebenem Identifier und Gr e createConnUniversal int String Dimension Double String Erschafft einen Universalkonnektor mit angegebenem Identifier Name und Gr e createConnHistory int String Dimension Double boolean String Erschafft einen History Konnektor mit angegebenem Identifier Name Gr e und Tiefe createText int Point2D Double String String Erschafft einen neuen GrafText mit angegebenem Identifier Offset und Text insert int int Point2D Double String F gt einen Zustand oder Konnektor in einen Oberzustand an die angegebene Stelle ein addView int int double boolean boolean boolean boolean String F gt zum angegebenen Zustand eine Sicht mit entsprechender Tiefe Zoom und Darstellung hin zu addPartitioner int Point2D Double Point2D Double String F gt zum angegebenen AND Zustand einen Partitioner zwischen den angegebenen Punkten hinzu addText int int String F gt einen GrafText zum angegebenen Zustand hinzu createArrow1_1 int Vector String Erschafft einen 1 1 Pfeil mit angegebenen Identifier und Hook Vector createArrow1_N int Vector Triplet Vector String Erschafft einen 1
414. tion die das Wasser im Ziehbeh lter beschreibt Checkbox bei Betreten des Zustands unsichtbar gemacht und erst bei Verlassen wieder aktiviert Ist die Stoppuhr abgelaufen Ereignis TI so geht das System wieder in den Zu stand leer ber und das Wasser flie t in die Teekanne Ereignis WzTk Partiton 6 Teekanne I Teek nne in fhig WzTk visible Tkye in alt Tk visible f l se leer voll ertervisible fx se darse TkLeer Tee set Tk 68 Wasser set Tk 4bser Bruhe set Tk Bhe WZTk visible fkue uberlauf set Tkeberla f Abbildung A 9 Die Partition f r die Teekanne Beim Start der Maschine ist die Teekanne leer und es wird keine Meldung ange zeigt Dies bleibt solange der Fall bis Wasser in die Teekanne flie t Ereignis WzTk Je nach dem ob sich w hrend des Ziehens frischer oder alter Tee oder gar keiner im Ziehbeh lter befand ist die Kanne nun voll Tee Br he oder hei em Wasser Die Mel 5Die angegebenen Bedingungen beziehen sich auf die Zust nde in der Partition Tee im Ziehbeh lter Die scheinbare Mehrdeutigkeit der Angabe leer wird intern durch Benutzung von eindeutigen Identifi zierern aufgehoben Die Teemaschine 163 Ein einfacher Anrufbeantworter Kapitel A Beispiele 164 dung wird entsprechend gesetzt und das Fenster angezeigt visible Tk true Wird im Zustand
415. titionSize Dimension Double boolean berschreibt die Methode der Klasse GrafPunkt Testet ob der Zustand durch die neue Gr e Unterzust nde verliert isValidHMove double double boolean Testet ob die horizontale Partitionsgrenzenverschiebung von fromX nach toX g ltig ist isValidVMove double double boolean Testet ob die vertikale Partitionsgrenzenverschiebung von fromY nach toY g ltig ist doHMove double double double double void F hrt eine horizontale Partitionsgrenzenverschiebung durch Es wird davon ausgegangen dass diese Verschiebung g ltig ist Parameter fromX X Koordinate des Starts toX X Koordinate des Ziels doVMove double double double double void F hrt eine vertikale Partitionsgrenzenverschiebung durch Es wird davon ausgegangen dass diese Verschiebung g ltig ist Parameter fromY Y Koordinate des Starts toY T Koordinate des Ziels containsOnlyThis GrafPunkt Point2D Double Dimension Double boolean Gibt zur ck ob das durch offset und newSize angegebene Rechteck nur den bergebenen Punkt als direkten Unterzustand enth lt und nicht mit diesem Zustand in Konflikt steht movePointIntoThis GrafPunkt double double boolean berschreibt die Methode der Klasse GrafPunkt Bewegt den Punkt in diesen Zustand oder einen Unterzustand Gibt true zur ck falls eine Bewegung stattgefunden hat ansonsten false getDefaultEntry gt GrafKonnek
416. tons int Vector Erzeugt n Radiobuttons addCheckbox gt DlgCheckbox F gt eine neue Checkbox hinzu addTimer DigTimer F gt einen neuen Timer hinzu addPopup gt DigPopup F gt einen neuen Timer hinzu save EasyFileWriter gt void Speichert das komplette GrafSCM im EasyFileWriter exportQT EasyFileWriter gt void Erzeugt den Quelltext des logischen Dialogmodells D 11 Package score LogSCM D 11 1 Klassenhierarchie java lang Object gt score util Observable gt score LogSCM LogComponent gt score LogSCM LogPfeil 258 Kapitel D Programmdokumentation Package score LogSCM gt score LogSCM LogPfeil_1_1 gt score LogSCM LogPfeil_I_N gt score LogSCM LogPfeil_N_1 gt score LogSCM LogPunkt gt score LogSCM Konnektor gt score LogSCM KonDefault gt score LogSCM KonHistory gt score LogSCM KonUniversal gt score LogSCM ZustandAtom gt score LogSCM ZustKomplex gt score LogSCM ZustAND gt score LogSCM ZustOR gt score LogSCM LogSCModell D 11 2 Klasse KonDefault extends score LogSCM Konnektor Diese Klasse konkretisiert den Konnektor als Default Einstiegs Konnektor Sie dient lediglich der Ver einfachung des Editors da der wirkliche Default Einstieg im logischen Modell anders realisiert ist Konstruktoren KonDefault Der Konstruktor setzt den Typ dieses Objektes D 11 3 Klasse KonHistory extends score LogSCM Konnektor Diese Klasse konkretisiert den Konnektor als Hist
417. tor void berschreibt die Methode der Klasse Bedingung Sammelt alle berpr ften Variablen im bergebenen Vector fillFrom BedKomplex Hashtable gt void F llt diese komplexe Bedingung mit den bersetzungen der bergebenen komplexen Bedingung save EasyFileWriter void berschreibt die Methode der Klasse Bedingung Speichert die Bedingung und ihre Unterbedingungen im EasyFileWriter exportQT EasyFileWriter gt void berschreibt die Methode der Klasse Bedingung Exportiert den Quelltext f r diese komplexe Bedingung in den EasyFileWriter Diese Methode exportiert f r atomare Bedingungen keinen Quelltext sondern lediglich einen weiteren Aufruf D 4 7 Klasse BedNOT extends score Bedingungen Bedingung Erschafft eine Bedingung die die ihr bergebene Bedingung negiert Konstruktoren BedNOT Erschafft eine leere BedNOT delete void berschreibt die Methode der Klasse Bedingung L scht diese Bedingung setCond Bedingung void Setzt die Unterbedingung die negiert werden soll getCond Bedingung Gibt die Unterbedingung zur ck isTrue boolean berschreibt die Methode der Klasse Bedingung Gibt den negierten Wahrheitswert der Unterbedingung zur ck getCheckedVars Vector void 199 Package score Bedingungen Kapitel D Programmdokumentation berschreibt die Methode der Klasse Bedingung Sammelt alle berpr ften Variablen im bergebenen Vecto
418. tor Gibt den Default Entry Konnektor zur ck der f r diesen Zustand gesetzt ist Wenn keiner ge setzt ist wird Null zur ckgegeben Sind mehrere Default Entry Konnektoren in diesen Punkt eingezeichnet wird der erste zur ckgegeben der gefunden wird hasUniqueDefEntry boolean Gibt true zur ck wenn in diesen Punkt genau ein Default Entry Konnektor eingetragen ist hasHistoryEntry boolean Gibt zur ck ob dieser Zustand einen FlatHistory Konnektor enth lt getPartitioners double double Point2D Double Partitioner berschreibt die Methode der Klasse GrafPunkt Erh lt einen Punkt in eigenen Koordinaten an dem eine Partitionierung getestet werden soll Der angegebene Offset ist der Zeichenoffset dieses Zustandes Gibt einen zweistelligen Array von Partitioners zur ck wobei der erste der horizontale und der zweite der vertikale ist Ist eine von beiden Richtungen oder beide ung ltig so wird an Stelle des entsprechenden Partitioners Null zur ckgegeben Liegt der Punkt berhaupt nicht in diesem Zustand wird Null zur ckgegeben isPartition boolean Kapitel D Programmdokumentation Package score GrafSCM berschreibt die Methode der Klasse GrafPunkt Gibt zur ck ob dieser Zustand eine Partition eines AND Zustands ist partitionHorizAt double GrafZustand Teilt diesen Zustand der eine Partition sein muss horizontal an der angegebenen Koordina te bzgl dieses Zustands Es wird ein neuer grafisc
419. toren die keine Deep History ausf hren DEEP_HISTORY int CONST Konstante f r Deep History Konnektoren DEFENTRY int CONST Konstante f r Default Einstieg Konnektoren Konstruktoren GrafKonnektor Dimension Double int Erschafft einen neuen Konnektor mit angegebener Gr e und Typ GrafKonnektor Dimension Double Konnektor Erschafft einen neuen Konnektor aus dem bergebenen logischen Konnektor setSize Dimension Double void berschreibt die Methode der Klasse GrafPunkt Setzt die Gr e des Konnektors Es wird davon ausgegangen dass diese Gr e g ltig ist putOntoRim Point2D Double Point2D Double Legt den angegebenen Punkt auf den Rand dieses Konnektors draw int Painter Point2D Double GrafModellSicht gt void berschreibt die Methode der Klasse GrafPunkt Zeichnet den Konnektor der angegebene Offset gibt die Position der linken oberen Ecke direkt an sSECorner double double int double gt int berschreibt die Methode der Klasse GrafPunkt Gibt 1 zur ck wenn der Punkt in der N he der rechten unteren Ecke liegt 1 wenn das nicht der Fall ist und O wenn dieser Zustand nicht betroffen ist getPosAtBorder Point2D Double Point2D Double berschreibt die Methode der Klasse GrafPunkt Legt den angegebenen Punkt auf den Rand dieses Konnektors maybeArrowSource boolean 225 Package score GrafSCM Kapitel D Programmdokumentation berschreibt die Method
420. tra gen sind irgendwo als Ausl ser eines bergangs benutzt werden Ausgeschlossen sind hiervon die automatisch erzeugten Ereignisse enter undexit Diese Meldung wird auch f r Ereignisse ausgegeben die nie ausgel st werden In diesem Fall beginnt die Zeile mit dem Zusatz unthrown Beim Anklicken werden alle Elemente des Statecharts markiert die das betref fende Ereignis ausl sen All Variables used The following variables are set but never checked Mit diesem Test wird berpr ft ob alle Variablen denen irgendwo ein Wert zugewiesen wird auch in einer Bedingung abgefragt werden Ausgeschlossen sind hierbei die Variablen die Dialogelementen zu geordnet sind und mit DLG beginnen Diese Meldung wird auch f r Variablen ausge geben die in Aktionen gesetzt werden die keinem Element des Statecharts zugeordnet sind In diesem Fall beginnt die Zeile mit dem Zusatz in uncalled action Beim Anklicken werden alle Elemente des Statecharts markiert die den Wert der Variablen setzen The following variables are checked but never set Mit diesem Test wird die Um kehrung des letztes Tests durchgef hrt indem berpr ft wird ob allen Variablen die in einer Bedingung benutzt werden auch irgendwo ein Wert zugewiesen wird Ausge schlossen sind hierbei wieder die Variablen die Dialogelementen zugeordnet sind und mit DLG beginnen Diese Meldung wird auch f r Variablen ausgegeben die in Aktio nen getestet werden die keinem E
421. ts markiert das hei t im Inspektor und im Editor angezeigt wer den Gibt es keine solchen Elemente wird der Inspektor nach Anklicken der Meldung Nothing anzeigen 5 13 2 Die einzelnen Tests ber die Test Optionen lassen sich verschiedene Tests ausw hlen oder berspringen Siehe auch Abbildung 5 21 In diesem Abschnitt sollen die berpr fbaren Eigenschaf ten und die dabei auftretenden Fehlermeldungen und Warnungen kurz beschrieben werden Kapitel 5 Benutzerhandbuch Der Verifikator Check Properties arg heck far Default Entries History Cannectars Hooks Transition far crossing a Partition Partitions Arrow States all Events used all Variables used N 1 Arrows start at states Triggers in Hierarchy all Triggers can be thrown Connector loops all states accessible end states alllabels show references O N RR RN NRN RNR RRN N NRR RO v Continue after Error Ok Abbildung 5 21 Das Auswahlfenster f r den Verifikator Continue after Error Diese Einstellung beeinflusst das Verhalten des Verifikators wenn Fehler gefunden wurden Wird sie abgew hlt so bricht der Testlauf nach der ersten Eigenschaft ab bei deren berpr fung Fehler auftraten Warnungen f hren hierbei nicht zu einem Abbruch Default Entries Wird dieser Test angew hlt so werden die Default Einstiege des gesamten Statecharts getestet Insbesondere wird jeder OR Zustand und das gesamte Statechart darauf hin untersu
422. tzt den Default Einstieg Es wird nicht gepr ft ob der angegebene logische Punkt wirklich ein direkter Unterzustand oder History Konnektor dieses Zustands ist dies wird aber beim Benut zen vorausgesetzt Die Angabe l scht den Default Einstieg setDefault int void Setzt den Default Einstieg auf den Zustand mit dem bergebenen Identifier getDefEntry gt LogPunkt Gibt den Unterzustand zur ck der als Default Einstieg markiert ist calcDefEntry boolean Berechnet den Default Einstieg aus dem Grafischen Modell Es wird davon ausgegangen dass die Konstruktion g ltig ist ansonsten wird false zur ckgegeben exportQT EasyFileWriter gt void berschreibt die Methode der Klasse ZustandAtom Schreibt den Quelltext zu diesem OR Zustand in den EasyFileWriter D 12 Quelltext Export D 12 1 Klassenhierarchie java lang Object gt javax swing JButton Kapitel D Programmdokumentation Quelltext Export Timer gt score Simulator SCRun gt StateChart score Simulator Variable gt ExportVariable D 12 2 Klasse ExportVariable extends score Simulator Variable Diese Klasse erweiter die Variable f r das exportierte Programm Konstruktoren ExportVariable String Konstruktor ExportVariable String String Konstruktor ExportVariable String int Konstruktor ExportVariable String double Konstruktor Methoden checkDialogVar gt void berschreibt die Methode der Klasse
423. ubber zeichnen erase void berschreibt die Methode der Klasse DrawableRubber Alle Rubber l schen getB Point berschreibt die Methode der Klasse DrawableRubber Liefert auch A setA Point void berschreibt die Methode der Klasse DrawableRubber Setzt alle a setB Point gt void berschreibt die Methode der Klasse DrawableRubber Setzt alle b setB Point int void Setzt b des Elements index setOffset Point void berschreibt die Methode der Klasse DrawableRubber Setzt alle Offsets moveTo Point void berschreibt die Methode der Klasse DrawableRubber Bewegt alle an Position p moveToX int void Kapitel D Programmdokumentation Package score SCEditor berschreibt die Methode der Klasse DrawableRubber Bewegt alle in X moveToY int void berschreibt die Methode der Klasse DrawableRubber Bewegt alle in Y setSize void Wird ignoriert D 13 12 Klasse RubberText extends score SCEditor DrawableRubber Diese Klasse erweitert Rubber fiir ein Textlabel Attribute text String Der zu schreibende Text Konstruktoren RubberText Graphics Point Color String Konstruktor RubberText Graphics Point Color Point String Konstruktor Methoden draw gt void berschreibt die Methode der Klasse DrawableRubber Den Text zeichnen erase void berschreibt die Methode der Klasse DrawableRubber Den Text l sch
424. uen 1 1 Pfeil mit gegebenem grafischen Start und Endpunkt Methoden replaceObservable Observable Observable boolean Implementation des Observer Interfaces addStartSect GPAbschnitt void F gt die bergebene Section in diesen Pfeil ein Der Anfangspunkt des logischen Pfeils wird entsprechend gesetzt Dieser Pfeil wird auch im grafischen und logischen Punkt hinzugef gt Der Konnektor Hook muss schon gesetzt sein addEndSect GPAbschnitt void 231 Package score GrafSCM Kapitel D Programmdokumentation 232 F gt den bergebenen Abschnitt in diesen Pfeil ein Der Endpunkt des logischen Pfeils wird entsprechend gesetzt Dieser Pfeil wird auch im grafischen und logischen Punkt hinzugef gt Der Konnektor Hook muss schon gesetzt sein setConnect GrafHook void Setzt den KonnektorHook f r diesen GrafPfeil getGrafPfeil int GrafPfeil Gibt den grafischen Pfeil mit dem bergebenen Identifier zur ck getAll O gt Collection Gibt eine Collection mit allen grafischen Pfeilen zur ck setLogic LogPfeil void Setzt das logische Gegenstiick dieses grafischen Pfeils update Observable Object void Implementation des Observer Interfaces erneuert ggf auch ein vorhandenes Label getLogic LogPfeil Gibt das logische Gegenstiick dieses grafischen Pfeils zuriick hasComnect gt boolean Gibt zur ck ob dieser Pfeil einen Konnektor Hook hat getConnect GrafHook Gi
425. ugten Aktionen Wenn die Bedingung erf llt ist alle Quellzust nde aktiv sind und das Ereignis im vorherigen Schritt generiert wurde werden die Quellzust nde deaktiviert die Ziel zust nde aktiviert und die entsprechenden Aktionen der Transition ausgef hrt Bedingungen Eine Bedingung pr ft verschiedene Gegebenheiten Randbedingungen die sich auf die Zust nde oder auf externe Einfl sse beziehen Ausschlaggebend f r eine Bedin gung ist dass sie einen Wahrheitswert hat Beschrieben wird sie durch eine aussagen logische Formel Ereignisse Ereignisse sind Randbedingungen die aktiv generiert werden und nach einem Zeit schritt selbst ndig wieder verschwinden Sie K nnen nur durch Aktionen erzeugt und durch berg nge getestet werden Ereignisse sind notwendig um einen bergang zu initiieren Aktionen Aktionen werden bei einem durchgef hrten bergang ausgef hrt Man unterscheidet zwischen e internen Aktionen Generieren eines Ereignisses L schen der History eines Zu stands etc die sich auf die Elemente des Statecharts auswirken e externen Aktionen Interaktion mit der Benutzerschnittstelle etc 1 2 Formale Definition Vorbemerkung Bevor wir mit der formalen Definition beginnen wollen wir noch kurz erkl ren dass f r uns N 1 2 3 gilt 20 Formale Definition Kapitel 1 Definition von Statecharts 1 2 1 Statechart Formal k nnen wir ein Statechart als ein Tupel SC Z 0 n d H K E A Ls be
426. ulationspunktes Dabei werden alle Partitionen die noch nicht als zuk nftig aktiv markiert sind jetzt aktiviert activateByHistory void berschreibt die Methode der Klasse SimBasic Wirft eine NoTargetStateException da ein AND Zustand nicht mittels eines History Einstiegs aktiviert werden kann activateByDeepHistory void 284 Kapitel D Programmdokumentation Package score SimSCM berschreibt die Methode der Klasse SimBasic Aktiviert diesen AND Simulationspunkt bzw alle seine Partitionen Deep History Einstieg activateUpwards SimBasic void berschreibt die Methode der Klasse SimBasic Aktiviert diesen AND Simulationspunkt im aufsteigenden Durchlauf Er wird dabei in die Liste der nachzuf hrenden AND Zust nde eingetragen Diese Methode sollte nicht von au en aufge rufen werden deactivate void berschreibt die Methode der Klasse SimBasic Deaktiviert diesen AND Simulationspunkt und alle seine Partitionen deactivateBelow int void berschreibt die Methode der Klasse SimBasic Deaktiviert alle Simulationszust nde unterhalb der Simulationsentsprechung des bergebenen Zustands deepClearHistory void berschreibt die Methode der Klasse SimBasic L scht die History aller Unterzust nde addSubstate SimBasic void berschreibt die Methode der Klasse SimBasic F gt einen SimBasic als Partition hinzu D 14 4 Klasse SimBasic extends score LogSCM LogPunkt impl
427. ultAktion DigTimer String Konstruktor setzt den Label setVisible boolean void berschreibt die Methode der Klasse D gKomponente Setzt sichtbar oder unsichtbar toString String 256 Kapitel D Programmdokumentation Package score LogDM berschreibt die Methode der Klasse D gKomponente Liefert die String Identifikation createComponent Component berschreibt die Methode der Klasse D gKomponente Erzeugt eine grafische Komponente des Timers setValue int void Setzt den Timer Parameter val Wert auf den Timer gesetzt wird setFromVar String void berschreibt die Methode der Klasse D gKomponente Setzt den Wert von einer Variablen setOn gt void berschreibt die Methode der Klasse D gKomponente Startet den Timer setOff void berschreibt die Methode der Klasse D gKomponente H lt den Timer an run void F r das Runnable Interface l t den Timer laufen actionPerformed ActionEvent void berschreibt die Methode der Klasse D gKomponente F r den Button in der Simulation ActionListener save EasyFileWriter gt void berschreibt die Methode der Klasse D gKomponente Speichert den Timer exportQT EasyFileWriter gt void berschreibt die Methode der Klasse D gKomponente Exportiert den Quelltext D 10 11 Klasse LogDModell extends score AbstractModell AbstractModell implements score LogDM DialogCompServer
428. und Text TextEditField int Erschafft ein neues Textfeld mit der bergebenen Anzahl Spalten TextEditField String Erschafft ein neues Textfeld mit dem bergebenen Text TextEditField String int Erschafft ein neues Textfeld mit bergebenem Text und Spaltenzahl Methoden wasEdited boolean 305 Package score util Kapitel D Programmdokumentation 306 Gibt an ob dieses Textfeld vom Benutzer ge ndert wurde commit void Setzt den momentanen Text als Originaltext Das Textfeld ist damit nicht mehr editiert rollback void Setzt den Text auf den Originaltext zur ck setText String gt void berschreibt die Methode der Klasse JTextComponent Setzt den bergebenen Text sowohl als aktuellen als auch Originaltext Das Textfeld ist damit nicht mehr editiert D 16 23 Klasse Triplet extends java lang Object Diese Klasse h lt ein geordnetes Tiplet von Instanzen beliebiger Klassen Der Zugriff erfolgt direkt auf die Instanzvariablen Attribute first Object das erste Objekt second Object das zweite Objekt third Object das dritte Objekt Konstruktoren Triplet Object Object Object Erschafft ein neues Triplet mit den bergebenen Objekten D 16 24 Klasse UndoStack extends java util Stack Diese Klasse erweitert die Struktur Stack um ein buffer Element Konstruktoren UndoStack Erstellt einen neuen Stack unbegrenzter Kapazit t UndoStack int
429. ungen ausgehen wie es bei OR Konnektoren blich ist In diesem Fall ist der bergang auf den Konnektor nur dann m glich wenn mindestens eine der ausgehenden Verbindungen m glich ist F r derartige Konstruktionen werden in der Literatur verschiedene Zusatzbedin gungen gefordert F r Statemate und UML m ssen die Bedingungen der ausgehenden ste sich gegenseitig ausschlie en um Nicht Determinismus zu verhindern in UML 31 vgl HN96 S 303 32vgl HP98b S 65 f beziehungsweise HK99a S 147 oder Rum99 S 73 47 Verbindungen Kapitel 2 Varianten von Statecharts in der Literatur d rfen die ausgehenden Verbindungen dar berhinaus nicht mit weiteren Ereignissen versehen sein In HN96 erzeugen die Autoren noch auf eine andere Weise zusammengesetz te berg nge bei ihnen ist es m glich auch bei den Verbindungen die von einem Defaulteinstiegs Konnektor ausgehen weitere Ereignisse und Bedingungen anzuge ben Eine Konstruktion wie in Abbildung 2 8 f hrt dann dazu dass der bergang t nur dann erlaubt ist wenn auch ausgef hrt werden kann A H 2 ai C Abbildung 2 8 Defaulteinstieg mit Bedingung Der Umgang mit zusammengesetzten Verbindungen ist jedoch nicht unproble matisch So schildern Harel und Namaad in diesem Zusammenhang ein Beispiel bei dem der Statemate Simulator sich anders verh lt als der von Statemate erzeugte Quell text Dieses Beispiel wird in Abbildung 2
430. ungen entweder der Defaulteinstieg verwendet oder ein explizit angegebener Unterzustand aktiviert Globale oder partielle Tiefenvergr erung Es kommt nun darauf an ob der Benutzer die M glichkeit geboten bekommt lediglich einzelne Zust nde in diese Tiefenvergr erung einzubinden oder das Statechart nur als ganzes in verschiedenen Hierarchieebenen anzuzeigen Die erste Variante ist deutlich komplizierter da die Gr enverh ltnisse der Zust nde zueinander dabei nicht kon stant sind Wird n mlich die Betrachtungstiefe nur bei einem Zustand erh ht braucht er eventuell mehr Platz als vorher um die zus tzlichen Details aufnehmen zu k nnen Dadurch ndert sich nat rlich die relative Lage der umliegenden Zust nde und ins besondere die der Pfeile von oder zu diesem Zustand Dies kann dazu f hren dass das Statechart g nzlich anders aussieht und der Benutzer sich schwerer orientieren kann Abbildung 3 2 verdeutlicht dies an einem Beispiel in dem ein Statechart mit unterschiedlicher partieller Tiefe gezeigt wird Die Konstruktion ist in beiden Bildern die selbe doch diese bereinstimmung kann nicht auf den ersten Blick festgestellt werden Obwohl es also zun chst selbstverst ndlich erscheinen mag dass ein Editor die M glichkeit einer solchen partiellen Tiefenvergr erung bieten sollte wird der ber blick dadurch deutlich erschwert es w re mit einem solchen Editor sehr kompliziert die Zust nde so anzuordnen dass sie in a
431. ust nde von denen einer als Defaulteinstieg markiert ist sowie einen aktiven Unterzustand und einen History Zustand das hei t den Zustand der als letztes aktiv war SimAND Diese Klasse erweitert den atomaren Zustand im Sinne eines AND Zustands Die Methoden zur Aktivierung und Deaktivierung sind entsprechend berschrieben Der SimAND enth lt auch einen Vektor aller AND Zust nde die 141 Das logische Dialogmodell Kapitel 6 Funktionsweise der Module 142 gerade aktiviert wurden um diese nach einem Zeitschritt nachf hren zu k nnen F r eine genauere Beschreibung dieses Verfahrens sei auf Abschnitt 6 5 3 hin gewiesen SimConn Diese Klasse wird nur im exportierten Quelltext ben tigt und stellt dabei einen Konnektor dar Er unterscheidet sich von der Klasse SimBasic darin dass er nicht aktiviert werden kann SimHist Auch diese Klasse wird in der Simulation selbst nicht ben tigt f r den ex portierten Quelltext modelliert sie einen entwder einfachen oder Deep Histo rykonnektor 6 3 Das logische Dialogmodell Die Daten ber die mit dem Statechart interagierenden Dialoge werden im logischen Dialogmodell gehalten Um diese Daten zu bearbeiten steht der Dialog Editor zur Verf gung MarkableTyp AbstractModell i Actor ed DigKomponentl LogDModell DigCheckBox DigCheckBox DigText D
432. ve boolean Gibt zur ck ob dieser Simulationspunkt im Moment aktiv ist hasHistory boolean Gibt zur ck ob dieser SimBasic eine History hat solange diese Methode nicht von einem Si mOR berschrieben wird gibt sie immer false zur ck willBeActive boolean Gibt zur ck ob dieser Simulationspunkt in die Liste der zuk nftig aktiven Punkte eingetragen ist activate void Aktiviert diesen atomaren Simulationspunkt wenn er noch nicht als zuk nfig aktiv markiert ist Der aufsteigende Durchlauf wird begonnen Ansonsten wird eine NoTargetStateException gewor fen activateByHistory void Wirft eine NoTargetStateException da atomare Zust nde nicht ber einen History Einstieg be treten werden k nnen activateByDeepHistory void Aktiviert diesen Simulationspunkt wenn er noch nicht als zuk nftig aktiv markiert ist Der auf steigende Durchlauf wird begonnen activateUpwards SimBasic void Wirft eine NoTargetStateException da ein atomarer Zustand nicht von unten aktiviert werden kann deactivate void Deaktiviert diesen atomaren Simulationspunkt deactivateBelow int void Kapitel D Programmdokumentation Package score SimSCM Deaktiviert diesen Simulationspunkt und alle ihm bergeordneten die sich noch unterhalb des angegebenen Zustands befinden deactivateUpwards int void Deaktiviert diesen SimBasic und alle seine Oberzust nde unterhalb der Simulationsentspr
433. verzeichnis 327
434. w Delete Abbildung 5 13 Der Dialog Editor Der Dialog Editor siehe Abbildung 5 13 bietet die M glichkeit die f r die zu modellierende Anwendung ben tigten Dialoge zu erstellen Er ist recht einfach gehal ten und setzt das Layout des Dialogs automatisch SEs ist hier die globale Tiefenvergr erung implementiert Siehe hierzu auch Abschnitt 66 ab Seite 59 118 Kapitel 5 Benutzerhandbuch Der Dialog Editor Mit Hilfe der Schaltfl chen k nnen entsprechende Dialogkomponenten hinzu gef gt werden Mit show wird der bisher erstellte Dialog angezeigt und mit Delete kann eine gew hlte Dialogkomponente wieder entfernt werden Die Eigenschaften der Dialogkomponente werden mit Hilfe des Inspektors edi tiert So kann f r jede Dialogkomponente gesetzt werden ob sie eine UserDialog Komponente ist voreingestellt oder ob sie im SystemDialog erscheinen soll Wei terhin wird gesetzt ob sie standardm ig aktiviert oder deaktiviert und sichtbar oder unsichtbar sein soll Au erdem gibt es bei jeder Dialogkomponente ein Popup Men das ber die rechte Maustaste erreichbar ist Hierin k nnen die Aktionen eingestellt werden die von dieser Komponente ausgef hrt werden 5 5 1 Untypische Dialogkomponenten Als untypische Dialogkomponenten bezeichnen wir Elemente die nur im erweiter ten Sinn zum Dialog gez hlt werden k nnen dazu geh ren Popups und Timer sowie Java Ersatzkomponenten Sie unterscheiden sich von d
435. w nschenswert die einstellt ob das Feld angew hlt ist oder nicht Dies ist besondern f r Radiobuttons notwendig wenn beim Dr cken eines Knopfes das Deaktivieren der restlichen Kn pfe vom Statechart aus gesteuert werden soll Variablen Besondere Schwierigkeiten treten im Zusammenhang mit Dialogkompo nenten auf die eine Zahl oder einen Text darstellen wie etwa Schieberegler oder Textfelder Hier sollte einerseits der Wert gesetzt werden k nnen andererseits sind viele F lle denkbar in denen unterschiedlichste Vergleiche mit diesem Wert durch gef hrt werden m ssen er sollte also sowohl f r den Dialog als auch f r das Statechart zug nglich sein Dieses Problem ist recht einfach zu l sen wenn jeder Dialogkompo nente eine Variable zugeordnet wird Es muss allerdings darauf geachtet werden dass der Wert der Variablen immer dem der zugeh rigen Komponente entspricht Mit die sem Verfahren l sst sich dann beispielsweise auch der Text eines Knopfes setzen und sogar zur Laufzeit ndern und damit eventuell einer neuen Situation anpassen Auch Fehlermeldungen k nnen so sehr gut in das Statechart eingebaut werden es muss le diglich ein einziges Popup zum Dialog hinzugef gt werden das beim Auftreten eines Fehlers angezeigt wird Die entsprechende Meldung kann in die zugeordnete Variable geschrieben werden Insbesondere lassen sich mit einer solchen Variable aber auch Dialogkomponen ten modellieren die eigentlich mehrere Ereignis
436. wRectHere int int int int void Zeichnet ein Rechteckt mit der angegebenen Position und Gr e fillRectHere int int int int void Zeichnet ein ausgef lltes Rechteck mit der angegebenen Position und Gr e drawRoundRectHere int int int int int int gt void Zeichnet ein Rechteck mit abgerundeten Ecke mit der angegebenen Position und Gr e fillRoundRectHere int int int int int int void Zeichnet ein ausgef lltes Rechteck mit abgerundeten Ecken mit der angegebenen Position und Gr e drawOvalHere int int int int void Zeichnet ein Oval mit der angegebenen Position und Gr e fillOvalHere int int int int void Zeichnet ein ausgef lltes Oval mit der angegebenen Position und Gr e fillPolygon int int int void Zeichnet ein ausgef lltes Polygon mit den angegebenen Eckpunkten setColor Color void Setzt die Zeichenfarbe getColor Color Gibt die Zeichenfarbe zur ck drawString String Point2D Double Point void Zeichnet einen String an die bergebene Position mit dem bergebenen Offset Die Vergr erung wird noch beachtet drawString String Point2D Double void Zeichnet einen String an die bergebene Position Die Vergr erung wird noch beachtet drawOval Point2D Double Dimension Double void Zeichnet ein Oval mit der angegebenen Position und Gr e Die Vergr erung wird noch beach tet fillOval Point2D Double Dimension
437. wert true falls diese Aktion enthalten ist Gibt zur ck ob dieser Actor die bergebene Aktion ausf hrt removeAction Aktion gt void Entfernt die bergebene Aktion aus diesem Actor setChanged gt void Teilt dem Actor mit dass sich seine Aktionen ver ndert haben setObserversChanged void Teilt dem Actor mit dass sich seine Aktionen ver ndert haben Der Actor wird auch fiir alle Observer den Status auf changed setzen notifyObservers gt void Ruft die Methode notifyObservers der Klasse Observable auf D 3 3 Interface DialogAktion Regelt den Zugriff auf Dialogkomponenten von Aktionen die sie auf solche beziehen Methoden setDlgKomponente DlgKomponente void Setzt die Dialogkomponente fiir die Aktion getDlgKomponente gt DlgKomponente Liefert die Dialogkomponente dieser Aktion D 3 4 Interface EventHolder Dieses Interface dient dazu Ereignisse zu erzeugen d h in der implementierenden Klasse abzulegen und die erzeugten Ereignisse zu holen Methoden getEvents gt Vector Gibt einen Vector der erzeugten Ereignisse zur ck storeEvent Object void Speichert das bergebene Ereignis Es wird hier nur eine Instanz der Klasse Object verlangt weil es je nach Zusammenhang Simulation oder exportierter Quelltext um die Klasse Ereignis oder String geht 183 Package score Aktionen Kapitel D Programmdokumentation 184 D 3 5 Interface HistoryAktion Dieses Inter
438. wird nach der Inititalisierung betreten Das einzige Ereignis das in diesem Zustand zu einer Reaktion des Systems f hrt ist das Bet tigen des Ein Ausschalters Zustand on In diesem Zustand befindet sich das Statechart wenn der Anrufbeantworter einge schaltet ist Der Default Einstieg verweist auf den Unterzustand waiting so dass der Automat beim Einschalten immer in diesen Zustand bergeht Beim Betreten des Zustands waiting werden die folgenden Aktionen ausgef hrt off Timer Der Timer wird angehalten Dies hat nur dann eine Bedeutung wenn durch Dr cken von Stop ein Abspielvorgang unterbrochen wurde 167 Ein einfacher Anrufbeantworter Kapitel A Beispiele 168 set DLG6 10 Die Dialogvariable DLG6 die zum Timer geh rt wird auf den Wert 10 Sekunden gesetzt Dies ist in diesem einfachen Modell die Zeit die s mtliche Ansagen und abgespielten Nachrichten ben tigen set DLG3 Anrufe Hierdurch wird die Dialogvariable DLG3 die dem Textfeld ent spricht auf den aktuellen Wert der Variablen Anrufe gesetzt Im Zustand on befinden sich einige Pfeile die den Zustand waiting mit anderen Zust nden verbinden Diese Pfeile sind in der Abbildung A 11 nur durch ihre ausl sen den Ereignisse beschriftet Eine genauere Beschreibung wird in der folgenden Liste gegeben CALL Dieser bergang wird ausgef hrt wenn ein neuer Anruf eingeht w hrend sich der Anrufbeantworter im Wartezustand befindet Es ist zu beachten da
439. xt O Konstruktor mit DefaultAktion DigText String 255 Package score LogDM Kapitel D Programmdokumentation Konstruktor setzt den Label setVisible boolean void berschreibt die Methode der Klasse D gKomponente Setzt sichtbar oder unsichtbar setOn gt void berschreibt die Methode der Klasse D gKomponente wird ignoriert setOff void berschreibt die Methode der Klasse D gKomponente wird ignoriert toString String berschreibt die Methode der Klasse D gKomponente Liefert die String Repr sentation createComponent Component berschreibt die Methode der Klasse D gKomponente Erzeugt eine grafische Komponente setText String void setzt den Text des Feldes setFromVar String gt void berschreibt die Methode der Klasse DlgKomponente Setzt dieses Textfeld von einer Variablen actionPerformed ActionEvent gt void berschreibt die Methode der Klasse D gKomponente Reagiert auf eine Textfeld nderung mit Return und setzt die zugeh rige Variable save EasyFileWriter gt void berschreibt die Methode der Klasse D gKomponente Speichert das Textfeld exportQT EasyFileWriter gt void berschreibt die Methode der Klasse D gKomponente Exportiert den Quelltext zum Textfeld D 10 10 Klasse DigTimer extends score LogDM DlgKomponente implements java lang Runnable Die Dialogkomponente Timer Konstruktoren DigTimer Konstruktor mit Defa
440. zen indem im Statechart ge zielt Zust nde aktiviert und Ereignisse ausgel st werden k nnen So k nnen alle berg nge der Reihe nach untersucht werden Der Dialog zur Simulation In Abschnitt 69 wurde beschrieben wie sich Statecharts um einen Benutzerdialog er weitern lassen indem etwa ein Dialog Editor angeboten wird In diesem Fall sollte die Simulation naheliegenderweise mit dem Benutzerdialog arbeiten Der Tester dr ckt die Kn pfe die der Benutzer des Systems auch ausw hlen k nnte und der Simulator f hrt die entsprechenden Reaktionen durch Dies erfordert nat rlich die Verbindung des Dialog Editors beziehungsweise Dialog Verwalters nicht nur mit dem Statechart Editor sondern auch mit dem Simulator Eine derartige Einbindung des Dialogs er ffnet der Simulation auch eine einfache und elegante M glichkeit mit Ereignissen Aktionen und Bedingungen umzugehen die vom Benutzer als Quelltext zum Statechart hinzugef gt wurden Es bietet sich n mlich an diese Elemente durch einen eigenst ndigen Dialog zu simulieren auf die sen wollen wir jedoch erst im Zusammenhang mit der Verwendung von Quelltext in der Simulation Seite 79 genauer eingehen Interessant ist auch die M glichkeit den Globalzustand des Systems ber den Statechart Editor beeinflussen zu k nnen So k nnte der Benutzer etwa einige Zust nde von Hand aktivieren oder deaktivieren ohne dass dies auf eventuell umst nd lichem Weg ber die Benutzerschnittstel
441. zt removeSubStates gt void L scht die Eintragung s mtlicher Unterzust nde replaceSubState LogPunkt LogPunkt void 269 Quelltext Export 270 Kapitel D Programmdokumentation berschreibt die Methode der Klasse LogPunkt Ersetzt einen Unterzustand durch einen anderen Wird der erste logische Punkt nicht als Unterzu stand gefunden geschieht nichts substatesExist boolean berschreibt die Methode der Klasse LogPunkt Gibt true zur ck wenn mindestens ein Unterzustand existiert getSubStates Vector Gibt einen Vector mit den Unterzust nden zur ck exportSubstates EasyFileWriter gt void Exportiert die Unterzust nde in des EasyFile Writer D 11 16 Klasse ZustOR extends score LogSCM ZustKomplex Diese Klasse stellt einen OR verfeinerten Zustand dar Konstruktoren ZustOR Der Konstruktor erzeugt einen OR Zustand die History ist leer und es existiert kein Default Einstieg ZustOR LogPunkt Erschafft einen neuen ZustOR der einen alten logischen Punkt ersetzt addSubPoint LogPunkt void F gt einen logischen Punkt als direkten Unterpunkt dieses Zustandes hinzu F r diesen wird der Oberzustand gesetzt removeSubPoint LogPunkt gt void Entfernt einen Unterzustand Falls dieser in der Liste der direkten Unterzust nde dieses Zustands vorhanden war wird der Oberzustand des entferntes Zustands auf Null gesetzt setDefault LogPunkt void Se
442. zu halten 12 gl Abschnitt 2 2 3 3ygl Abschnitt 2 5 2 l4F r eine genauere Beschreibung dieser Schwierigkeiten sei auf den Abschnitt der Parametrisierung auf Seite 94 verwiesen Kapitel 3 Werkzeuge f r Statecharts 3 2 Tester 3 2 1 Der Verifikator Die grafische Sprache der Statecharts ist sehr flexibel Doch nicht alle m glichen Bil der die den Formalismen entsprechen k nnen auch als g ltige Statecharts interpretiert werden Auf einige Fehler die den Grundregeln widersprechen kann der Statechart Editor schon selbst hinweisen beziehungsweise derartige Konstruktionen gar nicht erst erm glichen So sollten alle berg nge ordnungsgem mit Zust nden verbunden sein Konnektoren d rfen keine Unterzust nde enthalten etc Die meisten m glichen Fehlerquellen k nnen jedoch nicht auf so einfache Weise ausgeschlossen werden Ei nige Konsistenzbedingungen k nnen zum Beispiel erst nach einigen Editierschritten erf llt werden und daher kann ihre endg ltige Nichterf llung erst dann festgestellt werden wenn das Statechart fertig definiert ist Um diese berpr fung vorzunehmen ist ein weiteres Werkzeug notwendig welches das konstruierte Statechart testet der Verifikator In den folgenden Abschnitten werden wir auf einige der interessanteren Probleme in diesem Zusammenhang eingehen Konstruktionsfehler Es sind fast beliebig viele Testfragen denkbar die durch ein solches Werkzeug ber pr ft werden sollten Zun
443. zustand gefunden wird getCoordsOfPenultimateTo GrafModellSicht GrafPunkt Point2D Double Gibt die Zeichenkoordinaten des vorletzten Punktes vor dem bergebenen Punkt zur ck oder Null wenn dieser Punkt nicht als Endpunkt gefunden wird getCoordsOfFirstTouching GrafModellSicht GrafPunkt Point2D Double Gibt die Zeichenkoordinaten des Anfangshooks dieses Pfeiles auf dem bergebenen Punkt zur ck getCoordsOfLastTouching GrafModellSicht GrafPunkt Point2D Double Gibt die Zeichenkoordinaten des Endhooks dieses Pfeiles auf dem bergebenen Punkt zur ck addPosOfCrossing Vector GrafPunkt Vector GrafModellSicht gt void F gt zu dem Vector die Positionen der Hooks hinzu deren Verbindung den Rand des bergebenen Zustands schneidet addHooksJustOutside Vector GrafPunkt void F gt zum bergebenen Vector die Hooks dieses Pfeils hinzu die gerade au erhalb des bergebe nen GrafPunkts liegen getMidVisibleContainers Vector Gibt einen Vector mit den Zust nden zur ck in denen s mtliche Hooks dieses Pfeils liegen Dabei wird nur die Lage des Hooks und nicht der tats chliche Anker betrachtet getAllSuperstates Vector Gibt einen Vector mit allen Zust nden zur ck die oberhalb mindestens eines der Start oder Endpunkte dieses Pfeils liegen getHooksOf GrafPunkt gt Vector Gibt die Hooks dieses Pfeils zur ck die am bergebenen GrafPunkt liegen getSuperList
Download Pdf Manuals
Related Search
Related Contents
Moog Videolarm PFD7CN-3 surveillance camera Sandberg Mini DP - Mini DP M-M 2m Powerwave 64 User Manual Affordable, high performance projectors for education or business Manual - RayBiotech, Inc. Copyright © All rights reserved.
Failed to retrieve file