Incapsulamento ed information hiding

I termini incapsulamento ed information hiding sono due concetti della programmazione ad oggetti molto legati fra loro.
Entrambi, infatti, si riferiscono alla capacità della classe di circoscrivere e nascondere i suoi dettagli interni.

Nello specifico, l'incapsulamento indica la caratteristica delle classi di racchiudere in un involucro, o capsula, sia le caratteristiche che le funzionalità delle entità rappresentate e relative alla realtà di interesse.

L'information hiding, invece, si riferisce alla caratteristica delle classi di nascondere, al loro interno, una serie di dettagli.
Più specificatamente, l'information hiding può riferirsi:

  • all'occultamento delle informazioni, ossia dei dettagli relativi alla modalità di memorizzazione delle infomazioni relative alle caratteristiche della classe
  • all'occultamento delle implementazioni delle funzionalità relative alla classe

Volendo chiarire meglio con degli esempi, possiamo riproporre l'esempio della classe televisore, già citata negli esempi precedenti, per dire che l'occultamento delle informazioni nasconde il modo in cui l'informazione relativa allo stato del televisore è, di fatto, memorizzata al suo interno, in una variabile di tipo booleano (acceso=vero, spento=falso), oppure in una variabile di tipo intero (acceso=1, spento=0), oppure in una variabile di tipo stringa, i cui valori sono proprio i termini acceso e spento.

L'occultamento delle implementazioni, invece, nasconde la modalità con cui le funzionalità accendi e spegni agiscono concretamente.
Alle altre entità appartenenti al contesto di interesse occorre semplicemente sapere che il televisore fornisce due funzionalità, una per richiederne l'accensione ed una per lo spegnimento.
Le istruzioni specifiche, attraverso cui lo stato interno del televisore viene cambiato, non deve essere né rilevante, né noto all'esterno.

L'insieme di questi due principi costituisce uno dei pilastri della programmazione ad oggetti, che consente di realizzare applicazioni costituite da codice modulare, riutilizzabile, estendibile, con il minimo impatto sul funzionamento delle componenti esistenti, minimizzando, quindi, la probabilità di introdurre malfunzionamenti o bachi.

Graficamente possiamo riassumere quanto definito attraverso l'immagine che segue:

Incapsulamento ed information hiding