next up previous contents index
Weiter: Untereinheiten von Übersetzungseinheiten Hinauf: Programmstruktur und Übersetzungsvorgang Zurück: Getrennte Übersetzung

Übersetzungs- und Bibliothekseinheiten

Ein Bibliothekseintrag  ist eine Übersetzungseinheit, die wiederum eine Spezifikation, eine Implementierung oder eine Umbenennung einer Bibliothekseinheit ist. Jede Bibliothekseinheit (außer der vordefinierten Bibliothekseinheit Standard) besitzt eine Vatereinheit, die ein Bibliothekspaket oder ein generisches Bibliothekspaket ist. Eine Bibliothekseinheit ist das Kind seiner Vatereinheit. Die Wurzel-Bibliothekseinheiten sind die Kinder des vordefinierten Bibliothekspaketes Standard.

Dieser Mechanismus paßt gut mit dem der getaggten Typen zusammen. So kann man etwa in einem Kindpaket einen vom Vaterpaket abgeleiteten Typ deklarieren.

Die Spezifikation und die Umbenennung können privat sein, wenn das Schlüsselwort private in deren Deklaration verwendet wird, sonst sind sie public. Diese privaten Einheiten sind dann nur innerhalb jener Einheiten sichtbar, die Kinder oder Kindeskinder usw. der Vatereinheit dieser privaten Einheit ist.

Ein Beispiel:

package Rational_Numbers is
type Rational is
record
Numerator: integer;
Denominator: positive;
end record;
function "="(X,Y: Rational) return Boolean;

function "/"(X,Y: integer) return Rational;
-umeinerationaleZahlzuerzeugen

function "+"(X,Y: Rational) return Rational;
function "-"(X,Y: Rational) return Rational;
function ""(X,Y: Rational) return Rational;
function "/"(X,Y: Rational) return Rational;
end Rational_Numbers;

package Rational_Numbers.IO is -publicKindvonRational_Numbers
procedure Put(R: in Rational);
procedure Get(R: out Rational);
end Rational_Numbers.IO;

private procedure Rational_Numbers.Reduce(R: in out Rational);
-privatesKindvonRational_Numbers

with Rational_Numbers.Reduce; -ReferenzaufeinprivatesKind
package body Rational_Numbers is
...
end Rational_Numbers;

with Rational_Numbers.IO; use Rational_Numbers;
procedure Main is -eineWurzel-Bibliotheksprozedur
R: Rational;
begin
R := 5/3;
IO.Put(R);
end Main;

with Rational_Numbers.IO;
package Rational_IO renames Rational_Numbers.IO;
-eineUmbenennungeinerBibliothekseinheit

Jede der oben angeführten Bibliothekseinheiten kann getrennt übersetzt werden.



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