Before we begin the discussion of specific interfaces and class implementations, it is important to have a high level view of the different objects in the HDM. We also wish to describe the naming convention for HDM objects more fully. Figure represents the package hierarchy for HDM objects. There are three important terms we use below: interfaces, classes, and packages. Interfaces define (but do not implement) a set of APIs or specifications. For example, we can have an interface called Drawable which has the method drawMe(). All objects that implement Drawable are then expected to implement (or are forced to in Java) to implement the drawMe() method. Classes are the objects that implement any set of interfaces. Finally packages provide a convenient means of clustering related interfaces and packages. For example, in Haystack all classes and interfaces related to the HDM reside in one package (haystack.object), and all classes and interfaces related to services in another (haystack.service).
The four important HDM items are:
Figure: A UML diagram of the Haystack object package structure.
It is possible that in the future new core packages will defined to encapsulate other functionality. However, the framework defined for HDM objects makes this a trivial step.