Puntero opaco


En programación informática , un puntero opaco es un caso especial de un tipo de datos opaco , un tipo de datos declarado como puntero a un registro o estructura de datos de algún tipo no especificado.

Si el lenguaje está fuertemente tipado , los programas y procedimientos que no tienen otra información sobre un puntero opaco tipo T aún pueden declarar variables , matrices y campos de registro de tipo T , asignar valores de ese tipo y comparar esos valores para la igualdad. Sin embargo, no podrán quitar la referencia a dicho puntero y solo podrán cambiar el contenido del objeto llamando a algún procedimiento que tenga la información que falta.

Los punteros opacos son una forma de ocultar los detalles de implementación de una interfaz de los clientes normales, de modo que la implementación pueda cambiarse sin la necesidad de volver a compilar los módulos que la utilizan. Esto también beneficia al programador, ya que se puede crear una interfaz simple y la mayoría de los detalles se pueden ocultar en otro archivo. [1] Esto es importante para proporcionar compatibilidad de código binario a través de diferentes versiones de una biblioteca compartida , por ejemplo.

Esta técnica se describe en Patrones de diseño como patrón Puente . A veces se lo conoce como " clases de control ", [2] el " idioma Pimpl " (para "puntero al idioma de implementación"), [3] " idioma del cortafuegos del compilador ", [4] " d-pointer" o " Cheshire Cat ", especialmente entre la comunidad de C ++. [2]

El tipo Handlees un puntero opaco a la implementación real, que no está definida en la especificación. Tenga en cuenta que el tipo no solo es privado (para prohibir que los clientes accedan al tipo directamente, y solo a través de las operaciones), sino también limitado (para evitar la copia de la estructura de datos y así evitar referencias colgantes).

Estos tipos a veces se denominan " tipos Taft " —nombrados en honor a Tucker Taft , el diseñador principal de Ada 95— porque fueron introducidos en la llamada Enmienda Taft a Ada 83. [5]