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".