The first notable difference is that the class names used in the implementation have been ``reversed'' from those specified in Section 4, so that all the Input modules start with Input, all the Output modules start with Output, and all the Process modules start with Process. Specifically, they are now in bigendian format. This is less intuitive when conversing about the modules, but is easier to work with when programming. For example, the ImageFileInput class is actually InputIlFile in the implementation.
The Param class is used to abstract the parameters which are specified to the system and modules, as discussed in Section 5.4. Parameters are deemed to have a name and optional arguments following, where the name is stored as a string and the arguments as a vector of strings. At all points in the system where strings are used, the C++ STL string class is used, and lists of strings use the C++ STL vector class.
When creating Input, Output and Process classes, arguments are passed as a vector of strings. The specific Input, Output or Process class can then interrogate these arguments to set various options and parameters. The task of instantiating the particular Input, Output or Process class the user has selected is abstracted out to various Factory classes, FactoryInput, FactoryOutput and FactoryProcess. These classes take as input the string the user entered for the name of the module, and return an instance of the corresponding class.
The behaviour of the main program has been modified slightly from that presented in Section 4.3. The previous image is cached, and when the getImage() method of the Input module returns NULL, the FinaliseImage() of the Output module is called with the previous image. This means that when the Input module runs out of input images, the system will ``hold'' the last image in the output.