1. A process for developing mathematically validated object oriented software comprising the steps of: a) writing an abstract specification of a class, methods and expected properties of a component of the software; b) checking the abstract specification for errors and verifying that the class has the expected properties; c) generating executable code for the class from the abstract specification; d) running and evaluating the executable'code to check that the code meets requirements other than a required speed of performance; and e) evaluating the speed of performance when handling data sets commensurate to the size of data sets the software component is required to handle.