Applications based on the client-server model place a special emphasis on the specification of interfaces, the separation of interface and implementation and on the support for multiple implementations of the same interface. The class hierarchy of such an application has to be designed while taking these issues into account.
In this paper we present a model for writing client-server applications in C++, based in our experience with the Mach 3 multi-server system. Interfaces are defined by C++ abstract classes, from which implementations are derived. Implementations generally use multiple-inheritance to inherit functionality from other implementation classes.
We describe how this simple model was applied to the construction of the clients and servers that compose the Mach 3 multi-server, using standard C++. We discuss how multiple-inheritance simplified the design of the system and the need for run-time, type-safe pointer conversion. Finally, we give an overview of our class library and relevant aspects of the remote object invocation subsystem and summarize our experience with C++ in this project.