Un namespace es un envase o un ambiente abstracto creado para celebrar agrupar lógico de los identificadores únicos (es decir, nombres). Un identificador definido en un namespace se asocia a ese namespace. El mismo identificador se puede definir independiente en namespaces múltiples. Es decir, el significado se asoció a un identificador definido en un namespace los mayo o mayo para no tener el mismo significado que el mismo identificador definido en otro namespace. Las idiomas que apoyan namespaces especifican las reglas que determinan qué namespace pertenece un identificador (es decir, no su definición).

Por ejemplo, Bill trabaja para la compañía X y su identificación del empleado es 123. Juan trabaja para la compañía Y y su identificación del empleado es también 123. La razón Bill y Juan se puede identificar por el mismo número de identificación es porque trabajan para diversas compañías. Las diversas compañías en este caso simbolizarían diversos namespaces. Habría confusión seria si los dos hombres trabajaran para la misma compañía, y todavía tenía la misma identificación del empleado por ejemplo, una cheque publicada al empleado que la identificación 123 no identificaría qué hombre debe recibir el cheque.

En los programas de computadora grandes o los documentos no es infrecuente tener centenares o millares de identificadores. Namespaces (o una técnica similar, ver el el emular de los namespaces ) proporcionar un mecanismo para ocultar identificadores locales. Proporcionan los medios de agrupar identificadores lógicamente relacionados en namespaces correspondientes, de tal modo haciendo el sistema más modular.

Muchos lenguajes de programación modernos proporcionan la ayuda para los namespaces. En algunos lenguajes de programación (eg. El C++, el pitón ), los identificadores que nombran los namespaces ellos mismos se asocian a un namespace de cerco. Así, en estas idiomas los namespaces pueden jerarquizar, formando un árbol del namespace. En la raíz de este árbol está el namespace global innomado.

Uso en lenguajes comunes

En el C++, un namespace se define con un bloque del namespace.

foo del namespace { barra de la internacional; } Dentro de este bloque, los identificadores pueden ser utilizados exactamente mientras que se declaran. Fuera de este bloque, el comitente del namespace debe ser prefijado. Por ejemplo, fuera del namespace foo, bar se debe escribir foo:: bar. C++ incluye otra construcción que haga esta verbosidad innecesaria. Agregando la línea

usar foo del namespace;

a un pedazo de código, el foo del prefijo:: se necesita no más.

Cifrar que no se declara explícitamente dentro de un namespace se considera para estar en el namespace global.

La resolución del namespace en C++ es jerárquica. Esto significa que dentro del food hipotético del namespace:: soup, el identificador chicken refiere al food:: sopa:: chicken si existe. Si no existe, entonces refiere al food:: chicken si existe. Si existen ni unos ni otros, chicken refiere a un identificador en el namespace global.

Namespaces en C++ es el más de uso frecuente evitar el que nombra las colisiones aunque los namespaces se utilicen extensivamente en código reciente de C++, la mayoría del más viejo código no utiliza esta facilidad. Por ejemplo, la biblioteca estándar entera C++ se define dentro del namespace std, pero antes de que la estandardización muchos componentes estuviera original en el namespace global.

Al lenguaje de programación de Java, la idea de un namespace se incorpora código de los paquetes de Java a todo el pertenece a un paquete, aunque ese paquete no necesite ser nombrado explícitamente. El código de otros paquetes es alcanzado prefijando el nombre del paquete antes del identificador apropiado, por ejemplo los class String en el Java.lang del package se pueden referir como java. String (esto se conoce como el nombre de clase calificado completamente - ). Como C++, Java ofrece una construcción que haga innecesario mecanografiar el nombre del paquete (import). Sin embargo, ciertas características (tales como reflexión ) requieren a programador utilizar completamente - el nombre calificado.

Desemejante de C++, los namespaces en Java no son jerárquicos por lo que el sintaxis de la lengua. Sin embargo, los paquetes se nombran en una manera jerárquica. Por ejemplo, todos los paquetes que comienzan con java son una parte del &mdash de la plataforma de Java; el paquete contiene base de las clases a la lengua, y contiene clases de la base específicamente referente a la reflexión.

En Java (así como Ada, C#, y otros), los namespaces/los paquetes expresan categorías semánticas de código. Por ejemplo, en C#, el namespace System contiene el código proporcionado por el sistema (el marco . Cómo es el específico estas categorías y cómo profundamente van las jerarquías diferencian de lengua a la lengua.

La función y los alcances de la clase se pueden ver como namespaces implícitos que se liguen inextricable a visibilidad, a accesibilidad, y al curso de la vida del objeto.

¡XML namespace

considera también:

l namespace XML

En el XML, la especificación del namespace de XML permite a los nombres de elementos y de cualidades en un documento XML ser únicos, similares al papel de namespaces en un lenguaje de programación, aunque XML no sea un lenguaje de programación. Usar namespaces de XML, los documentos de XML pueden contener nombres del elemento o de la cualidad de más de un vocabulario de XML.

Emulación de namespaces

En los lenguajes de programación que no proporcionan la ayuda de la lengua para los namespaces, los namespaces pueden ser emulados hasta cierto punto usando una convención de nombramiento del identificador . Por ejemplo, las bibliotecas C tales como Libpng utilizan a menudo un prefijo fijo para todas las funciones y variables que sean parte de su interfaz expuesto. El Libpng expone identificadores por ejemplo:

png_create_write_struct png_get_signature png_read_row png_set_invalid

Esto ofrece garantía razonable que los identificadores son únicos y se pueden por lo tanto utilizar en programas más grandes sin el miedo del identificador que nombra las colisiones

Desafortunadamente, esta técnica tiene varias desventajas:
No escala bien a los namespaces jerarquizados; los identificadores llegan a ser excesivamente largos.
Los individuos o las organizaciones pueden utilizar dramáticamente a convenciones de nombramiento contrarias, potencialmente introduciendo la ofuscación indeseada.
El compuesto o la “pregunta basó” operaciones en los grupos de identificadores, basados en los namespaces en los cuales se declaran, se hace poco manejable o irrealizable.
Todas las aplicaciones de los identificadores deben, en efecto, ser el completamente namespace-calificado. Las idiomas con la ayuda directa para los namespaces proporcionan generalmente las maneras para que el programador declare up-front que desean utilizar alguno o todos los identificadores de un namespace específico, que pueden entonces utilizar sin la calificación para el resto del bloque.

Ver también

Llave primaria
Alcance (programación)
Name resolution
Plan 9 - tomar a todo es una metáfora del archivo más allá de los archivos del a los nombres del .
Reiser4 - el nombramiento de sistemas debe reflejar algo que la estructura.
Paquete de Java
Javascript Namespaces

.

  • Zenithic
  • Functional map
    Random links:Shah Alam | James Sully | Arena de New Orleans | Kirby: Pesadilla en tierra ideal | Sucesivamente

  • © 2007-2008 enciclopediaespana.com; article text available under the terms of GFDL, from en.wikipedia.org
    ="http://pagead2.googlesyndication.com/pagead/show_ads.js">