P
H
O
T
O
B
Y
F
A
B
R
I
K
A
S
I
M
F
In an IDAR graph, boxes represent objects. If a class has only one
instance (the most common case),
then the box is labeled with the class
name. An arrow connecting two boxes
means that the upper object commands (and thus controls) the lower
object. Such command arrows always
point down. In Figure 3, the Fax object is the topmost controller, which
commands the Receive and Send
objects, which in turn control ImageProc (image processing). Command arrows may be labeled with the names of
commands that are sent. For example,
Fax commands Send to sendFax.
Note that ImageProc has two bosses.
Having multiple bosses is uncommon
in human organizations but is common
(and encouraged) in software to prevent
redundant implementations.
Objects need to communicate in
more ways than commands. For example, they often need to exchange data
and inform each other about events
and results. In an IDAR graph, such
non-command communications are
called notices and are shown as floating
arrows. For example, in Figure 3, Send
tells Fax that transmission is done via
the done notice.
Both commands and notices are
merely method calls. This means that
the public methods in each object are
divided into two groups: commands
and notices. Software designers must
give careful thought to which methods
will be commands, because they determine the hierarchy. Commands and
notices have constraints, which are
precisely defined later in this article.
A note about terminology: when you
call a command (method) in an object,
you are said to be commanding (or
sending a command to) that object; when you
call a notice in an object, you are
notifying (or sending a notice to) that object.
More Features of IDAR Graphs
A graph of a design should portray other salient features, such as threading,
data flows, and the use of indirection.
The complete IDAR graph of the fax
machine in Figure 4 exemplifies some
of these additional features.
The horizontal line above the Con-
nect and Negotiate boxes is analo-
gous to a horizontal line in an organi-
zational chart: it groups subordinates
under their manager. In an IDAR graph,
such a rail (as it’s known) is more gener-
al, as it indicates that all objects above
the line (called superiors or bosses) com-
mand all objects below it (called subor-
dinates or workers). In this fax machine,
two superiors (Receive and Send)
command three subordinates (Con-
nect, Negotiate, and ImageProc).
An object containing a thread is said
to be active and is denoted with double
vertical lines on each side of its box.
This notation was taken from UML.
In the fax machine design in Figure 4,
Fax and ImageProc are active.
Indirect method-calls are indicated
by a bubble (circle) placed on the tail of
the appropriate arrow. Such indirection
can be explicit in the source code or im-
plicit using polymorphic inheritance.
Indirection is commonly used for no-
tices sent from a subordinate to one of
multiple superiors, such as the con-
nected notice in Figure 4 that is sent
from Connect to Receive or Send.
A subsystem is a separate hierarchy (a separate graph) with a subman
(subsystem manager) as its topmost
object. A subman controls its subsystem and is portrayed as an elongated
hexagon. In a graph that commands a
subsystem, only the subman is drawn.
For example, in Figure 4, Printer and
Scanner are the submans of their re-