There will exist some base set of methods and types in any Object
Oriented System. Usually this will include:
-
Creation [Constructors in C++]
-
Destruction [Destructors ...]
-
Initialization
In an Open Distributed System, we will wish to augment this list.
We may include:
-
Location [Adding name to directory...]
-
Performance [Adding Statistics retrieval methods to the base class
- these may be operations for invoking stats or for event
reporting]
-
Availability [Adding Probe/Loopback/Echo methods]
-
Replication Methods...
-
Migration Methods...
These will be the base set of methods that form the toolset the
application programmer draws from when addressing the transparencies
required which in themselves derive from the viewpoints described at
the beginning of this chapter. The published interface for these
methods allows prototyping by the applications programmer, and thus
facilitates distributed application building and has several desirable
side affects such as change control (new versions can coexist since
the version can be made part of the interface specification).
An object may have multiple interfaces, of course. This can be for
administrative reasons, or else simply to separate management, service and
access control, for example.
Finally, an interface might contain state visible outside of the
object. This can be used so that information can be lodged in an
interface and be available to the object at succesive invocations of
methods. This can support a whiteboard style of communication
between objects.
This set of base methods and their implementation and typical
use are described further in Chapter 7.
There are many problems still to be solved in Distributed Systems.
Most of these stem from scaling. The advantages of incremental growth,
and fault tolerance may be outweighed by disadvantages of
communications costs, replication of effort (operating system and
application software
required at many sites instead of one or a few, distributed
authentication, etc. etc.).