1. A process for creating re-usable queries over complex data, the process comprising: defining a re-usable object-oriented receiving queries defined in a first query language with in which logical properties are represented by object-oriented classes treated as logical properties , wherein each logical property is defined by one or more specified classes of at least one complex data item and in which inheritance relationships between the classes represent relationships between the logical properties, and wherein the queries include requests for data items having requested logical properties ; relating inheritance, used to form new class with the specified classes, to the logical properties along with a plurality of virtual method calls that execute all applicable method implementations in at least one of the specified classes; and in response to the queries requesting data items having logical properties encoded as methods of particular classes, dispatching on the logical properties particular classes to choose at least one one or more most specific implementation implementations of an operation the methods , wherein a most specific implementation of a method is in a class where no subclasses define a same method other classes that inherit from the class include an implementation of the method , wherein the dispatching on the logical properties particular classes further includes: defining identifying a named predicate p as predicate p(T 1 x 1 ,. .. , T n x n ) {formula} for each one of the applicable method most specific implementations, wherein the named predicate p has variables x 1 ,. .. , x n. so as to restrict a range of a relation, which contains tuples (x 1 ,. .. x n ) where each x i has a type T T i ; testing a receiver against each relevant type and choosing the applicable method implementations from the most specific implementations , wherein testing a type of the receiver is achieved by includes invoking a named constructor for each class defining a method of a relevant signature most specific implementation , regardless of static types; implementing queries by translating actual or possibly recursive object-oriented the queries to a second query language using for each method and constructor of each class, a first special variable that holds a value that is a member of the class, and for each method that is not a predicate, a second special variable that holds a result of a method; and rending rendering the queries concise by at least using multi-valued operations to avoid naming intermediate results in nested method calls.