Newly written software is often found to have problems with reliability. Studies show that 1% of all lines of new code contain faults. When existing software is reused in a new project, this figure is dramatically reduced, as the software has implicitly been extensively tested.
The designer’s problem in a new system is not only to identify suitable pre-existing components but also to develop new ones, which themselves will be suitable for later reuse. The latter aspect is often very difficult and requires both imagination and the experience of long-term understanding of design principles. These problems may be ameliorated by the use of design patterns.
Apart from straightforward reuse of code, there has been a lot of technical interest in the development of so-called "patterns". These are not chunks of code in traditional programming languages. They are instead "design ideas", which address general problems through good practice, but do not provide specific and complete solutions. These are "patterns", which require to be adapted to make them fully functional. They do however help massively by providing a framework around which a new design may be created more quickly and reliably.
We use design patterns which are previously developed and tested suites of modelled components. These are used to implement functionality such as real time graphing, multi-lingual user interface components and low level scheduling mechanisms. Such components, defined in the UML are managed in a version controlled library and accessed through our UML modelling tool.