Espace de noms (programmation)

Un article de Wikipédia, l'encyclopédie libre.

En programmation, les espaces de noms aident à la construction de programmes modulaires. Par exemple, le symbole de fonction sin pourrait renvoyer au calcul d'une sinusoïde dans un espace de noms regroupant des fonctions mathématiques et au péché (le mot anglais sin en est une traduction) dans un autre espace de nom traitant de problèmes religieux. Cela évite les inévitables conflits entre symboles synonymes.

Sommaire

[modifier] Espaces de noms explicites

De nombreux langages offrent un espace de nom commun pour les identificateurs de variables, de fonctions et d'opérateurs spéciaux et n'offrent pas la possibilité de manipuler (utiliser, créer) de nouveaux espaces de noms. Des conventions sur les noms des identifiants doivent alors être adoptées par les programmeurs.

Certains langages offrent les espaces de nom (namespaces de C++, packages de Java ou modules de Python) au programmeur.

Common Lisp fournit des packages, qui sont des collections de symboles, en plus de la dizaine d'espaces de noms fournis en standard par le langage.

Pour l'espace de noms dans .NET de Microsoft, voir entre autres Base Class Library#Espace de noms, (en) Framework Class Library

[modifier] Espaces de noms implicites

Dans certains cas, la grammaire du langage permet de définir des espaces de noms implicites. Par exemple dans le langage C, le code suivant est valide :

    
struct adress {
    int         number;
    const char* road;
};

struct phone {
    const char*  number;
    const char*  prefix;
};

struct adress  myadress;
struct phone   myphone;

myadress.number = 23;
myphone.number  = "67 45 00 23";

Le compilateur possède en effet suffisamment d'informations pour résoudre l'homonymie du symbole number.

[modifier] Espaces de noms locaux

Les langages de programmations modernes créent un espace de nom dédié pour chaque appel de fonction. Ils supportent donc l'usage de variable locale qui permettent l'implémentation d'algorithmes récursifs. Cette notion est appelée la fermeture d'un identificateur, on parle aussi de visibilité ou de portée.

De nombreux langages permettent un contrôle plus complexe des fermetures: les variables globales sont visibles dans l'ensemble du programme, on peut également trouver des variables qui sont limitées au fichier courant ou à un bloc arbitraire (par exemple en C à l'aide des symboles accolades ).

La méthode utilisée pour résoudre les problèmes d'homonymie parmi les différents espaces de nom revient à ordonner ces différents espaces de noms locaux pour choisir le premier qui contient le symbole recherché. On distingue généralement deux grandes méthodes de classement: la portée lexicale, utilisée dans un langage comme le C et la portée dynamique utilisée par exemple en Perl.

[modifier] Voir aussi