[competencies] Research:
Generic Components
Competencies HomepagePublicationsActivitiesWhat else?
overviewprojectspastprojectsresearchawardspaperslecturescv
Generic ComponentsSystem DevelopmentDesign SpacesUsing Design Spaces
 
 

The software development approach based on Generic Components aims at delivering software solutions that -- despite of relying on the reuse of components -- are customized to the settings in a specific application domain. The approach combines tool-supported techniques for reusing pre-fabricated software artefacts with the goal of producing efficient and therefore specialized software. Such a combination is only possible by extending on the conventional notion of component techniques. To this end, the following concepts are used:
 

Generic software components

Techniques for variable, so called generic component implementations are a prerequisite for our approach. Generic components are software modules allowing to choose their properties to a certain degree without necessarily having to manually change code. The change of properties can concern both functional and non-functional aspects. Examples are the customization of the component's interface (method names, parameters, ...), choice of data structures to work with, tailoring of resource requirements, or the choice of algorithms. Our research is focused at providing such flexibility at the development time of the runtime platform, i.e. at compile time, when appropriate tools can generate the component's source code or apply necessary changes to it. A generic component generally comprises a variety of documents, each describing specific aspects of the component: interface, behaviour, non-functional properties such as execution times or memory requirements, or an informal overall semantic description.

One important aspect of a generic component is the description of its variability. To this end, generic components carry generic parameters being kind of "placeholders" for specific properties that are left variable in the component. A generic parameter can, e.g., be a placeholder for a simple integer value denoting a buffer size, a placeholder for a component interface, a specific algorithm from a set of given choices, or -- in the most complex case -- a placeholder for arbitrary code. A generic parameter represents one dimension in the "space of variability" of a generic component (see also: the design space for a component). The entirety of generic parameters together with the ranges of allowed values express the spectrum of possible variants that can be generated from a generic component (although in most cases not all combinations of parameter settings will be sensible and allowed).
 

Generators

Since the variability of generic components can go beyond what is directly supported by programming languages and conventional software development environments, there is demand for techniques to generate component code from some kind of higher level description. The techniques deployed are closely related to the three types of generic parameters: selection parameters, generative parameters, and code parameters.

Selection parameters are used to select discrete entities from a finite set of possibilities. Entities in this sense are pre-fabricated variants of parts of a component -- data structures, algorithms, or other pieces of code. If a generic component encompasses variants that have completely different implementations, entities can in a broader sense even be whole (sub-)components. The techniques to support this kind of generic parameters are separate source files and appropriate pre-processors allowing to select and possibly exchange certain blocks of source code.

Generative parameters are inputs to tools that generate or modify appropriate solutions in a more flexible way. In simple scenarios, the generation process can consist of merely adjusting a conventional parameter to hold a specific value, duplicating a component instance for purposes of fault tolerance, or changing the name of a method. More sophisticated generators produce code from higher level descriptions such as an SDL specification. The generators to support this kind of generic parameters are in most cases highly specialized. Most of them build on pre-processors in order to include modified code in the source files.

Where the first two types of generic parameters cannot offer enough flexibility, code parameters allow for -- in certain limits defined by the implementor of the component -- arbitrary user-defined code to be inserted into pre-defined gaps. A simple example might be a user-defined data structure, encapsulated in an object implementing a pre-defined interface of access methods. Support for this kind of parameters mainly relies on the techniques for generic programming offered by the programming language (e.g., object-orientation, inheritance, templates, casting, etc.).
 

 
Homepage | Competencies | Publications | Activities | What else
Nov-2004