Datatypes can be thought of as simple classes. They have
no attributes, and any operations on them must have no
side-effects. A useful analogy is primitive datatypes in a
language like Java. The integer “3” stands on its
own -it has no inner structure. There are operations (for
example addition) on the integers, but when I perform
3 + 4
the result is a new number, “3”
and “4” are unchanged by the exercise.
Within UML 1.4, DataType
is a
sub-class of the Classifier
metaclass. It
embraces the predefined primitive types (
byte
, char
,
double
, float
,
int
, long
and
short
), the predefined enumeration,
boolean
and user defined enumeration
types.
![]() | Note |
---|---|
Also |
Within ArgoUML new datatypes may be created using the
New datatype
button on the property tabs of
the model and packages (in which case the new datatype is
restricted in scope to the package), as well as the properties
tab for datatype.
Datatypes can also be created with the tool
in the diagram toolbar of a class diagram.
The UML 1.4 standard
allows user defined datatypes to be placed on
class diagrams to define their inheritence structure.
This is also possible in ArgoUML.
It is represented on the diagram by a box with two compartments, of
which the top one is marked with
«datatype»
,
and contains the name.
The lower one contains operations.
The details tabs that are active for datatypes are as follows.
ToDoItem
Standard tab.
Properties
See Section 16.3.2, “ Datatype Property Toolbar ” and Section 16.3.3, “ Property Fields For Datatype ” below.
Documentation
Standard tab. See Section 13.4, “ Documentation Tab ”.
Source
Standard tab. Unused. One would expect a class declaration for the new datatype to support code generation.
Tagged Values
Standard tab. In the UML metamodel,
Datatype
has the following standard tagged
values defined.
persistence
(from the
superclass, Classifier
). Values
transitory
, indicating state is
destroyed when an instance is destroyed or
persistent
, marking state is preserved
when an instance is destroyed.
![]() | Tip |
---|---|
Since user defined datatypes are enumerations, they have no state to preserve, and the value of this tagged value is irrelevant. |
semantics
(from the
superclass, Classifier
). The
value is a specification of the semantics of the
datatype.
derived
(from the
superclass, ModelElement
).
Values true
, meaning the class
is redundant -it can be formally derived from other
elements, or false
meaning it
cannot.
![]() | Tip |
---|---|
While formally available, a derived
datatype does not have an obvious value, and so
datatypes should always be marked with |
Go up
Navigate up through the package structure.
New datatype
This creates a new datatype (see Section 18.6, “ Class ”) within the same package as the current datatype.
![]() | Tip |
---|---|
While it can make sense to create datatypes this way, it can be clearer to create them within the package or model where you want them. |
New Enumeration
This creates a new Enumeration (see Section 16.4, “ Enumeration ”) in the same package as the datatype, navigating immediately to the properties tab for that Enumeration.
New Operation
This creates a new operation within the datatype, navigating immediately to the properties tab for that operation.
New Stereotype
This creates a new Stereotype (see Section 16.6, “ Stereotype ”) within the same package as the datatype, navigating immediately to the properties tab for that stereotype.
Delete
This deletes the datatype from the model.
Name
Text box. The name of the datatype. The primitive datatypes all have lower case names, but there is no formal convention.
![]() | Note |
---|---|
The default name supplied for a newly created
datatype is the empty string “”. Datatypes
with empty string names will appear with the name
|
Namespace
Drop down selector with navigate button. Allows changing the namespace for the datatype. This is the package hierarchy.
Modifiers
Check box, with entries
Abstract
, Leaf
and
Root
.
Abstract
is used to
declare that this datatype cannot be instantiated,
but must always be specialized.
![]() | Note |
---|---|
ArgoUML provides no mechanism for specializing datatypes, so this check box is of little use. |
Leaf
indicates that this
datatype can have no further sub-types, while
Root
indicates it is a top level
datatype.
![]() | Tip |
---|---|
You can define the specialization of datatypes in a class diagram by drawing generalizations between them. |
Visibility
Radio box, with entries
public
, private
,
protected
, and
package
.
Records the visibility for the Datatype.
Client Dependencies
Text area. Lists any elements that depend on this datatype.
![]() | Caution |
---|---|
It is not clear that dependencies between datatypes makes much sense. |
Supplier Dependencies
Text area. Lists any elements that this datatype depends on.
![]() | Caution |
---|---|
It is not clear that dependencies between datatypes makes much sense. |
Generalizations
Text area. Lists any datatype that generalizes this datatype.
Specializations
Text box. Lists any specialized datatype (i.e. for which this datatype is a generalization.
Operations
Text area. Lists all the operations defined on this datatype. Button 1 double click navigates to the selected operation. button 2 click brings up a pop up menu with two entries.
Move Up
. Only available
where there are two or more operations, and the
operation selected is not at the top. It is moved
up one.
Move Down
. Only available
where there are two or more operations listed, and
the operation selected is not at the bottom. It is
moved down one.
See Section 18.8, “ Operation ” for details of operations.
![]() | Caution |
---|---|
ArgoUML treats all operations as equivalent.
Any operations created here will use the same
mechanism as operations for classes. Remember that
operations on datatypes must have no side effects
(they are read-only). This means the |