Es bleibt die Frage zu beantworten, wie man auf jene Objekte zugreift, die im sichtbaren Teil eines Paketes deklariert worden sind. Innerhalb des Paketes, das die Deklaration enthält, und innerhalb des zugehörigen Body's kann man auf das deklarierte Objekt zugreifen, indem man den spezifizierten Namen verwendet.
Nehmen wir nun an, wir hätten im sichtbaren Teil des Paketes A ein Objekt O deklariert, und wir wollen vom Paket B auf dieses Objekt zugreifen. Ada erlaubt das durch explizites Nennen des Paketes, in dem sich das Objekt befindet, vor dem Objekt-Namen. Die Trennung der beiden Namen erfolgt durch einen Punkt. In unserem Beispiel heißt das
A.O
with A;
Es sei explizit darauf hingewiesen, daß man sich vom Spezifikations- und Implementationsteil eines Paketes auf unterschiedliche Pakete beziehen kann. Dadurch ist die Spezifikation unabhängiger von der Implementierung. Ein Body erbt jedoch implizit die Pakete, auf die man sich im Spezifikationsteil bezogen hat.
Durch diesen Mechanismus können sehr lange Namen auftreten. Um diese zu vermeiden, gibt es in Ada zwei verschiedene Möglichkeiten. Die erste ist die, daß man unmittelbar nach der With-Anweisung eine Use-Anweisung angibt, z.B.:
with A;
Wenn man für einen selbstdefinierten Typ Operatoren wie etwa ''+
''oder
''*
''überlädt, würde man immer eine Use-Klausel benötigen,
um die Infix-Notation (z.B. a+b) verwenden zu können.
Damit sind aber dann auch alle anderen in dem entsprechenden Paket deklarierten
Typen, Objekte und Operationen ohne den Paketnamen-Prefix verwendbar.
Um nur die Operatoren in Infix-Notation verwenden zu können,
für alle anderen im Paket deklarierten Programmteile aber den Paketnamen-Prefix
verwenden zu müssen, gibt es in Ada die Use-Type-Klausel.
Man schreibt dann statt use A; zum Beispiel use type A.My_Type;.
Die andere Möglichkeit ist die von Renames-Anweisungen.
Asterix: Aber Samson Himmelschorus,
Himmelschorus hat so eine
lateinische Endung?
Himmelschorus: Ich habe den Namen aus
kommerziellen Gründen angenommen!
In Wirklichkeit heiße ich
Rosenblumenthalowitsch!
package DM renames Datum_Manager;
function Set(
Tag: Tag_Typ;
Monat: Monatsname;
Jahr: Jahr_Typ)
return Datum_Manager.Datum
renames Datum_Manager.Setze;
Johann Blieberger