2.2 Design of the

The core concept of the *Algorithm Library* is to abstract algorithms and their associated
data by appropriate *MDL* classes. Generally speaking an *MDL* class is a
*C++* class derived from the central *Algorithm Library* class `Model` which
provides all functionality needed for the management of the *MDL* class by the
*Algorithm Library*. Whenever a program needs to evaluate a certain algorithm, it requests
a reference to an instance of a matching *MDL* class from the *Algorithm Library* and
executes its virtual methods. Data values are exchanged between the *MDL*
class and the program by using `parameters` which are abstractions of
these values generated by inheriting and specializing the **Parameter***C++* template class. Sets of parameters are summarized by using
` Interface` classes.

The *Algorithm Library* is designed to support the complete cycle of design,
implementation, and modification of applications. This results in a set of
distinct interfaces for each of the applications:

**application design:**An important step within the design of a new application is the decision which algorithms should be implemented by utilizing the*Algorithm Library*. The*Algorithm Library*contains a*C++*interface to introduce new parentclasses describing the concepts common to a specific type of algorithms or at least classifying these algorithms for later runtime type checks.**Model****implementation:**For the actual implementation of the application newclasses are sub-classed from the above mentioned basic**Model**classes to implement the required algorithms. For the management of**Model**and**Model**class instances, and all other functionality of the**Parameter***Algorithm Library*a corresponding*C++*interface is provided. Basic features of the*Algorithm Library*like parsing*MDL*files, requesting and evaluating*MDL*classes can be addressed by an additional*C*interface which can also be used by applications written in*FORTRAN*,*LISP*or other languages for which a*C*binding exists.**modification:**For users intending to modify or extend the behavior of certain algorithms the*Algorithm Library*supplies an interpreter for the object-oriented interpreter language*MDL*, which allows for the implementation of new*MDL*classes without having to change or recompile the source code of the application. While the*MDL*interpreter is intended mainly for the development and testing of new*MDL*classes, the*Algorithm Library*contains an additional compiler for*MDL*, which generates in conjunction with the*VMAKE*[62]*CASE*tool dynamically loadable modules containing native code for the used*CPU*.

1999-11-14