Espacios de nombres

Anuncio
Espacios de nombres (namespaces)
Espacios de nombres
• Software puede ser construido en base a
muchas bibliotecas, módulos o
componentes
Conflictos de nombre
Programación Orientada a Objeto
Ing. Civil en Telecomunicaciones
Varias bibliotecas pueden definir objetos del
mismo nombre, e.g., Texto
Los espacios de nombres resuelven este
problema al agrupar todos los identificadores
bajo un nombre común
Definición de namespace
// Definicion de identificadores en namespace
namespace mariomedina {
class Texto;
void miFuncion(const Texto& t);
. . .
}
// Uso de identificadores de un namespace
mariomedina::Texto texto01;
mariomedina::miFuncion(texto01);
Reglas de búsqueda de Koenig
• No es necesario especificar el namespace
de una función si uno o más de sus
argumentos pertenece al namespace
• El caso anterior podria escribirse como
// Uso de identificadores de un namespace
mariomedina::Texto texto01;
miFuncion(texto01);
Declaración using
Directiva using namespace
• La declaración using incluye el
identificador asociado al namespace en
el programa
• La directiva using namespace incluye
todos los identificadores asociados al
namespace
using mariomedina::Texto;
Texto texto01;
Incluye el objeto Texto del namespace
using namespace std;
Incluye todos los identificadores asociados a
la biblioteca estándar de C++
mariomedina en el programa
© 2015 Mario Medina C.
1
Uso de namespaces anidados
namespace hardware {
namespace CPU {
class AMD;
class Intel;
}
namespace memoria {
class RAM;
class ROM;
}
}
using hardware::CPU::Intel;
© 2015 Mario Medina C.
Recomendaciones
• Usar using namespace con cuidado
El objetivo de los namespaces es evitar
conflictos de nombres. La probabilidad de
conflicto aumenta con el número de
namespaces incluidos en el código
• Para evitar conflictos, using no debe
usarse en archivos de encabezado .h
Sólo en archivos de código .cpp después de
directivas #include
2
Descargar