En informática , un espacio de nombres es un conjunto de signos ( nombres ) que se utilizan para identificar y hacer referencia a objetos de varios tipos. Un espacio de nombres garantiza que todo un conjunto de objetos determinado tenga nombres únicos para que puedan identificarse fácilmente .
Los espacios de nombres se estructuran comúnmente como jerarquías para permitir la reutilización de nombres en diferentes contextos. Como analogía, considere un sistema de nomenclatura de personas donde cada persona tiene un nombre de pila, así como un apellido compartido con sus familiares. Si los nombres de los miembros de la familia son únicos solo dentro de cada familia, entonces cada persona puede ser identificada de manera única por la combinación de nombre y apellido; solo hay una Jane Doe, aunque puede haber muchas Jane. Dentro del espacio de nombres de la familia Doe, solo "Jane" es suficiente para designar sin ambigüedades a esta persona, mientras que dentro del espacio de nombres "global" de todas las personas, se debe usar el nombre completo.
Entre los ejemplos destacados de espacios de nombres se incluyen los sistemas de archivos , que asignan nombres a los archivos. [1] Algunos lenguajes de programación organizan sus variables y subrutinas en espacios de nombres. [2] [3] [4] Las redes de computadoras y los sistemas distribuidos asignan nombres a los recursos, como computadoras, impresoras, sitios web y archivos remotos. Los sistemas operativos pueden dividir los recursos del kernel mediante espacios de nombres aislados para admitir contenedores de virtualización .
De manera similar, los sistemas de archivos jerárquicos organizan los archivos en directorios. Cada directorio es un espacio de nombres separado, por lo que los directorios "cartas" y "facturas" pueden contener un archivo "to_jane".
En la programación de computadoras , los espacios de nombres se emplean típicamente con el propósito de agrupar símbolos e identificadores alrededor de una funcionalidad particular y para evitar colisiones de nombres entre múltiples identificadores que comparten el mismo nombre.
En la creación de redes, el sistema de nombres de dominio organiza los sitios web (y otros recursos) en espacios de nombres jerárquicos .
Conflictos de nombres
Los nombres de los elementos los define el desarrollador. Esto a menudo resulta en un conflicto al intentar mezclar documentos XML de diferentes aplicaciones XML.
Este XML lleva información de la tabla HTML :
Manzanas Naranjas
Este XML contiene información sobre una mesa (es decir, un mueble):
Mesa de centro africana 80 120
Si estos fragmentos XML se agregan juntos, habría un conflicto de nombres. Ambos contienen un
elemento, pero los elementos tienen diferente contenido y significado....
Un analizador XML no sabrá cómo manejar estas diferencias.
Solución vía prefijo
Los conflictos de nombres en XML se pueden evitar fácilmente utilizando un prefijo de nombre.
El siguiente XML distingue entre la información sobre la tabla HTML y el mobiliario mediante el prefijo "h" y "f" al comienzo de los elementos.
Manzanas Naranjas African Coffee Table 80 120
Sistema de nombres
Un nombre en un espacio de nombres consta de un nombre de espacio de nombres y un nombre local. [5] [6] El nombre del espacio de nombres se suele aplicar como prefijo del nombre local.
En forma aumentada de Backus – Naur :
name =separador
Cuando los nombres locales se usan por sí mismos, la resolución de nombres se usa para decidir a qué nombre particular (si lo hay) se alude por algún nombre local particular.
Ejemplos de
Contexto | Nombre | Nombre del espacio de nombres | Nombre local | |
---|---|---|---|---|
Camino | /home/user/readme.txt | readme.txt (nombre de archivo) | ||
Nombre de dominio | www.example.com | www (nombre de dominio hoja) | ||
C ++ | std :: matriz | formación | ||
ONU / LOCODE | Nueva York de EE. UU. | NYC (localidad) | ||
XML | xmlns: xhtml = " http://www.w3.org/1999/xhtml " | cuerpo | ||
Perl | $ DBI :: errstr | $ errstr | ||
Java | java.util.Date | Fecha | ||
Nombre uniforme del recurso (URN) | urna: nbn: fi-fe19991055 | urn: nbn (Números de bibliografía nacional) | fi-fe19991055 | |
Sistema de manija | 10.1000 / 182 | 10 (manejar autoridad para nombrar) | 1000/182 (manejar nombre local) | |
Identificador de Objeto Digital | 10.1000 / 182 | 10.1000 (editor) | 182 (publicación) | |
Dirección MAC | 01-23-45-67-89-ab | 01-23-45 ( identificador único organizativo ) | 67-89-ab (específico de NIC) | |
ID de PCI | 1234 abcd | 1234 (ID de proveedor) | abcd (ID de dispositivo) | |
USB VID / PID | 2341 003f [7] | 2341 (ID de proveedor) | 003f (ID de producto) | |
SPARQL | dbr: Sydney | dbr (ontología declarada previamente, por ejemplo, especificando @prefix dbr: < http://dbpedia.org/resource/ >) | Sydney |
Delegación
La delegación de responsabilidades entre las partes es importante en aplicaciones del mundo real, como la estructura de la World Wide Web. Los espacios de nombres permiten la delegación de la asignación de identificadores a varias organizaciones emisoras de nombres, al tiempo que conservan la singularidad global. [8] Una autoridad de registro central registra los nombres de espacios de nombres asignados . Cada nombre de espacio de nombres se asigna a una organización que posteriormente es responsable de la asignación de nombres en su espacio de nombres asignado. Esta organización puede ser una organización emisora de nombres que asignan los nombres ellos mismos, u otra autoridad de registro que delega además partes de su espacio de nombres a diferentes organizaciones.
Jerarquía
Un esquema de nombres que permite la subdelegación de espacios de nombres a terceros es un espacio de nombres jerárquico .
Una jerarquía es recursiva si la sintaxis de los nombres de los espacios de nombres es la misma para cada subdelegación. Un ejemplo de jerarquía recursiva es el sistema de nombres de dominio .
Un ejemplo de una jerarquía no recursiva es el Nombre de recurso uniforme que representa un número de Autoridad de números asignados de Internet (IANA).
Registro | Registrador | Identificador de ejemplo | Nombre del espacio de nombres | Espacio de nombres |
---|---|---|---|---|
Nombre uniforme del recurso (URN) | Autoridad de asignación de números de Internet | urna: isbn: 978-3-16-148410-0 | urna | Espacio de nombres URN formal |
Espacio de nombres URN formal | Autoridad de asignación de números de Internet | urna: isbn: 978-3-16-148410-0 | ISBN | Números de libros estándar internacionales como nombres de recursos uniformes |
Número de artículo internacional (EAN) | GS1 | 978-3-16-148410-0 | 978 | Bookland |
Número de libro estándar internacional (ISBN) | Agencia Internacional del ISBN | 3-16-148410-X | 3 | Países de habla alemana |
Código de editor alemán | Agentur für Buchmarktstandards | 3-16-148410-X | dieciséis | Mohr Siebeck |
Espacio de nombres versus alcance
Un nombre de espacio de nombres puede proporcionar contexto ( alcance en ciencias de la computación) a un nombre, y los términos a veces se usan indistintamente. Sin embargo, el contexto de un nombre también puede ser proporcionado por otros factores, como la ubicación donde aparece o la sintaxis del nombre.
Sin un espacio de nombres | Con un espacio de nombres | |
---|---|---|
Alcance local | Placa de matrícula del vehículo | Estándar de jerarquía del sistema de archivos |
Alcance global | Identificador único universal | sistema de nombres de dominio |
En lenguajes de programación
Para muchos lenguajes de programación, el espacio de nombres es un contexto para sus identificadores . En un sistema operativo, un ejemplo de espacio de nombres es un directorio. Cada nombre de un directorio identifica de forma exclusiva un archivo o subdirectorio. [9]
Como regla, los nombres en un espacio de nombres no pueden tener más de un significado; es decir, diferentes significados no pueden compartir el mismo nombre en el mismo espacio de nombres. Un espacio de nombres también se denomina contexto , porque el mismo nombre en diferentes espacios de nombres puede tener diferentes significados, cada uno apropiado para su espacio de nombres.
A continuación se muestran otras características de los espacios de nombres:
- Los nombres en el espacio de nombres pueden representar tanto objetos como conceptos , ya sea el espacio de nombres un lenguaje natural o étnico , un lenguaje construido , la terminología técnica de una profesión, un dialecto , un sociolecto o un lenguaje artificial (por ejemplo, un lenguaje de programación ).
- En el lenguaje de programación Java , los identificadores que aparecen en los espacios de nombres tienen un nombre corto (local) y un nombre "calificado" largo único para su uso fuera del espacio de nombres.
- Algunos compiladores (para lenguajes como C ++ ) combinan espacios de nombres y nombres para uso interno en el compilador en un proceso llamado manipulación de nombres .
Además de su uso técnico del lenguaje abstracto como se describe anteriormente, algunos lenguajes tienen una palabra clave específica utilizada para el control explícito del espacio de nombres, entre otros usos. A continuación se muestra un ejemplo de un espacio de nombres en C ++:
#include // Así es como se trae un nombre al ámbito actual. En este caso, // los está trayendo al alcance global. usando std :: cout ; usando std :: endl ;espacio de nombres box1 { int box_side = 4 ; }espacio de nombres box2 { int box_side = 12 ; }int main () { int box_side = 42 ; cout << box1 :: box_side << endl ; // Resultados 4. cout << box2 :: box_side << endl ; // Resultados 12. cout << box_side << endl ; // Resultados 42. }
Consideraciones informáticas
Un espacio de nombres en informática (a veces también llamado ámbito de nombres ) es un contenedor o entorno abstracto creado para contener una agrupación lógica de identificadores o símbolos únicos (es decir, nombres). Un identificador definido en un espacio de nombres está asociado solo con ese espacio de nombres. El mismo identificador se puede definir de forma independiente en varios espacios de nombres. Es decir, un identificador definido en un espacio de nombres puede tener o no el mismo significado que el mismo identificador definido en otro espacio de nombres. Los lenguajes que admiten espacios de nombres especifican las reglas que determinan a qué espacio de nombres pertenece un identificador (no su definición). [10]
Este concepto se puede ilustrar con una analogía. Imagine que dos empresas, X e Y, asignan cada una números de identificación a sus empleados. X no debe tener dos empleados con el mismo número de identificación, y lo mismo para Y; pero no es un problema que se utilice el mismo número de identificación en ambas empresas. Por ejemplo, si Bill trabaja para la empresa X y Jane trabaja para la empresa Y, entonces no es un problema que cada uno de ellos sea el empleado # 123. En esta analogía, el número de identificación es el identificador y la empresa sirve como espacio de nombres. No causa problemas para el mismo identificador identificar a una persona diferente en cada espacio de nombres.
En grandes programas o documentos informáticos , es común tener cientos o miles de identificadores. Los espacios de nombres (o una técnica similar, consulte Emulación de espacios de nombres ) proporcionan un mecanismo para ocultar identificadores locales. Proporcionan un medio para agrupar identificadores relacionados lógicamente en espacios de nombres correspondientes, lo que hace que el sistema sea más modular .
Los dispositivos de almacenamiento de datos y muchos lenguajes de programación modernos admiten espacios de nombres. Los dispositivos de almacenamiento utilizan directorios (o carpetas) como espacios de nombres. Esto permite almacenar dos archivos con el mismo nombre en el dispositivo siempre que estén almacenados en directorios diferentes. En algunos lenguajes de programación (por ejemplo, C ++ , Python ), los identificadores que nombran los espacios de nombres están asociados con un espacio de nombres adjunto. Por lo tanto, en estos idiomas, los espacios de nombres pueden anidar, formando un árbol de espacios de nombres . En la raíz de este árbol se encuentra el espacio de nombres global sin nombre .
Uso en idiomas comunes
- C
Es posible utilizar estructuras anónimas como espacios de nombres en C desde C99 .
// helper.c static int _add ( int a , int b ) { return a + b ; }const struct { doble pi ; int ( * agregar ) ( int , int ); } ayudante = { 3.14 , _add };// helper.h const struct { double pi ; int ( * agregar ) ( int , int ); } ayudante ;// main.c #include #include "helper.h"int main () { printf ( "3 + 2 =% d \ n " , helper . add ( 3 , 2 )); printf ( "pi es% f \ n " , ayudante . pi ); }
- C ++
En C ++ , un espacio de nombres se define con un bloque de espacio de nombres. [11]
espacio de nombres abc { int bar ; }
Dentro de este bloque, los identificadores se pueden usar exactamente como se declaran. Fuera de este bloque, el especificador de espacio de nombres debe tener un prefijo. Por ejemplo, fuera de namespace abc
, bar
debe escribirse abc::bar
para poder acceder. C ++ incluye otra construcción que hace innecesaria esta verbosidad. Añadiendo la línea
usando el espacio de nombres abc ;
a un fragmento de código, el prefijo abc::
ya no es necesario.
Los identificadores que no se declaran explícitamente dentro de un espacio de nombres se consideran en el espacio de nombres global.
int foo ;
Estos identificadores se pueden usar exactamente como se declaran o, dado que el espacio de nombres global no tiene nombre, el especificador de espacio de nombres ::
puede tener un prefijo. Por ejemplo, foo
también se puede escribir ::foo
.
La resolución del espacio de nombres en C ++ es jerárquica. Esto significa que dentro del espacio de nombres hipotético food::soup
, el identificador se chicken
refiere a food::soup::chicken
. Si food::soup::chicken
no existe, entonces se refiere a food::chicken
. Si no existe food::soup::chicken
ni food::chicken
, se chicken
refiere a ::chicken
un identificador en el espacio de nombres global.
Los espacios de nombres en C ++ se utilizan con mayor frecuencia para evitar colisiones de nombres . Aunque los espacios de nombres se utilizan ampliamente en el código C ++ reciente, la mayoría del código antiguo no utiliza esta función porque no existía en las primeras versiones del lenguaje. Por ejemplo, toda la biblioteca estándar de C ++ se define dentro namespace std
, pero antes de la estandarización, muchos componentes estaban originalmente en el espacio de nombres global. Un programador puede insertar la using
directiva para omitir los requisitos de resolución del espacio de nombres y obtener compatibilidad con el código anterior que espera que todos los identificadores estén en el espacio de nombres global. Sin embargo, el uso de la using
directiva por razones distintas a la compatibilidad con versiones anteriores (por ejemplo, conveniencia) se considera contrario a las buenas prácticas de código.
- Java
En Java , la idea de un espacio de nombres está incorporada en los paquetes de Java . Todo el código pertenece a un paquete, aunque ese paquete no necesita ser nombrado explícitamente. Se accede al código de otros paquetes colocando el prefijo del nombre del paquete antes del identificador apropiado, por ejemplo, se puede hacer referencia a class String
in (esto se conoce como el nombre de clase completo ). Como C ++, Java ofrece una construcción que hace innecesario escribir el nombre del paquete ( ). Sin embargo, ciertas características (como la reflexión ) requieren que el programador utilice el nombre completo.package java.lang
java.lang.String
import
A diferencia de C ++, los espacios de nombres en Java no son jerárquicos en lo que respecta a la sintaxis del lenguaje. Sin embargo, los paquetes se nombran de forma jerárquica. Por ejemplo, todos los paquetes que comienzan con java
son parte de la plataforma Java ; el paquete java.lang
contiene clases centrales del lenguaje y java.lang.reflect
contiene clases centrales específicamente relacionadas con la reflexión.
En Java (y Ada , C # y otros), los espacios de nombres / paquetes expresan categorías semánticas de código. Por ejemplo, en C #, namespace System
contiene código proporcionado por el sistema ( .NET Framework ). Cuán específicas son estas categorías y cuán profundas son las jerarquías difieren de un idioma a otro.
Los ámbitos de función y clase se pueden ver como espacios de nombres implícitos que están inextricablemente vinculados con la visibilidad, la accesibilidad y la vida útil del objeto .
- C#
Los espacios de nombres se utilizan mucho en el lenguaje C #. Todas las clases de .NET Framework están organizadas en espacios de nombres, para que se puedan usar con mayor claridad y evitar el caos. Además, los programadores utilizan ampliamente los espacios de nombres personalizados, tanto para organizar su trabajo como para evitar colisiones de nombres . Al hacer referencia a una clase, se debe especificar su nombre completo, que significa espacio de nombres seguido del nombre de la clase,
Sistema . Consola . WriteLine ( "¡Hola mundo!" ); int i = Sistema . Convertir . ToInt32 ( "123" );
o agregue una declaración de uso . Esto elimina la necesidad de mencionar el nombre completo de todas las clases en ese espacio de nombres.
usando el sistema ;Consola . WriteLine ( "¡Hola mundo!" ); int i = Convertir . ToInt32 ( "123" );
En los ejemplos anteriores, System es un espacio de nombres y Console y Convert son clases definidas dentro de System .
- Pitón
En Python , los espacios de nombres se definen mediante módulos individuales y, dado que los módulos pueden estar contenidos en paquetes jerárquicos, los espacios de nombres también son jerárquicos. [12] [13] En general, cuando se importa un módulo, los nombres definidos en el módulo se definen a través del espacio de nombres de ese módulo y se accede a ellos desde los módulos de llamada utilizando el nombre completo.
# asumir module define dos funciones: func1 () y func2 () y una clase: Class1 import ModuleaModulea . func1 () Modulea . func2 () a = Modulea . Clase1 ()
La from ... import ...
declaración se puede usar para insertar los nombres relevantes directamente en el espacio de nombres del módulo de llamada, y se puede acceder a esos nombres desde el módulo de llamada sin el nombre calificado:
# suponga que Modulea define dos funciones: func1 () y func2 () y una clase: Class1 de Modulea import func1func1 () func2 () # esto fallará como un nombre indefinido, al igual que el nombre completo Modulea.func2 () a = Class1 () # esto fallará como un nombre indefinido, al igual que el nombre completo Modulea.Class1 ()
Dado que esto importa directamente nombres (sin calificación), puede sobrescribir nombres existentes sin advertencias.
Una forma especial de la declaración es la from ... import *
que importa todos los nombres definidos en el paquete nombrado directamente en el espacio de nombres del módulo de llamada. El uso de esta forma de importación, aunque es compatible con el lenguaje, generalmente se desaconseja ya que contamina el espacio de nombres del módulo de llamada y hará que los nombres ya definidos se sobrescriban en el caso de conflictos de nombres. [14]
Python también admite import x as y
como una forma de proporcionar un alias o un nombre alternativo para que lo use el módulo de llamada:
importar numpy como npa = np . naranja ( 1000 )
- Espacio de nombres XML
En XML , la especificación del espacio de nombres XML permite que los nombres de los elementos y atributos en un documento XML sean únicos, similar a la función de los espacios de nombres en los lenguajes de programación. Al utilizar espacios de nombres XML, los documentos XML pueden contener nombres de elementos o atributos de más de un vocabulario XML.
- PHP
Los espacios de nombres se introdujeron en PHP a partir de la versión 5.3. Se puede evitar la colisión de nombres de clases, funciones y variables. En PHP , un espacio de nombres se define con un bloque de espacio de nombres.
# Archivo phpstar / foobar.phpespacio de nombres phpstar ;class FooBar { función pública foo () : void { echo 'Hola mundo, de la función foo' ; } barra de función pública () : void { echo 'Hola mundo, desde la barra de función' ; } }
Podemos hacer referencia a un espacio de nombres PHP de las siguientes formas diferentes:
# Archivo index.php# Incluya el archivo include "phpstar / foobar.php" ;# Opción 1: prefijo directamente el nombre de la clase con el espacio de nombres $ obj_foobar = new \ phpstar \ FooBar ();# Opción 2: importar el espacio de nombres use phpstar \ FooBar ; $ obj_foobar = new FooBar ();# Opción 2a: importar y alias el espacio de nombres use phpstar \ FooBar como FB ; $ obj_foobar = nuevo FB ();# Acceda a las propiedades y métodos de forma regular $ obj_foobar -> foo (); $ obj_foobar -> bar ();
Emulando espacios de nombres
En los lenguajes de programación que carecen de soporte de lenguaje para espacios de nombres, los espacios de nombres se pueden emular hasta cierto punto mediante el uso de una convención de nomenclatura de identificadores . Por ejemplo, las bibliotecas C como libpng a menudo usan un prefijo fijo para todas las funciones y variables que forman parte de su interfaz expuesta. Libpng expone identificadores como:
png_create_write_structpng_get_signaturepng_read_rowpng_set_invalid
Esta convención de nomenclatura proporciona una garantía razonable de que los identificadores son únicos y, por lo tanto, se pueden utilizar en programas más grandes sin colisiones de nombres . [15] Asimismo, muchos paquetes escritos originalmente en Fortran (por ejemplo, BLAS , LAPACK ) reservan las primeras letras del nombre de una función para indicar a qué grupo pertenece.
Esta técnica tiene varios inconvenientes:
- No se adapta bien a los espacios de nombres anidados; los identificadores se vuelven excesivamente largos ya que todos los usos de los identificadores deben estar completamente calificados para el espacio de nombres .
- Los individuos u organizaciones pueden usar convenciones de nomenclatura inconsistentes, lo que podría introducir una ofuscación no deseada.
- Las operaciones compuestas o "basadas en consultas" en grupos de identificadores, basadas en los espacios de nombres en los que se declaran, se vuelven difíciles de manejar o inviables.
- En idiomas con longitud de identificador restringida, el uso de prefijos limita la cantidad de caracteres que se pueden usar para identificar lo que hace la función. Este es un problema particular para los paquetes escritos originalmente en FORTRAN 77 , que ofrecían solo 6 caracteres por identificador. Por ejemplo, el nombre de la función BLAS
DGEMM
indica que opera con números de doble precisión ("D") y matrices generales ("GE"), y solo los dos últimos caracteres muestran lo que realmente hace: multiplicación matriz-matriz ( el "MM").
Hay varias ventajas:
- No se requieren herramientas de software especiales para localizar nombres en archivos de código fuente. Un programa simple como grep es suficiente.
- No hay conflictos de nombres de espacios de nombres.
- No hay necesidad de alterar los nombres y, por lo tanto, no hay problemas potenciales de incompatibilidad.
Ver también
- Código postal del punto de entrega de 11 dígitos
- Nomenclatura binomial (género-especie en biología )
- Nomenclatura química
- Clasificación decimal de Dewey
- Identificador de Objeto Digital
- sistema de nombres de dominio
- Identidad (programación orientada a objetos)
- Clasificación de la Biblioteca del Congreso
- Catálogos de estrellas y convenciones de nomenclatura astronómica
- Espacio de nombres XML
- Búsqueda de nombre dependiente del argumento
Referencias
- ^ Adya, Atul; Bolosky, William; Castro, Miguel; Cermak, Gerald; Chaiken, Ronnie; Douceur, John; Howell, Jon; Lorch, Jacob; Theimer, Marvin; Wattenhofer, Roger (2002). FARSITE: almacenamiento federado, disponible y confiable para un entorno de poca confianza (PDF) . Proc. USENIX Symp. sobre Diseño e Implementación de Sistemas Operativos. Archivado desde el original (PDF) el 28 de julio de 2010.
La construcción principal establecida por un sistema de archivos es un espacio de nombres de directorio jerárquico, que es el depósito lógico de archivos.
- ^ "Preguntas frecuentes de C #: qué es un espacio de nombres" . http://en.csharp-online.net/ : C # Online Net. Archivado desde el original el 20 de octubre de 2013 . Consultado el 23 de febrero de 2010 .
Un espacio de nombres no es más que un grupo de ensamblados, clases o tipos. Un espacio de nombres actúa como un contenedor, como una carpeta de disco, para las clases organizadas en grupos, generalmente según la funcionalidad. La sintaxis del espacio de nombres de C # permite anidar los espacios de nombres.
- ^ "Una descripción general de los espacios de nombres en PHP" . Manual de PHP .
¿Qué son los espacios de nombres? En la definición más amplia, los espacios de nombres son una forma de encapsular elementos. Esto puede verse como un concepto abstracto en muchos lugares. Por ejemplo, en cualquier sistema operativo, los directorios sirven para agrupar archivos relacionados y actúan como un espacio de nombres para los archivos dentro de ellos.
- ^ "Creación y uso de paquetes" . Documentación de Java . Oráculo.
Un paquete es una agrupación de tipos relacionados que proporciona protección de acceso y gestión del espacio de nombres. Tenga en cuenta que los tipos se refieren a clases, interfaces, enumeraciones y tipos de anotaciones. Las enumeraciones y los tipos de anotaciones son tipos especiales de clases e interfaces, respectivamente, por lo que en esta lección a menudo se hace referencia a los tipos simplemente como clases e interfaces.
[se necesita una mejor fuente ] - ^ XML Core Working Group (8 de diciembre de 2009). "Espacios de nombres en XML 1.0 (tercera edición)" . W3C . Consultado el 30 de marzo de 2012 .
- ^ Moats, Ryan (mayo de 1997). "Sintaxis" . Sintaxis URN . IETF . pag. 1 segundo. 2. doi : 10.17487 / RFC2141 . RFC 2141 . Consultado el 30 de marzo de 2012 .
- ^ Stephen J. Gowdy. "Lista de ID de USB" . 2013.
- ^ Sollins & Masinter (diciembre de 1994). "Requisitos de capacidades funcionales" . Requisitos funcionales para nombres uniformes de recursos . IETF . pag. 3. seg. 2. doi : 10.17487 / RFC1731 . RFC 1731 . Consultado el 30 de marzo de 2012 .
- ^ "Preguntas frecuentes de C #: qué es un espacio de nombres" . http://en.csharp-online.net/ : C # Online Net. Archivado desde el original el 20 de octubre de 2013 . Consultado el 23 de febrero de 2010 .
Por ejemplo, [en Windows ], para acceder a las clases y miembros integrados de entrada-salida (E / S), use el espacio de nombres System.IO. O, para acceder a clases y miembros relacionados con la Web, utilice el espacio de nombres System.Web.
- ^ "Un espacio de nombres es" una agrupación lógica de los nombres utilizados dentro de un programa. " " . Webopedia.com . Consultado el 26 de julio de 2011 .
- ^ "Los espacios de nombres permiten agrupar entidades como clases, objetos y funciones bajo un nombre" . Cplusplus.com . Consultado el 26 de julio de 2011 .
- ^ "6. Módulos" . El tutorial de Python . Fundación de software Python . Consultado el 25 de octubre de 2010 .
- ^ "Ámbitos y espacios de nombres de Python" . Docs.python.org . Consultado el 26 de julio de 2011 .
- ^ https://docs.python.org/3/tutorial/modules.html "en general, la práctica de importar * desde un módulo o paquete está mal vista"
- ^ Danny Kalev. "Por qué odio los espacios de nombres" . Archivado desde el original el 9 de julio de 2016.CS1 maint: bot: estado de URL original desconocido ( enlace )