  Traditionally system design has been made from a black box/functionality only
perspective which forces the developer to concentrate on how the functionality
can be decomposed and recomposed into so called components. While this
technique is well established and well known it does suffer fromsome drawbacks;
namely that the systems produced can often be forced into certain, incompatible
architectures, difficult to maintain or reuse and the code itself difficult to
debug. Now that ideas such as the OMG's Model Based Architecture (MDA) or Model
Based Engineering (MBE) and the ubiquitous modelling language UML are being
used (allegedly) and desired we face a number of challenges to existing
techniques.
