■ autonomous decision-making capabilities;
■ a series of available services;
■ a pool of controlled resources.
Control modules should be organized into a hierarchy of
control layers, so that higher-level control modules,
playing the role of clients, coordinate the control modules
below them, which play the role of servers.
Control modules have a standard communication
interface. They can play both the role of server of higher-
level control modules and the role of client of lower-level
Visibility between control modules
Control modules in the hierarchy need to communicate
with one another. Communication requires that some sort
of visibility must exist among components.
In such systems lower-level components are more stable
than higher-level components, which undergo frequent
reconfigurations according to rapidly evolving functional
requirements. How can the right visibility relationships
between the control modules be established?
Forces or tradeoffs
Visibility implies dependency with respect to changes, and
hence it has consequences for the entire system's design.
In hierarchical software architectures it is better to avoid
visibility loops between components at different layers.
This is achieved by offering the components two
The first mechanism, known as caller - provider and deeply
rooted in object-oriented programming, is involved when
an object invokes another object's method. In hierarchical
software architectures, it is convenient that higher-level
components (more volatile) have visibility of lower-level
components (more stable) but not vice versa. A client
requests services from a server by invoking the methods of
The second mechanism, the broadcaster - listener
mechanism, consists in giving the components the ability
to broadcast and listen to events. The broadcaster does
not know the identity of its listeners, which might change
over time. Conversely, the components that want to be
notified when an event is raised must know the identity of
the component that broadcasts that event. In hierarchical
software architectures it is convenient that lower-level
components communicate with the higher-level ones by