Prozedurtypen; Durchwanderung


Wenn man ein Geflecht zur Ablage von Daten verwendet, tritt gelegentlich das Problem auf, eine vorgegebene Operation  auf jedes Datenelement anzuwenden, also das Geflecht geeignet zu durchwandern. Dabei werden wir einen Knoten womöglich mehrmals besuchen, aber nur genau einmal  bearbeiten. Als Operationen kommen beispielsweise in Frage: bilde die Summe, suche das kleinste Element, gib das Element in externer Darstellung lesbar aus; es gibt noch mehr Anwendungen.

Für lineare Listenstrukturen ist das einfach zu lösen: man läßt einen Zeiger über die Liste laufen, und man wendet auf jedes gefundene Element die gewünschte Operation an. Für kompliziertere Strukturen muß man sich jeweils eine Strategie zur Durchwanderung oder Traversierung überlegen, und davon kann es mehrere geben. Dieselbe Strategie  will man womöglich für mehrere Operationen  verwenden, und diese Operationen haben gemeinsam, daß sie jeweils auf Elemente eines gegebenen Typs angewendet werden.

Modula 2 bietet (fast ohne Konkurrenz, neben ALGOL 68 und Ansätzen in Pascal) dafür ein eigenes Konzept an: Prozedurtypen. Ein Prozedurtyp umfaßt eine Klasse von Prozeduren mit gleicher Funktionalität, aber womöglich verschiedener Auswirkung. Beispiel: der Typ

TYPE Bearbeiter = PROCEDURE(btree);
hat die Bedeutung: tu irgendwas mit einem Wert-Argument vom Typ btree.  Hat nun eine Durchwanderungsstrategie ein Argument vom Typ Bearbeiter,  so kann man dafür im konkreten Anwendungsfall eine beliebige Operation passender Funktionalität einsetzen. Auch Variablen von einem Prozedurtyp sind möglich und können mit konkreten Funktionen passenden Typs besetzt werden.

Prozedur- bzw. Funktionstypen treten auch in anderem Zusammenhang auf: bei der Bildung des bestimmten Integrals einer beliebigen integrierbaren reellen Funktion f über einem festen Intervall [a,b]

I(f) = f(t) dt
mit einem geeigneten numerischen Integrationsverfahren
PROCEDURE Integriere(f: realfct; a, b: real): real;
ist der Integrand vom Typ
TYPE realfct = PROCEDURE(real): real;

zurück | Inhalt | Index | vor | Vorlesung

Klaus Lagally, 22. Februar 2000, 19:36