En programación, ¿cuál es la diferencia entre un mango y un manejador?

Un manejador (como el mango de una escoba o un destornillador) es una forma conveniente de mantener algún objeto más complejo.

Así, por ejemplo, en los gráficos – podríamos cargar alguna imagen, darle un montón de propiedades complicadas – y luego entregarla al sistema de gráficos para que la gestione. A cambio, el sistema de gráficos nos da un «handle» que corresponde a esa imagen – que probablemente sea un puntero o algún número entero simple – que podemos utilizar para hablar de esa imagen en el futuro.

Esto es muy conveniente cuando una biblioteca toma el control de un objeto – y no quieres que el creador original pueda hacer nada al objeto sin pasar por la interfaz oficial de las bibliotecas.

Se dice que los handlers son «objetos opacos» – no tienes ni idea de lo que hay dentro de ellos ni nada en absoluto sobre ellos – excepto que existen, que puedes copiarlos libremente – y que puedes pasarlos a esa biblioteca.

Los handlers son casi siempre objetos muy pequeños.

Un handler (como un gestor de equipajes en un aeropuerto) – es una pieza de software que realiza algún servicio para ti. Así que usted podría hablar de un «Manejador de archivos» – que hace todo el trabajo sucio de tratar con los archivos en el disco.

No es raro que un manejador le dé un mango – pero los dos términos NO están relacionados de ninguna manera especial – sólo sucede que es bastante común que los manejadores hagan eso.

Para tomar el ejemplo más simple – la biblioteca estándar del lenguaje C.

Cuando usted llama a «fopen» para abrir un archivo – le devuelve un «FILE*» – que es un handle. No puedes hacer nada con el objeto FILE* que te ha dado – no hay datos útiles dentro del objeto al que apunta que puedas utilizar con seguridad. De hecho, puede que no apunte a nada válido en absoluto.

Pero cuando quieres leer del archivo (usando ‘fread’, por ejemplo) – presentas esa función con el handle de tu archivo – y sabe qué hacer con él. Cuando terminas con el archivo, pasas el handle a «fclose» y a partir de ese momento, tu handle es inútil.

En ese caso, el «FILE*» es un handle y la librería estándar de E/S es el «handler».