Declarative languages for Object-oriented DBMSs combine navigational accesses, expressed as path traversals, to associative ones. Works on query optimization for OODBs usually focus on optimizing one of the aspects (e.g., path traversals) neglecting others (e.g., associative joins). This work proposes a rule-based approach for optimizing uniformly all features encountered in queries in OODBs. Queries and rules are expressed using an easily readable functional formalism, functional symbols providing a natural way to represent both path traversals and method calls. Cost estimations are assigned to each functional equation. This enables the application of transformation rules on systems of equations under the control of deterministic cost-based search strategies, such as Iterative Improvement or Simulated Annealing.