Scientific and engineering software is often produced by integration o
f existing software components of the size of a whole program. However
, on the average, scientific software was not developed for reusabilit
y and is quite distant from the user model of the application problem;
integration and retrofitting is as such a costly process. An architec
ture, methodology and several C++ class libraries for supporting integ
ration are introduced. The architecture separates a software component
layer, and an integration layer. The latter in based on the concept o
f software model, that is an abstraction of components and a represent
ation of the system differing from its actual physical structure. The
methodology is based on matching needs with existing models. The C++ c
lass libraries are explained in some detail. The application to two ma
jor systems is analysed and the ideas behind seven other systems are b
riefly outlined. Some lessons learned are summarised in the conclusion
s.