Namespace (de l\'informatique)
Un namespace est un récipient ou un environnement abstrait créé pour tenir un groupement logique des marques uniques (c. Une marque définie dans un namespace est associée à ce namespace. La même marque peut être indépendamment définie dans les namespaces multiples. C'est-à-dire, la signification s'est associée à une marque définie en quelques un namespace les mai ou mai pour ne pas avoir la même signification que la même marque définie dans un autre namespace. Les langues qui soutiennent des namespaces spécifient les règles qui déterminent quel namespace une marque (c., non sa définition) appartient.
Par exemple, Bill travaille pour la compagnie X et son identification des employés est 123. John travaille pour la compagnie Y et son identification des employés est également 123. La raison Bill et John peut être identifiée par le même numéro d'identité Est parce qu'ils fonctionnent pour différentes compagnies. Les différentes compagnies dans ce cas-ci symboliseraient différents namespaces. Il y aurait confusion sérieuse si les deux hommes travaillaient pour la même compagnie, et a toujours eu la même identification des employés par exemple, un chèque de règlement fourni à l'employé que l'identification 123 n'identifierait pas quel homme devrait recevoir le contrôle.
Dans les grands programmes informatiques ou les documents il n'est pas rare d'avoir des centaines ou des milliers de marques. Namespaces (ou une technique semblable, voir le émuler les namespaces ) fournir un mécanisme pour cacher les marques locales. Elles fournissent des moyens de grouper les marques logiquement relatives dans les namespaces correspondants, faisant de ce fait au système plus modulaire.
Beaucoup de langages de programmation modernes fournissent l'appui pour des namespaces. Dans quelques langages de programmation (par exemple C++ , python ), les marques appelant les namespaces eux-mêmes sont associées à un namespace enfermant. Ainsi, dans ces langues les namespaces peuvent nicher, formant un arbre de namespace. À la racine de cet arbre est le namespace global anonyme.
Utilisation dans des langages communs
Dans le C++ , un namespace est défini avec un bloc de namespace. foo de namespace { barre d'international ; } Dans ce bloc, des marques peuvent être employées exactement pendant qu'elles sont déclarées. En dehors de ce bloc, le spécificateur de namespace doit être mis en tête. Par exemple, en dehors de du namespace foo, bar doit être écrit le foo : : bar. C++ inclut une autre construction qui rend ce verbosity inutile. En ajoutant la ligne
using le foo de namespace ;
à un morceau de code, le foo de préfixe : : n'est nécessaire plus.
Coder qui n'est pas explicitement déclaré dans un namespace est considéré comme pour être dans le namespace global.
La résolution de namespace dans C++ est hiérarchique. Ceci signifie que dans le food hypothétique de namespace : : soup, la marque chicken se rapporte au food : : potage : : chicken s'il existe. S'il n'existe pas, il se rapporte alors au food : : chicken s'il existe. Si ni l'un ni l'autre n'existent, chicken se rapporte à une marque dans le namespace global.
Namespaces dans C++ sont le plus employé souvent pour éviter le appelant les collisions bien que des namespaces soient employés intensivement en code récent de C++, la plupart de code plus ancien n'emploie pas ce service. Par exemple, la bibliothèque standard entière du C++ est définie dans le namespace std, mais avant que l'étalonnage beaucoup de composants aient été à l'origine dans le namespace global.
Dans le langage de programmation de Java , l'idée d'un namespace est incorporée en code des paquets de Java de tout l'appartient à un paquet, bien que ce paquet n'ait pas besoin d'être explicitement appelé. Le code d'autres paquets est accédé en mettant en tête le nom de paquet avant la marque appropriée, par exemple les À la différence de C++, les namespaces dans Java ne sont pas hiérarchiques en ce qui concerne la syntaxe de la langue. Cependant, des paquets sont appelés d'une façon hiérarchique. Par exemple, tous les paquets commençant par En Java (aussi bien qu'ADA , C# , et d'autres), les namespaces/paquets expriment des catégories sémantiques de code. Par exemple, dans C#, le La fonction et les portées de la classe peuvent être regardées en tant que namespaces implicites qui sont inextricablement liés avec la visibilité, l'accessibilité, et la vie d'objet de . voient également : namespace du XML Dans le XML , les spécifications de namespace de XML permettent aux noms des éléments et des attributs dans un document du XML d'être uniques, semblables au rôle des namespaces dans un langage de programmation, bien que XML ne soit pas un langage de programmation. Using des namespaces de XML, les documents de XML peuvent contenir des noms d'élément ou d'attribut de plus d'un vocabulaire de XML. png_create_write_struct png_get_signature png_read_row png_set_invalid Ceci donne l'assurance raisonnable que les marques sont uniques et peuvent donc être employées dans de plus grands programmes sans crainte de de marque appelant les collisions Malheureusement, cette technique a plusieurs inconvénients : .
class String dans le Java.lang de package peuvent désigné sous le nom de java. String (ceci est connu comme nom qualifié de classe de entièrement -). Comme C++, Java offre une construction qui le rend inutile pour introduire le nom de paquet (import). Cependant, certains dispositifs (tels que réflexion ) exigent du programmeur d'employer entièrement - le nom qualifié. java sont une partie du &mdash de la plate-forme de Java de ; le paquet contient le noyau de classes à la langue, et contient des classes de noyau spécifiquement concernant la réflexion. namespace System contient le code fourni par le système (le cadre de . Comment le détail ces catégories sont et comment profondément les hiérarchies vont diffèrent de la langue à la langue. XML namespace < ! -- Cette section est liée du XML -->
Émulation des namespaces
Dans les langages de programmation qui ne fournissent pas l'appui de langue pour des namespaces, des namespaces peuvent être émulés dans une certaine mesure en employant une convention de nomination de marque . Par exemple, les bibliothèques du C telles que le Libpng emploient souvent un préfixe fixe pour toutes les fonctions et variables qui font partie de leur interface exposée. Le Libpng expose des marques comme :
Il ne mesure pas bien aux namespaces nichés ; les marques deviennent excessivement longues.
Les individus ou les organismes peuvent employer nettement des conventions de nomination contradictoires, présentant potentiellement l'obscurcissement non désiré.
Le composé ou la « question a basé » des opérations sur des groupes de marques, basés sur les namespaces dans lesquels ils sont déclarés, est rendu difficile à manier ou impraticable.
Toutes les utilisations des marques doivent, en vigueur, être le entièrement namespace-qualifié. Les langues avec le soutien direct des namespaces fournissent habituellement des manières pour que le programmeur déclare d'avance qu'elles souhaitent en employer ou toutes les marques d'un namespace spécifique, qu'elles peuvent alors employer sans qualification pour le reste du bloc. Voir également
Clé primaire
Portée de (programmation)
Name resolution
Plan 9 - la prise de tout est une métaphore du dossier au delà des dossiers de aux noms de .
Reiser4 - la nomination des systèmes devrait se refléter plutôt que moulent la structure.
Paquet de Java de
Javascript Namespaces Random links: Glottochronology | Cassville, Pennsylvanie | George Mackay Brown | Route de Mira | Namespace_(de_informática)