Namespace

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen

Namensraum (englisch namespace) ist ein Begriff aus der Informatik.

Ein Name identifiziert ein Objekt. Zur eindeutigen Zuordnung ist jedoch der entsprechende Kontext – eben der Namensraum zu beachten. Die Beschreibung geschieht üblicherweise durch die "Punkt"-Notation. Neben der "Punkt"-Notation sind aber auch andere Zeichen gebräuchlich, z. B.: bei Dateinamen "\" oder "/". Einige Namensräume (z.B. Dateisysteme) sind hierarchisch aufgebaut; d.h. Namensräume können selbst wieder aus Namensräumen bestehen. Namensräume werden dazu verwendet, Konflikte bei der Namensvergabe zu verhindern. Graphisch sind Namensräume mit Bäumen äquivalent; d.h. Namensräume haben eine Wurzel (einen festen, definierten Ausgangspunkt), Knoten (Verzeichnisse) und Blätter (Objekte).

Die Idee von Namensräumen werden auch in anderen Bereichen unter anderen Namen verwendet - z.B. in der Telefonie. Jeder Teilnehmer erhält eine individuelle Rufnummer (z.B. 4711) und diese wird lokal vergeben. Das Telefonnetz ist hierbei in Unternetze unterteilt und die Identifikation erfolgt über die Vorwahl. Somit kann jede Rufnummer mehrfach vergeben werden, sie muss nur innerhalb des Unternetzes eindeutig sein. Bei einem Anruf im selben Vorwahlbereich reicht somit die Angabe der Rufnummer 4711. Soll ein Teilnehmer aus dem Vorwahlbereich 0815 kontaktiert werden, der ebenfalls die Rufnummer 4711 besitzt, so wählt man die 0815 vor. Durch diese Technik können zwei Teilnehmer die gleiche Rufnummer 4711 besitzen. In diesem Beispiel wäre die 0815 der Namensraum, 4711 der eigentliche Name, und das Telefon das identifizierte Objekt.

Mit Namensräumen kann ein Autor große Programmpakete mit vielen definierten Namen schreiben, ohne sich Gedanken machen zu müssen, ob die neu eingeführten Namen in Konflikt zu anderen Namen stehen. Im Gegensatz zu der Situation ohne Namensräume wird hier nicht der ganze Name neu eingeführt, sondern nur ein Teil des Namens, nämlich der des Namensraumes.

Ein Namensraum ist ein deklaratorischer Bereich, der einen zusätzlichen Bezeichner an jeden Namen anheftet, der darin deklariert wurde. Dieser zusätzliche Bezeichner macht es weniger wahrscheinlich, das ein Namenskonflikt auftritt mit Namen, die anderswo im Programm deklariert wurden. Es ist möglich den gleichen Namen in unterschiedlichen Namensräumen ohne Konflikt zu verwenden, auch wenn der gleiche Namen in der gleichen Übersetzungseinheit vorkommt. Solange sie in unterschiedlichen Namensräumen erscheinen, ist jeder Name eindeutig aufgrund des zugefügten Namensraumbezeichners.

Beispiel C++: <code=cpp>

 namespace one {
   
   char func(char);
   class String { ... };
 }

</code=cpp> Beispiel C#: <code=csharp>

 namespace ConsoleApplication1 {
  
   class Program {
     ...
     ...
     ...
   }
 } 

</code=csharp>

Die meisten modernen Programmiersprachen unterstützen Namensräume. Die Auszeichnungssprache XML unterstützt ebenfalls Namensräume, wobei dabei der Präfix durch einen Doppelpunkt vom lokalen Namen getrennt wird.

Es gibt auch Namensräume in anderen Sprachen wo sie die gleiche Funktion aufweisen nur mit anderem Namen. So gibt es in Java die Packages. Die Packages entsprechen hier gleichzeitig einer Ordnerstruktur, die immer eingehalten werden muss, d.h. liegt eine Klasse in einem Unterordner muss dieser als Packages angegeben werden bzw. wird ein Package angegeben muss dieser als Ordner vorhanden sein.

Dieser Beitrag stammt in seiner ersten oder einer späteren Version der deutschsprachigen Wikipedia. Er ist dort unter Namespace zu finden, die Liste der bisherigen Autoren befindet sich in der Versionsliste.