Nella programmazione, qual è la differenza tra una maniglia e un gestore?

Un handle (come il manico di una scopa o di un cacciavite) è un modo conveniente per tenere qualche oggetto più complesso.

Così, per esempio, nella grafica - potremmo caricare qualche immagine, darle un mucchio di proprietà complicate - poi consegnarla al sistema grafico per gestirla. In cambio, il sistema grafico ci dà un "handle" che corrisponde a quell'immagine - che probabilmente è un puntatore o un semplice intero - che possiamo usare per parlare di quell'immagine in futuro.

Questo è molto comodo quando una libreria prende il controllo di un oggetto - e non si vuole che il creatore originale possa fare qualcosa all'oggetto senza passare attraverso l'interfaccia ufficiale della libreria.

Si dice che gli handler sono "oggetti opachi" - non si ha idea di cosa ci sia al loro interno o di qualsiasi cosa su di essi - tranne che esistono, si possono copiare liberamente - e si possono passare in quella libreria.

Gli handler sono quasi sempre oggetti molto piccoli.

Un handler (come un addetto ai bagagli in un aeroporto) - è un pezzo di software che esegue qualche servizio per voi. Quindi si potrebbe parlare di un "File handler" - che fa tutto il lavoro di gestione dei file su disco.

Non è raro che un handler vi dia un handle - ma i due termini NON sono correlati in alcun modo speciale - succede solo che è abbastanza comune che gli handler lo facciano.

Per fare l'esempio più semplice - la libreria standard del linguaggio C.

Quando chiamate "fopen" per aprire un file - vi restituisce un "FILE*" - che è un handle. Non potete fare nulla con l'oggetto FILE* che vi ha dato - non ci sono dati utili all'interno dell'oggetto a cui punta che potete usare in modo sicuro. In effetti, potrebbe non puntare a nulla di valido.

Ma quando volete leggere dal file (usando 'fread', per esempio) - presentate a quella funzione l'handle del vostro file - ed essa sa cosa fare con esso. Quando avete finito con il file, passate l'handle a "fclose" e da quel punto in poi, il vostro handle è inutile.

In questo caso, il "FILE*" è un handle e la libreria standard I/O è il "gestore".