Handle
# Handle

En programación de computadoras, un handle es una referencia abstracta a un recurso utilizado cuando un programa hace referencia a bloques de memoria u objetos que son administrados por otro sistema informático, como una base de datos o un sistema operativo.

El handle de un recurso puede ser un identificador opaco (un identificador que no expone sus detalles internos), en cuyo caso a menudo es un número entero (a menudo un índice de matriz en una matriz o "tabla" que se utiliza para administrar ese tipo de recurso), o puede ser un puntero que permite el acceso a más información. Handles comunes incluyen descriptores de archivo, sockets de red, conexiones de base de datos, identificadores de proceso (PID), e identificadores de trabajo (Job ID). Los PID y los Job ID son enteros explícitamente visibles; mientras que los descriptores de archivo y sockets (que a menudo se implementan como una forma de descriptor de archivo) se representan como enteros, generalmente considerados como opacos.

## Comparación con punteros estándar

Mientras que un puntero estándar literalmente contiene la dirección en la memoria de algún objeto, un handle es una abstracción de una referencia que se administra externamente; su opacidad permite que el referente pueda ser reubicado en la memoria por el sistema sin que deje de ser válido (lo cual sería imposible de realizar con punteros) y de ahí su nombre en inglés handle, que significa literalmente «tirador» o «manija», en el sentido de que mediante su uso se controla o maniobra. La capa extra de indirección también incrementa el control que el sistema tiene para maniobrar sobre operaciones llevadas a cabo sobre el referente (véase ocultación de información y encapsulamiento).

## Ejemplos

Los handles fueron una solución popular para la gestión de memoria en los sistemas operativos desarrollados en los años 1980, tales como Mac OS y Windows. En Unix los descriptores de archivos son esencialmente handles. Como en otros entornos de escritorio, el API de Windows utiliza handles intensamente para representar objetos en el sistema y provee de un canal de comunicaciones entre el sistema operativo y el espacio de usuario. Por ejemplo, una ventana sobre el escritorio es representada por un handle de tipo HWND (handle, window).

