1. Introduction
Interest in interoperation among software components developed using two (or more) object-oriented programming languages is growing rapidly. The need to re-use reliable, well-understood software libraries and to interface with legacy systems are two common interoperability problems faced by software developers. Unfortunately, existing interoperability techniques have various shortcomings that preclude transparent interoperation between components defined in different object-oriented languages.