In Jag, data, such as a seismic CMP gather, is represented as a Vector and a Space object. Any object of the Vector class implements the abstract algebraic definition of a Hilbert vector. Fundamentally, a Hilbert vector is able to add another (compatible) vector to itself, to scale itself by a given scalar, and to compute the inner product between itself and another vector. A Jag vector also contains a reference to its corresponding vector space object. Figure 2 shows the HTML documentation page for Jag's Vector interface. A Java utility program, Javadoc, generates such pages from an author's comments in the Java source file.
Any object of the Space class represents an abstract algebraic space. A Jag programmer can query if a given vector is a member of the space, or if another space is equal. A programmer can also request from a Space object to return a new vector member.
While it is true that most Jag vectors will store their data as an array of numbers and will represent their space as an array of axes or a set of key values, the notion of Jag vectors is not limited to such implementations. As we will discuss later, the vector and space classes are interfaces and Jag only specifies their method invocations.