En informática , un tipo de datos opaco es un tipo de datos cuya estructura de datos concreta no está definida en una interfaz . Esto impone la ocultación de la información , ya que sus valores solo se pueden manipular llamando a subrutinas que tienen acceso a la información faltante. La representación concreta del tipo se oculta a sus usuarios y la implementación visible está incompleta. Un tipo de datos cuya representación es visible se denomina transparente . [1] Los tipos de datos opacos se utilizan con frecuencia para implementar tipos de datos abstractos .
Entre los ejemplos típicos de tipos de datos opacos se incluyen los identificadores de recursos que proporciona un sistema operativo al software de aplicación . Por ejemplo, el estándar POSIX para subprocesos define una interfaz de programación de aplicaciones basada en una serie de tipos opacos que representan subprocesos o primitivos de sincronización como mutexes o variables de condición . [2]
Un puntero opaco es un caso especial de un tipo de datos opaco, un tipo de datos que se declara como un puntero a un registro o estructura de datos de algún tipo de datos no especificado. Por ejemplo, la biblioteca estándar que forma parte de la especificación del lenguaje de programación C proporciona funciones para la entrada y salida de archivos que devuelven o toman valores de tipo "puntero a " que representan secuencias de archivos (consulte Entrada/salida de archivos de C ), pero no se especifica la implementación concreta del tipo . [3]FILE
FILE
Algunos lenguajes, como C , permiten la declaración de registros opacos (structs), cuyo tamaño y campos están ocultos al cliente. Lo único que el cliente puede hacer con un objeto de este tipo es tomar su dirección de memoria , para producir un puntero opaco .
Si la información proporcionada por la interfaz es suficiente para determinar el tamaño del tipo, los clientes pueden declarar variables , campos y matrices de ese tipo, asignarles valores y, posiblemente, compararlos para determinar si son iguales. Este suele ser el caso de los punteros opacos.
En algunos lenguajes, como Java , el único tipo opaco que se proporciona es el puntero opaco. De hecho, en Java (y en varios otros lenguajes) los registros siempre se manejan a través de punteros.
Algunos lenguajes permiten tipos parcialmente opacos, por ejemplo, un registro que tiene algunos campos públicos , conocidos y accesibles para todos los clientes, y algunos campos ocultos que no se revelan en la interfaz. Estos tipos juegan un papel fundamental en la programación orientada a objetos .
La información que falta en la interfaz puede ser declarada en su implementación o en otra interfaz "solo para amigos". Esta segunda opción permite que la información oculta sea compartida por dos o más módulos.