Namensraum

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springenZur Suche springen

DerNamensraum (englischnamespace) ist ein Begriff aus derProgrammierung. Dabei werden – vor allem bei derobjektorientierten Programmierung – die Namen fürObjekte in einer ArtBaumstruktur angeordnet und über entsprechendePfadnamen eindeutig angesprochen.

Vereinfacht bedeutet dies, dass innerhalb eines solchen Raumes jeder Name eindeutig ein Objekt bezeichnet. Der gleiche Name kann jedoch in einem anderen Namensraum wieder frei zur Bezeichnung eines anderen Objekts benutzt werden. Außerdem können diese unabhängigen Namensräume innerhalb einer Hierarchie verbunden werden.

AuchMediaWiki-Wikis wie eine Wikipedia sind in Namensräume aufgeteilt.

Inhaltsverzeichnis

Technische Details

[Bearbeiten |Quelltext bearbeiten]

EinName identifiziert ein Element der Programmiersprache (z. B. einObjekt, eineKlasse oder eineFunktion). Zur eindeutigen Zuordnung ist jedoch der entsprechendeKontext – derNamensraum – zu beachten. Die Beschreibung geschieht in derProgrammierung üblicherweise durch die sogenannte „Punktnotation“, wobei analog zu einerBaumstruktur die einzelnen Objekte, mit ihren Eigenschaften (Attribute) undMethoden, angesprochen werden. Neben der Punktnotation sind aber auch andere Zeichen gebräuchlich, so wie z. B. bei Dateinamen mitSchrägstrichen („/“) oderumgekehrten Schrägstrichen („\“). Die meisten Namensräume, z. B.Dateisysteme, sind hierarchisch aufgebaut, d. h., sie können selbst wieder aus Namensräumen bestehen. Namensräume werden dazu verwendet, Konflikte bei der Namensvergabe zu verhindern. Graphisch sind Namensräume mitBäumen äquivalent, d. h., sie haben eine Wurzel (einen festen, definierten Ausgangspunkt), Knoten (Verzeichnisse) und Blätter (Objekte).

Die Idee von Namensräumen wird auch in anderen Bereichen unter anderen Namen verwendet, z. B. in derTelefonie. Jeder Teilnehmer erhält eine individuelleRufnummer, z. B. 4711, und diese wird lokal vergeben. DasTelefonnetz ist hierbei in Unternetze unterteilt und die Identifikation erfolgt über dieVorwahl. 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 mehrere Teilnehmer die gleiche Rufnummer 4711 besitzen. In diesem Beispiel wäre die 0815 der Namensraum, 4711 der eigentliche Name und der Ziel-Telefonanschluss das identifizierte Objekt.

Beim Erstellen vonProgrammen kann ein Autor unter Benutzung von Namensräumen großeProgrammpakete mit vielen definierten Namen schreiben, ohne sich Gedanken machen zu müssen, ob die neu eingeführten Namen in Konflikt mit anderen Namen stehen. Im Unterschied 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, dass ein Namenskonflikt auftritt mit Namen, die anderswo imProgrammdeklariert wurden. Es ist möglich, den gleichen Namen in unterschiedlichen Namensräumen ohne Konflikt zu verwenden, auch wenn der gleiche Name in derselben Übersetzungseinheit vorkommt. Solange er in unterschiedlichen Namensräumen erscheint, ist jeder Name eindeutig aufgrund des zugefügten Namensraumbezeichners.

Die meisten modernenProgrammiersprachen unterstützen Namensräume. DieAuszeichnungsspracheXML unterstützt ebenfalls Namensräume, wobei das Präfix durch einenDoppelpunkt vom lokalen Namen getrennt wird.

Für vieleProgrammiersprachen ist der Namensraum ein Kontext für ihreBezeichner. In einemBetriebssystem ist ein Beispiel für einen Namensraum ein Verzeichnis. Jeder Name in einem Verzeichnis identifiziert eineDatei oder ein Unterverzeichnis eindeutig.

Namen in einem Namensraum können in der Regel nicht mehr als eine Bedeutung haben. Das heißt, verschiedene Bedeutungen können nicht denselben Namen im selben Namensraum haben. Ein Namensraum wird auch als Kontext bezeichnet, da derselbe Name in verschiedenen Namensräumen unterschiedliche Bedeutungen haben kann, die jeweils für seinen Namensraum geeignet sind.

In derProgrammierspracheJava haben Bezeichner, die in Namensräumen angezeigt werden, einen kurzen lokalen Namen und einen eindeutigen langen „qualifizierten“ Namen für die Verwendung außerhalb des Namensraums.

EinigeCompiler für Sprachen wieC++ kombinieren Namensräume und Namen für den internen Gebrauch im Compiler in einem Prozess, dername mangling genannt wird.

Neben der oben beschriebenen technischen Verwendung der abstrakten Sprache verfügen einigeProgrammiersprachen unter anderem über ein bestimmtesSchlüsselwort, das zur expliziten Steuerung von Namensräumen verwendet wird.

Beispiele

[Bearbeiten |Quelltext bearbeiten]

C++

[Bearbeiten |Quelltext bearbeiten]
namespaceGermany{stringanthemTitle="Das Lied der Deutschen";}namespaceAustria{stringanthemTitle="Land der Berge";}voidoutput1(){stringanthemTitle="Schweizerpsalm";cout<<Germany::anthemTitle<<endl;// Ausgabe: Das Lied der Deutschencout<<Austria::anthemTitle<<endl;// Ausgabe: Land der Bergecout<<anthemTitle<<endl;// Ausgabe: Schweizerpsalm}voidoutput2(){usingnamespaceGermany;cout<<anthemTitle<<endl;// Ausgabe: Das Lied der Deutschencout<<Austria::anthemTitle<<endl;// Ausgabe: Land der Berge}voidoutput3(){usingnamespaceAustria;cout<<Germany::anthemTitle<<endl;// Ausgabe: Das Lied der Deutschencout<<anthemTitle<<endl;// Ausgabe: Land der Berge}voidoutput4(){usingnamespaceGermany;usingnamespaceAustria;cout<<anthemTitle<<endl;// Fehler: Referenz auf anthemTitle ist mehrdeutig}

Namensräume dürfen in C++ auch geschachtelt werden:

namespacenested1{namespacenested2{namespacenested3{/* ... */}}}

C#

[Bearbeiten |Quelltext bearbeiten]

Namensräume werden in derProgrammierspracheC# häufig verwendet. AlleKlassen des.Net-Framework sind in Namensräumen organisiert. Darüber hinaus werden benutzerdefinierte Namensräume vonProgrammierern häufig verwendet, um ihre Arbeit zu organisieren und Namenskollisionen zu vermeiden. Wenn sie auf eine Klasse verweisen, sollten sie entweder ihren vollständig qualifizierten Namen angeben, d. h. den Namensraum gefolgt vom Klassennamen, oder eineusing-Anweisung hinzufügen. Dadurch entfällt die Notwendigkeit, den vollständigen Namen aller Klassen in diesem Namensraum anzugeben. Im folgenden Beispiel istSystem ein Namensraum undConsole undConvert sind Klassen, die dort definiert sind.

namespaceSpace{classProgram{publicstaticvoidMain(string[]args){Console.WriteLine("Hallo Europa! Hallo Amerika!");intnumber=Convert.ToInt32("3");Console.WriteLine("Hallo "+number+". Welt!");}}}

PHP

[Bearbeiten |Quelltext bearbeiten]
namespaceFahrzeug\PKW;useAntrieb\Motor;classKleinwagen{protected$motor;publicfunction__construct(Motor$motor){$this->motor=$motor;}}

Öffentliche Namensräume

[Bearbeiten |Quelltext bearbeiten]

Bei öffentlichen Namensräumen gibt es besonders das Problem der Verwaltung, denn alle (Markt-)Teilnehmer müssen sich einigen, so dass kein Name zwei unterschiedliche Dinge bezeichnet. Aus diesem Grund gibt es in der Regel Verwaltungsorganisationen, dieNamensräume oder Teilbereiche davon verwalten und Ausschnitte davon für einzelne Teilnehmer reservieren. Hier wiederum gibt es das Problem, dass diese Verwaltungsorganisationen in der Regel selbst eineMonopol-Stellung haben, so dass sie bei Gewinnorientierung Monopolpreise zum Nachteil der Teilnehmer erzielen könnten. Zudem stellt ein solches Monopol eine Schwachstelle dar, denn bei Ausfall der Verwaltungsorganisation kann je nach Integration der Teilnehmer der Geschäftsbetrieb dieser Teilnehmer erheblich gestört werden. Dies gilt nicht nur, aber auch für dasDomain Name System, denn dieNamensauflösung muss in diesem Fallonline geschehen.

Siehe auch

[Bearbeiten |Quelltext bearbeiten]

Weblinks

[Bearbeiten |Quelltext bearbeiten]
Wiktionary: Namensraum – Bedeutungserklärungen, Wortherkunft, Synonyme, Übersetzungen
Abgerufen von „https://de.wikipedia.org/w/index.php?title=Namensraum&oldid=245901279
Kategorie: