Over the last few years, object-oriented programming has been recognized as the best way currently available of structuring software systems. It emphasizes grouping together data and the operations performed on them, encapsulating the whole behind a clean interface, and organizing the resulting entities in a hierarchy based on specialization in functionality. In this way it provides excellent support for the construction of large systems. Up to now,...