Constraints are one of the extension mechanisms provided for UML. ArgoUML is equipped with a powerful constraint editor based on the Object Constraint Language (OCL) defined in the UML 1.3 standard.
![]() | Caution |
---|---|
The OCL editor implementation for ArgoUML V0.14 doesn't support OCL constraints for elements other than Classes and Features. This is something of a general restriction of OCL. Although the UML specification claims that there may be a constraint for every model element, the OCL specification only defines classes/interfaces and operations as allowable contexts. It is not before OCL 2.0 that a more general definition of allowable contexts is introduced. The key issue is that for each context definition you need to define what is the contextualClassifier, i.e., the classifier that will be associated with the self keyword. The creators of the OCL specification claim that this is not an issue for the OCL specification, but rather for UML or some integration task force. Conversely, it seems that the UML specification people seem to expect this to be defined in the OCL specification (which is why we did a first step in that direction in OCL 2.0). So, to cut a long story short, it appeared that the simplest solution for ArgoUML at the moment would be to enable the OCL property panel only for those model elements for which there actually exists a definition of the contextualClassifier in OCL 1.4. These are (s. above) Class/Interface and Feature. |
The standard pre-defines a small number of constraints (for example
the xor
constraint over a set of associations
indicating that only one may be manifest for any particular
instance).
The standard also envisages a number of circumstances where general purpose constraints may be useful:
To specify invariants on classes and types in the class model;
To specify type invariants for stereotypes;
To describe pre- and post-conditions on operations and methods;
To describe guards;
As a navigation language; and
To specify constraints on operations.
Figure 12.12, “A typical Constraints
tab on the details
pane” shows a typical
constraint tab for a artifact in ArgoUML (in this case a class).
Along the top of the tab are a series of icons.
New Constraint
. This creates a new constraint and
launches the constraint editor in the Constraints
tab
for that new constraint (see
Section 12.8.1, “The Constraint Editor”). The new constraint
is created with a context declaration for the currently selected
artifact.
![]() | Warning |
---|---|
It seems logical, that when a new constraint is created,
it needs to be edited. But ArgoUML V0.14 fails to start the OCL editor
upon creation; you have to do this by
primo selecting the new constraint first,
secundo rename it,
and tertio press the |
Delete Constraint
. The constraint currently selected
in the Constraint Name
box (see below) is
deleted.
![]() | Caution |
---|---|
In V0.14 of ArgoUML this button is not downlighted when it is not functional, i.e. when no constraint is selected. |
Edit Constraint
. This launches the constraint editor
in the Constraints
tab (see
Section 12.8.1, “The Constraint Editor”). The editor is
invoked on the constraint currently selected in the
Constraint Name
box.
![]() | Caution |
---|---|
In V0.14 of ArgoUML this button is not downlighted when it is not functional, i.e. when no constraint is selected. |
Configure Constraint Editor
. This a dialog to
configure options in the constraint editor (see
Figure 12.13, “Dialog box for configuring constraints”).
The dialog box has a check box for the following option.
Check type conformance of OCL
constraints
. OCL is strictly typed. At the early stages of
design it may be helpful to disable type checking, rather than follow
through all the detailed specification needed to get type
consistency.
At the bottom are two buttons, labeled
OK
(to accept the option changes) and
Cancel
(to discard the changes).
The main body of the constraints tab comprises two boxes, a smaller to the left and a larger one to the right. The two are separated by two small arrow buttons which control the size of the boxes.
Shrink Left
. Button 1 click on this icon shrinks
the box on the left. Its effect may be reversed by use of the
Shrink Right
button (see
below).
Shrink Right
. Button 1 click on this icon shrinks
the box on the right. Its effect may be reversed by use of the
Shrink Left
button (see
above).
Finer control can be achieved by using button 1 motion to drag the dividing bar to left and right.
The box on the left is titled Constraint Name
and
lists all the constraints (if any) so far defined for the selected
artifact. A constraint may be selected by button 1 click.
The box on the right is labeled Preview
and
contains the text of the constraint.
This box only shows some contents if a constraint is selected.
Where a constraint is too large for
the box, a scroll bar is provided to the right.
This is invoked through the use of the
Edit Constraint
button on the main
Constraints
tab. The constraint editor takes up the
whole tab (see
Figure 12.14, “Dialog box for configuring constraints”).
Along the top of the tab are a series of icons.
Cancel Edit Constraint
. This exits the constraint
editor without saving any changes and returns to the main
Constraints
tab.
Check OCL Syntax
. This button invokes a full
syntax check of the OCL written in the editor. If the syntax is
valid, the constraint is saved, and control returns to the main
Constraints
tab. If the syntax is not valid, a
dialog box explains the problem.
![]() | Warning |
---|---|
Whether type checking is included should be configurable with the
|
Configure Constraint Editor
. This a dialog to
configure options in the constraint editor. It is also available in
the main Constraints
tab and is discussed in detail
there (see
Section 12.8, “Constraints Tab”).
To the right of the toolbar is a check box labeled Syntax
Assistant
(unchecked by default), which will enable the
syntax assistant in the constraint editor.
If the syntax assistant is enabled, six drop down menus are provided in a row immediately below the toolbar. These provide standard templates for OCL that, when selected, will be inserted into the constraint being edited.
The syntax assistant can be made floating in a seperate window by button 1 motion on the small divider area to the left of the row of drop-down menus.
General
. General OCL
constructors. Entries: inv
(inserts an invariant);
pre
(inserts a pre-condition);
post
(inserts a post-condition);
self
(inserts a self-reference);
@pre
(inserts a reference to a value at the start
of an operation); and result
(inserts a reference
to a previous result).
Basic Operators
. Relational
operators and parentheses. Entries: =
;
<>
; <
;
>
; <=
;
>=
; and
()
.
Numbers
. Arithmetic operators and
functions. Entries: +
; -
;
*
; /
; mod
;
div
; abs
;
max
; min
;
round
; and floor
.
Strings
. String functions. Entries:
concat
; size
;
toLower
; toUpper
; and
substring
.
Booleans
. Logical
functions. Entries: or
; and
;
xor
; not
;
implies
; and
if then else
.
Collections
. Operators and functions
on collections—bags, sets and sequences. The large number of
functions are organized into sub-groups.
General
. Functions that apply to
all types of collection. Entries:
Collection {}
(insert a new collection);
Set {}
(insert a a new set);
Bag {}
(insert a new bag);
Sequence {}
(insert a new sequence);
size
; count
;
isEmpty
; notEmpty
;
includes
; includesAll
;
iterate
; exists
;
forAll
; collect
;
select
; reject
;
union
; intersection
;
including
; excluding
; and
sum
.
Sets
. Operators and functions
that apply only to sets. Entries: -
(set
difference); and
symmetricDifference
.
Sequences
. Functions that apply to
sequences. Entries: first
;
last
; at
;
append
; prepend
; and
subSequence
.
The remainder of the tab comprises a writable text area containing the text to be edited. The mouse buttons have their standard behavior within an editable text area (see Section 7.3, “General Mouse Behavior in ArgoUML”).
In addition, cut, copy and paste operations may be invoked through
the keyboard shortcuts Ctrl-X
,
Ctrl-C
and Ctrl-V
respectively.
![]() | Warning |
---|---|
There is a known problem with the V0.14 release of
ArgoUML. The Given the known problems with these menu buttons in the V0.14
release of ArgoUML (see Section 9.4.2, “ |