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.