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:
