The intermediate layer program is written in C++, and follows the principles of object-oriented design. It models the retrieval process as a collection of data objects whose internal state can be manipulating using well-defined functions or methods, and which trigger off actions or communicate results by passing messages. The principle object managed by the software is a query, and its main task is to represent and manipulate the internal state of the query as it develops during a search session. To that end, it defines a number of subsidiary objects, e.g.
For a detailed discussion of the object model implemented by the query layer program, see the conference paper ``Query Modelling for IR Interface Design'' reprinted as Appendix A.