Unified Control-Data Flow Diagrams (UCDF) Reference
Data Holder and Data Flow Concepts
Data block
Any object holding data (information), i.e.
a variable or a class instance is shown
with an oval, or, for the larger ones, with
a rectangle with round corners.
The relation "has" is applicable.
Collections of objects are shown differently.
They are described separately, though they
mostly work in the same way.
HINSTANCE hInstance;
WNDCLASSEX myWindowCl
It can be updated, say, from a control block
and read by it.
Content of data flows
and data blocks
Data flows carry information between
control blocks and data holders. Often it is
useful to show content of these flows or
the data holders. Here are some examples.
Data flow Line
myWindowCl
is WNDCLASSEX
Often a type is less important than a name,
then the whole textual content of the block can
be modified to reflect it placing the type after
the name. "is" or "of" can be used.
More on name variation will be given later.
UCDF is not tired to any language,
so such name variations are permitted.
If it is not important to specify the data
holder, a data flow can be shown between
contol blocks directly.
Exchange is shown with the double ended arrow line
HINSTANCE hInstance;
WNDCLASSEX myWindowCl
If only a member of a structure is updated,
it is possible to show control flow directly
to it.
WNDCLASSEX myWindowCl
An arrow like this may mean
"any" member of myWindowCl is updated
HINSTANCE hInstance;
Dataholder information
content:
hInstance == 2345
A
hInstance
2345
A
B
2345
Documents as special
data holders and
control blocks
Documents are data holders which are external
to software. Usually, they are files or paper
documents like printouts, logs, instructions,
etc. Their content or parts of it can be
immediately drawn together with the file name
Logger
myfile.xml
<xml>
<node></node>
</xml>
As instructions,
documents may serve as control blocks.
click the button
OnButtonClick()
This means "the value of hInstance is 2345"
This means "the value of hInstance is updated
from a block A with 2345"
This means "somehow the block A
passes the value 2345 to the block B. "
An instruction suggests to click the button,
and it follows that OnButtonClick() is called
Often we do not care about the source of a
data flow. Then, the data flow arrow is drawn
from the content block. This construct shows
what "flows into", not "from where".
ASCII characters
input processor
hInstance
of HINSTANCE
However, this cannot be shown
as a statement of the C language,
for example. So, ';' is omitted.
A
B
This means "block A
passes informational content in the form of the HINSTANCE type
to the block B. "
of
HINSTANCE
Data flow control
What makes the dataflow to flow into a data
holder? Sometimes it can be shown with a
symbol "X" meaning a "valve".
a
b
X
f()
Constants
Constants are information.
v = "abc";
v
X
"abc"
A dataholder object holds information (data)
which can "flow-in" when something writes into
the dataholder and
"flow-out" when something reads from it. It is
shown with the curved thicker "data flow" line.
dataholder
Two dataholders
connected
A dataflow line can connect two dataholders,
if we do not know or do not care about
the mechanism of data transmission.
UCDF allows the informational content be shown with a
structure.
Strings representing script commands for an interpreter
can be shown as code blocks (not shown) with the
corresponding call-structure!
ASCII characters
char
XML tags
<myTag>, <yourTag>
XML element
contents
XML elements
An example can be shown with "is" relation.
Examples are useful. They give an opportunity to "feel"
what the information is.
<myTag>
commenting...
<yourTag />
</myTag>
Complex dataflow
When information I1 from A1 to B1 is passed as
a part of information I2 from A2 to B2, it is
called a complex data flow. It can be shown
from which code blocks and dataholders and to
which the information parts are transmitted.
It is done with the help of "has" relation on
the content nodes.
Example:
<xml>
<wrapper_tag>
data
</wrapper_tag>
</xml>
A2
server
B2
clinet
A1
xml wrapper
B1
xml unwrapper
string
string
<wrapper_tag>
data
</wrapper_tag>
data
as unicode chars
Dependency
between dataflows
When a module or a control block receives
multiple dataflows and exerts multiple
dataflows, and the structure of the module
is unknown or cannot be shown (it is treated
as a black box),
intermediate control blocks can be used.
MyModule
A
C
B
D
F
E
MyModule
A
C
B
D
F
E
They may contain descriptions, formulas, etc.,
or show more complex logical structure.
This is not a module's structure. This is how
it presents itself to the outside.
Type of the dataflow
content
Type is the description of structure.
It can be used to show what is passed as the
dataflow content.
myClass
of myClass
a:\data\mylogs
Next
str
of std::string
Often the type and structure of information
content does not match the type and structure
of a dataholder.
The simplest example: an xml element stored in
a string. In these cases showing the data
flow or dataholder content is essential for
correct and complete presentation of the
software behavior.
Unfortunately, the information structure often
cannot be deduced from the code alone and an
expert intervention is required.
<xml>
<wrapper_tag>
data
</wrapper_tag>
</xml>
str
of std::string
has
has
has
has
data flow out
data flow in
is
has
is
has
has
is
has