3.4. SIDL and CCA Object Orientation in Fortran

There will be a few artifacts of CCA's (and Babel's) insistence on an object model. Generally the object oriented style of programming groups state data and subroutines (or methods) into "objects". Because CCA requires an object model for its components, Fortran programmers will have to become a little familiar with how CCA/Babel implements this in the language. A broad exposition on object oriented concepts is beyond the scope of this tutorial document, more and better information can be found elsewhere.

The first thing objects need is a constructor and destructor to initialize state data. For Fortran, the methods ending in _ctor and _dtor are the constructor and destructor for the component (see listing above). This allows the programmer to create (in the constructor) and delete (in the destructor) state data associated with the component. One thing that almost all components want to store is the gov_cca_Services handle that is passed in through the setServices(). A complex component may wish to store parameters associated with its function as well.

Looking at the cca specification cca.sidl, Babel maps each CCA SIDL type (e.g. gov.cca.Port) to a Fortran type (e.g. type(gov_cca_Port_t)).

Because return values cannot accept all Babel types and because Fortran does not provide either an object model or a mechanism for exceptions, these features are placed in the argument list:

As an example, if a user specifies a SIDL snippet such as:

file: ./cca-spec-babel/cca.sidl line:108
package gov {
package cca version 0.8.0 {
...
	Port getPort(in string portName) throws CCAException;
...
} // end of package cca
} // end package gov

In Fortran translates into:

...
type(gov_cca_Port_t) :: port
type(SIDL_BaseInterface_t) :: excpt
type(gov_cca_Services) :: frameworkServices
...
port = getPort(frameworkServices, port, excpt)