Namensraum - LinkFang.de





Namensraum


Der Namensraum (englisch namespace) ist ein Begriff aus der Programmierung. Dabei werden – vor allem bei der objektorientierten Programmierung – die Namen für Objekte in einer Art Baumstruktur angeordnet und über entsprechende Pfadnamen 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.

Technische Details

Ein Name identifiziert ein Objekt. Zur eindeutigen Zuordnung ist jedoch der entsprechende Kontext – der Namensraum – zu beachten. Die Beschreibung geschieht in der Programmierung üblicherweise durch die sogenannte „Punktnotation“, wobei analog zu einer Baumstruktur die einzelnen Objekte, mit ihren Eigenschaften (Attribute) und Methoden, angesprochen werden. Neben der Punktnotation sind aber auch andere Zeichen gebräuchlich, so wie z. B. bei Dateinamen mit Schrägstrichen („/“) oder umgekehrten Schrägstrichen („\“). Einige 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 mit Bä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 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 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 von Programmen kann ein Autor unter Benutzung von Namensräumen große Programmpakete 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 im Programm deklariert wurden. Es ist möglich, den gleichen Namen in unterschiedlichen Namensräumen ohne Konflikt zu verwenden, auch wenn der gleiche Name in der gleichen Übersetzungseinheit vorkommt. Solange er in unterschiedlichen Namensräumen erscheint, ist jeder Name eindeutig aufgrund des zugefügten Namensraumbezeichners.

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

Beispiele

C++

namespace A
{
    class X { /* ... */ };
}
 
namespace B
{
    class X { /* ... */ };
}
 
int func1()
{
    A::X object1();  // Instanz der Klasse X aus Namensraum A
    B::X object2();  // Instanz der Klasse X aus Namensraum B
}
 
int func2()
{
    using namespace A;
 
    X object1();     // Instanz der Klasse X aus Namensraum A
    B::X object2();  // Instanz der Klasse X aus Namensraum B
}
 
int func3()
{
    using namespace B;
 
    A::X object1();  // Instanz der Klasse X aus Namensraum A
    X object2();     // Instanz der Klasse X aus Namensraum B
}
 
int func4()
{
    using namespace A;
    using namespace B;
 
    X object1();  // Fehler: Referenz auf X ist mehrdeutig
}

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

namespace nested1
{
    namespace nested2
    {
        namespace nested3 { /* ... */ }
    }
}

PHP

namespace Fahrzeug\PKW;
use Antrieb\Motor;
 
class Kleinwagen {
 
    protected $motor;
 
    public function __construct(Motor $motor) {
        $this->motor = $motor;
    }
 
}

Öffentliche Namensräume

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, die Namensrä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 eine Monopol-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 das Domain Name System, denn die Namensauflösung muss in diesem Fall online geschehen.

Siehe auch


Kategorien: Programmiersprachelement

Quelle: Wikipedia - http://de.wikipedia.org/wiki/Namensraum (Vollständige Liste der Autoren des Textes [Versionsgeschichte])    Lizenz: CC-by-sa-3.0

Änderungen: Alle Bilder mit den meisten Bildunterschriften wurden entfernt. Ebenso alle zu nicht-existierenden Artikeln/Kategorien gehenden internen Wikipedia-Links (Bsp. Portal-Links, Redlinks, Bearbeiten-Links). Entfernung von Navigationsframes, Geo & Normdaten, Mediadateien, gesprochene Versionen, z.T. ID&Class-Namen, Style von Div-Containern, Metadaten, Vorlagen, wie lesenwerte Artikel. Ansonsten sind keine Inhaltsänderungen vorgenommen worden. Weiterhin kann es durch die maschinelle Bearbeitung des Inhalts zu Fehlern gerade in der Darstellung kommen. Darum würden wir jeden Besucher unserer Seite darum bitten uns diese Fehler über den Support mittels einer Nachricht mit Link zu melden. Vielen Dank!

Stand der Informationen: August 201& - Wichtiger Hinweis: Da die Inhalte maschinell von Wikipedia übernommen wurden, ist eine manuelle Überprüfung nicht möglich. Somit garantiert LinkFang.de nicht die Richtigkeit und Aktualität der übernommenen Inhalte. Sollten die Informationen mittlerweile fehlerhaft sein, bitten wir Sie darum uns per Support oder E-Mail zu kontaktieren. Wir werden uns dann innerhalb von spätestens 10 Tagen um Ihr Anliegen kümmern. Auch ohne Anliegen erfolgt mindestens alle drei Monate ein Update der gesamten Inhalte.