13.7. Das Register Randbedingungen

Randbedingungen sind einer der in UML enthaltenen Erweiterungsmechanismen. ArgoUML ist mit einem leistungsf??higen Randbedingungseditor ausger??stet, der auf der im UML 1.4-Standard definierten Objekt Randbedingungssprache (Object Constraint Language; OCL) basiert.

[Achtung]Achtung

Die OCL-Editorimplementierung f??r ArgoUML V0.24 unterst??tzt keine OCL-Randbedingungen au??er Klassen und Eigenschaften.

Dies ist machmal eine sehr starke Einschr??nkung von OCL. Obwohl die UML-Spezifikation bestimmt, dass es f??r jedes Modellelement Randbedingungen geben kann, spezifiziert die OCL-Spezifikation diese nur f??r Klassen/Schnittstellen und Operationen im zul??ssigen Kontext.

Vor OCL 2.0 wird keine generellere Definition von erlaubten Kontexten eingef??hrt. Der Schl??ssel ist, dass Sie f??r jede ben??tigte Kontextdefinition einen kontextspezifischen Klassifizierer definieren m??ssen. Zum Beispiel einen Klassifizierer, der mit dem gleichen Schl??sselwort verkn??pft wird. Die Ersteller der OCL-Spezifikation f??hren aus, dass dies kein Fehler der OCL-Spezifikation ist, aber selbst f??r UML einige Integrationsschritte erfordert. Es sieht so aus, das die Personen, die UML spezifizierten dachten, das dies in OCL spezifiziert wird (aus diesem Grund tun wir einen ersten Schritt in Richtung OCL 2.0).

Um die Geschichte abzuk??rzen, scheint es so, dass es im Moment die einfachste L??sung f??r ArgoUML ist, den OCL-Eigenschaftsbereich nur f??r solche Modellelemente freizugeben, f??r die es aktuell eine Definition der kontextsensitiven Klassifizierer in der OCL 1.4 gibt. Dies sind (siehe oben) Klassen/Schnittstellen und Eigenschaften.

Der Standard definierte eine kleine Anzahl von Randbedingungen vor ( zum Beispiel die Bedingung xor ??ber einen Satz von Assoziationen, was anzeigt, dass nur einer in einer bestimmten Instanz bekannt ist).

Der Standard hat auch eine Anzahl von Umst??nden im Auge, in denen generelle Randbedingungen hilfreich sein k??nnen:

Abbildung 13.14, „ Ein typisches Register Randbedingungen im Bereich Details “ zeigt ein typisches Register Randbedingungen f??r ein Modellelement in ArgoUML (in diesem Fall eine Klasse).

Abbildung 13.14. Ein typisches Register Randbedingungen im Bereich Details

Ein typisches Register Randbedingungen im Bereich Details


Im oberen Bereich des Registers befinden sich eine Reihe von Symbolen.

Der Rumpf des Registers Randbedingungen enth??lt zwei Felder, ein kleineres auf der linken Seite und ein gr??sseres auf der rechten Seite. Die beiden sind durch zwei kleine Pfeil-Schaltfl??chen getrennt, welche die Gr??sse der Felder steuern.

Eine feiner abgestimmte Steuerung kann durch eine Taste 1- Bewegung erfolgen, indem Sie die Trennungsleiste nach links und nach rechts verschieben.

Das linke Feld ist mit Name Bedingung bezeichnet und listet alle Bedingungen auf (wenn es welche gibt) so weit sie f??r das markierte Modellelement definiert wurden. Eine Bedingung kann durch einen Taste 1-Klick markiert werden.

Das rechte Feld ist mit Vorschau bezeichnet und enth??lt den Text der Bedingung. Dieses Feld zeigt nur einen Inhalt an, wenn eine Bedingung markiert wurde. Ist eine Bedingung f??r das Feld zu gro??, erscheint rechts eine Scrollleiste.

13.7.1. Der Bedingungs-Editor

Dieser wird durch die Schaltfl??che Editiere Bedingung im Register Bedingungen aufgerufen. Der Bedingungseditor nimmt das ganze Register ein (siehe Abbildung 13.16, „Dialog f??r das Konfigurieren der Bedingungen“).

Abbildung 13.16. Dialog f??r das Konfigurieren der Bedingungen

Dialog f??r das Konfigurieren der Bedingungen


Im oberen Bereich des Registers befinden sich eine Reihe von Symbolen.

  • Editieren abbrechen. Dies beendet den Bedingungseditor ohne die ??nderungen abzuspeichern und kehrt zum Haupt-Bedingungen-Register zur??ck.

  • Pr??fe OCL-Syntax. Diese Schaltfl??che ruft eine vollst??ndige Syntaxpr??fung der im Editor geschriebenen OCL auf. Ist die Syntax g??ltig, wird die Bedingung gespeichert und kehrt zum Haupt-Bedingungen-Register zur??ck. Wenn die Syntax ung??ltig ist, erl??utert ein Dialogfenster das Problem.

    [Warnung]Warnung

    Ob die Typpr??fung eingebunden wird, sollte mit der Schaltfl??che Bedingungseditor konfigurieren einstellbar sein (siehe unten). ArgoUML V0.20 pr??ft aber immer und lehnt jede Bedingung mit dem kleinsten Fehler ab.

  • Bedingungseditor konfigurieren. Dies ist ein Dialog, um die Optionen des Bedingungseditors zu konfigurieren. Er ist auch im Haupt-Bedingungen -Register verf??gbar und wird dort detailliert beschrieben (siehe Abschnitt 13.7, „Das Register Randbedingungen“ ).

Rechts von der Symbolleiste befindet sich ein Markierfeld, das als Syntaxunterst??tzung bezeichnet ist (standardm????ig nicht markiert). Dieses schaltet die Syntaxunterst??tzung im Bedingungseditor ein.

Wenn die Syntaxunterst??tzung eingeschaltet ist, erscheinen sechs DropDown-Men??s in einer Zeile unmittelbar unterhalb der Symbolleiste. Diese enthalten Standardtemplates f??r OCL, die in die editierte Bedingung eingef??gt werden, sofern sie ausgew??hlt werden.

Die Syntaxunterst??tzung kann in ein separates Fenster gebracht werden, indem man mit einer Taste 1-Bewegung des kleinen, links befindlichen Trenners die Zeile mit den DropDown-Men??s aus dem Fenster bewegt.

  • Allgemein. Allgemeine OCL Konstrukte. Eintr??ge: inv (f??gt eine Invarianz ein); pre (f??gt eine Vorbedingung ein); post (f??gt eine Nachbedingung ein); self (f??gt eine Referenz auf sich selbst ein); @pre (f??gt eine Referenz auf einen Wert beim Start einer Operation ein); und result (f??gt eine Referenz auf ein vorhergehendes Ergebnis ein).

  • Operatoren. Relationale Operatoren und Klammern. Eintr??ge: =; <>; <; >; <=; >=; und ().

  • Nummern. Arithmetische Operatoren und Funktionen. Eintr??ge: +; -; *; /; mod; div; abs; max; min; round; und floor.

  • Zeichenketten. Funktionen f??r Zeichenketten. Eintr??ge: concat; size; toLower; toUpper; und substring.

  • Booleans. Logische Funktionen. Eintr??ge: or; and; xor; not; implies; und if then else.

  • Sammlungen. Operatoren und Funktionen f??r Sammlungs—Mengen , S??tzen und Sequenzen. Die grosse Anzahl von Funktionen ist in Untergruppen unterteilt.

    • Allgemein. Funktionen, die auf alle Sammlungstypen anwendbar sind. Eintr??ge: Collection {} (f??gt eine neue Sammlung ein); Set {} (f??gt einen neuen Satz ein); Bag {} (f??gt eine neue Menge ein); Sequence {} (f??gt eine neue Sequenz ein); size; count; isEmpty; notEmpty; includes; includesAll; iterate; exists; forAll; collect; select; reject; union; intersection; including; excluding; und sum.

    • S??tze. Operatoren und Funktionen die nur auf S??tze anwendbar sind. Eintr??ge: - (set difference); und symmetricDifference.

    • Sequenzen. Funktionen, die nur auf Sequenzen anwendbar sind. Eintr??ge: first; last; at; append; prepend; und subSequence.

Der Rest des Registers beinhaltet ein beschreibbares Textfeld, welches den zu editierenden Text enth??lt. Die Maus-Schaltfl??chen weisen innerhalb des editierbaren Textfeldes ihr Standardverhalten auf (siehe Abschnitt 8.2, „Generelles Verhalten der Maus in ArgoUML“).

Zus??tzlich k??nnen Ausschneiden-, Kopieren- und Einf??gen-Operationen ??ber die Tastenk??rzel Strg-X, Strg-C und Strg-V aufgerufen werden.