There were four mechanisms that I decided would be most useful to convey
program information:
- Function group windows. A Function group is a new construct independent of
the actual program code. It represents a group of functions and/or other
function groups, rather like directories in standard file systems, but with
files being replaced by functions. Each function group can be displayed as
a window, which contains labelled icons representing the contents of that
group. This provides a simple interface to the basic building blocks of the
program, and allows the user to arrange these in a simple and flexible
manner. The ability to colour-code icons in any manner desired also
provides a mechanism to impose order on the representation of the program.
- Code windows. These provide access to the underlying code of the program,
and display in text form the code for the individual functions used in the
program. Programs are inevitably going to be represented as text at some
level, and so it is important that the programmer can relate this text to the
more abstract representations used elsewhere in the navigator.
- The variable window. This presents a tree structure representing the files
and the scopes within them that make up the program. Clicking on a node in
the tree brings up a list of the variables declared within that scope. This
provides an alternative hierarchical representation of the program which
uses a completely different definition of program structure.
- The class window. This presents a graph structure representing the classes
in the program and the inheritance relationships between them. Clicking on
a node brings up a list of the members of the relevant class. This makes
use of the existing structure imposed by C++.
Selecting an item from any window will, where appropriate, highlight the
item in other windows. Thus, these windows provide an integrated collection
of views on a single program, each suited to different tasks. The views allow
the user to quickly home in on particular areas, switch quickly between
different areas of the program, and simultaneously view parts of
the program that may be widely separated in the actual code. The individual
components of each view can be related to each other easily, so that the
user is not confused by the different representations available.
Matthew Exon
2004-05-28