In the MATISSE project a specific tool together with a software development methodology is produced, namely B4Corba, in order for CORBA oriented application to be developed using Atelier B tool and therefore to allow automatic generation of their source code.
The B4Corba tool purpose is for the generation of the IDL interfaces (see for instance A. Pope. The CORBA Reference Guide: Understanding the Common Object Request Broker Architecture. Addison-Wesley. 1997). The generation of the code for the clients and the servers, according to the CORBA standard architecture, will be produced by the Atelier B tool using standard code generator embellished with pragmatic clauses to deal with the IDL.
The IDL interface definition is independent of programming language, but maps to all of the popular programming languages via OMG standards: OMG has standardized mappings from IDL to C, C++, Java, Cobol, Smalltalk, Ada, Lisp, Python, and IDLscript, etc.
This separation of interface from implementation, enabled by OMG IDL, is the essence of CORBA - how it enables interoperability, with all of the transparencies required. The interface to each object is defined very strictly. In contrast, the implementation of an object is hidden from the rest of the system behind a boundary that the client may not cross. Clients access objects only through their advertised interface, invoking only those operations that the object exposes through its IDL interface, with only those parameters (input and output) that are included in the invocation.
First of all, the B4Corba tool has to generate automatically the IDL interface from a B abstract machine. It must then distinguish exposed from hidden operations and all the data types involved in the signature of the exposed operations.
Our solution is to split the object's abstract machine into two B machines, one containing all exposed operations and data types and the other, all hidden operations and remaining data types. For those two machines to behave correctly, it is sufficient that the exposed machine sees the hidden machine (in the B Method view).
The client machine has no special behaviour except that it must see the exposed machine in order to invoke transparently the CORBA exposed operations.
In other words, the B4Corba Translator provides a way to transparently connect through an ORB the software components generated by Atelier B. Hence, the generated code remains unmodified and so are the stubs and skeletons that we build by compiling the IDL interfaces.