195 lines
4.9 KiB
Plaintext
195 lines
4.9 KiB
Plaintext
/** \page uml-legend UML Legend
|
|
|
|
This page describes the notation for several diagrams used in the
|
|
documentation, which is a slight variation of UML.
|
|
|
|
|
|
<h2>Classes</h2>
|
|
|
|
Classes are represented by boxes, containing there names:
|
|
|
|
\dot
|
|
digraph G {
|
|
node [shape=record, fontname=Helvetica, fontsize=10];
|
|
fontname=Helvetica; fontsize=8;
|
|
"Concrete Class";
|
|
"Abstract Class" [color="#a0a0a0"];
|
|
Interface [color="#ff8080"];
|
|
}
|
|
\enddot
|
|
|
|
(In most cases, the attributes and operations are left away, for
|
|
better readability. Just click on it, to get to the detailed
|
|
description.)
|
|
|
|
Of course, in C++, there are no interfaces, but here, we call a class,
|
|
which has only virtual abstract methods, and so does not provide any
|
|
functionality, an interface.
|
|
|
|
Templates get a yellow background color:
|
|
|
|
\dot
|
|
digraph G {
|
|
node [shape=record, fontname=Helvetica, fontsize=10,
|
|
fillcolor="#ffffc0", style="filled"];
|
|
fontname=Helvetica; fontsize=8;
|
|
"Concrete Class Template";
|
|
"Abstract Class Template" [color="#a0a0a0"];
|
|
"Interface Template" [color="#ff8080"];
|
|
}
|
|
\enddot
|
|
|
|
|
|
<h2>Objects</h2>
|
|
|
|
In some cases, an example for a concrete constellation of objects is
|
|
shown. An object is represented by a box containing a name and the
|
|
class, separated by a colon.
|
|
|
|
\dot
|
|
digraph G {
|
|
node [shape=record, fontname=Helvetica, fontsize=10];
|
|
edge [arrowhead="open", labelfontname=Helvetica, labelfontsize=10,
|
|
color="#404040", labelfontcolor="#000080"];
|
|
fontname=Helvetica; fontsize=10;
|
|
|
|
"x: A" -> "y1: B";
|
|
"x: A" -> "y2: B";
|
|
}
|
|
\enddot
|
|
|
|
The names (\em x, \em y, and \em z) are only meant within the context
|
|
of the diagram, there needs not to be a relation to the actual names
|
|
in the program. They should be unique within the diagram.
|
|
|
|
Classes and objects may be mixed in one diagram.
|
|
|
|
|
|
<h2>Associations</h2>
|
|
|
|
\dot
|
|
digraph G {
|
|
node [shape=record, fontname=Helvetica, fontsize=10];
|
|
edge [arrowhead="open", labelfontname=Helvetica, labelfontsize=10,
|
|
color="#404040", labelfontcolor="#000080",
|
|
fontname=Helvetica, fontsize=10, fontcolor="#000080"];
|
|
fontname=Helvetica; fontsize=10;
|
|
A -> B [headlabel="*", taillabel="1", label="x"];
|
|
}
|
|
\enddot
|
|
|
|
In this example, one instance of A refers to an arbitrary number of B
|
|
instances (denoted by the "*"), and each instance of B is referred by
|
|
exactly one ("1") A. The label \em x is the name of the association,
|
|
in most cases the name of the field, e.g. A::x.
|
|
|
|
Possible other values for the \em multiplicity:
|
|
|
|
<ul>
|
|
<li> a concrete number, in most cases "1",
|
|
<li> a range, e.g. "0..1",
|
|
<li> "*", denoting an arbitrary number.
|
|
</ul>
|
|
|
|
|
|
<h2>Implementations and Inheritance</h2>
|
|
|
|
\dot
|
|
digraph G {
|
|
node [shape=record, fontname=Helvetica, fontsize=10];
|
|
edge [arrowhead="none", dir="both", arrowtail="empty",
|
|
labelfontname=Helvetica, labelfontsize=10, color="#404040",
|
|
labelfontcolor="#000080"];
|
|
fontname=Helvetica; fontsize=10;
|
|
A[color="#ff8080"];
|
|
B[color="#ff8080"];
|
|
C;
|
|
D;
|
|
A -> B;
|
|
A -> C [style="dashed"];
|
|
C -> D;
|
|
}
|
|
\enddot
|
|
|
|
In this example,
|
|
|
|
<ul>
|
|
<li> the interface B extends the interface A,
|
|
<li> the class C implements the interface A, and
|
|
<li> the class D extends the class C.
|
|
</ul>
|
|
|
|
|
|
<h2>Template Instantiations</h2>
|
|
|
|
Template instantiations are shown as own classes/interfaces, the
|
|
instantiation by the template is shown by a yellow dashed arrow:
|
|
|
|
\dot
|
|
digraph G {
|
|
node [shape=record, fontname=Helvetica, fontsize=10];
|
|
edge [arrowhead="none", arrowtail="empty", dir="both",
|
|
labelfontname=Helvetica, labelfontsize=10, color="#404040",
|
|
labelfontcolor="#000080"];
|
|
fontname=Helvetica; fontsize=10;
|
|
|
|
A[color="#ff8080"];
|
|
B[color="#ff8080"];
|
|
C[color="#ff8080", fillcolor="#ffffc0", style="filled"];
|
|
C_A[color="#ff8080", label="C \<A\>"];
|
|
C_B[color="#ff8080", label="C \<A\>"];
|
|
D;
|
|
|
|
C -> C_A [arrowhead="open", arrowtail="none", style="dashed",
|
|
color="#808000"];
|
|
C -> C_B [arrowhead="open", arrowtail="none", style="dashed",
|
|
color="#808000"];
|
|
A -> C_A;
|
|
B -> C_B;
|
|
C_A -> D [style="dashed"];
|
|
}
|
|
\enddot
|
|
|
|
In this example, the interface template C uses the template argument
|
|
as super interface.
|
|
|
|
|
|
<h2>Packages</h2>
|
|
|
|
Packages are presented by dashed rectangles:
|
|
|
|
\dot
|
|
digraph G {
|
|
node [shape=record, fontname=Helvetica, fontsize=10];
|
|
edge [arrowhead="none", arrowtail="empty", dir="both",
|
|
labelfontname=Helvetica, labelfontsize=10, color="#404040",
|
|
labelfontcolor="#000080"];
|
|
fontname=Helvetica; fontsize=10;
|
|
|
|
subgraph cluster_1 {
|
|
style="dashed"; color="#000080"; fontname=Helvetica; fontsize=10;
|
|
label="package 1";
|
|
|
|
A;
|
|
B [color="#a0a0a0"];
|
|
}
|
|
|
|
subgraph cluster_2 {
|
|
style="dashed"; color="#000080"; fontname=Helvetica; fontsize=10;
|
|
label="package 2";
|
|
|
|
C;
|
|
D [color="#a0a0a0"];
|
|
E
|
|
}
|
|
|
|
A -> C;
|
|
B -> D;
|
|
D -> E;
|
|
E -> A [arrowhead="open", arrowtail="none"];
|
|
}
|
|
\enddot
|
|
|
|
Packages may be nested.
|
|
|
|
*/ |