next up previous contents index
Weiter: 8.5 Generische Formale Hinauf: 8 Generische Einheiten Zurück: 8.3 Generische formale

8.4 Generische formale Unterprogramme

   

Legt man fest, daß man eine generische Einheit mittels privaten oder limitiert privaten generischen formalen Parameter realisieren will, so ergibt sich das Problem, daß die für diese Typen vordefinierten Operation im allgemeinen nicht ausreichen, um die Implementierung der generischen Einheit durchführen zu können. Man möchte sich vielmehr auf speziell für diesen (limitiert) privaten Typ deklarierte Operationen berufen können. Mit generischen formalen Unterprogrammen kann man festlegen, wie diese Operationen aussehen sollen. Bei der Instantiierung einer generischen Einheit muß dann sichergestellt sein, daß für den aktuellen generischen Parameter diese Operationen tatsächlich vorhanden sind.

Solche generische formale Unterprogramme werden mit dem Schlüsselwort with definiert, z.B.:

with function Summe (a,b: Element) return Element;

Es ist auch möglich, Default-Unterprogramme anzugeben. Dabei gibt es zwei verschiedene Arten:
  1. Der Name eines bestimmten Unterprogrammes, z.B.:

    with function IMAGE (x: Aufzaehlung) return string is Aufzaehlung'IMAGE;

  2. Mit einer <>, was soviel bedeutet wie, daß bei der Instantiierung ein Unterprogramm als Default genommen wird, das denselben Namen hat wie das generische formale Unterprogramm und das zum Zeitpunkt der Instantiierung sichtbar ist, z.B.:

    generic
    type Element is private;
    with function ""(x,y: Element) return Element is <>;
    function Quadrat(x: Element) return Element;

    Sollte zum Zeitpunkt der Instantiierung für den aktuellen generischen Typen der Operator ,,*``eindeutig definiert und sichtbar sein, so kann der aktuelle Wert für die generische Funktion ,,*``beim Instantiieren weggelassen werden, z.B. wären die folgenden Instantiierungen gleichwertig:

    function Quadriere is new Quadrat(Element => integer , "" => "");
    function Quadriere is new Quadrat(integer , "");
    function Quadriere is new Quadrat(integer);



Johann Blieberger
Wed Feb 11 09:58:52 MET 1998