Incapsulamento (informatica)

Da Wikipedia, l'enciclopedia libera.

In informatica, nell'ambito della programmazione, si definisce incapsulamento (o encapsulation) la tecnica di nascondere il funzionamento interno - deciso in fase di progetto - di una parte di un programma, in modo da proteggere le altre parti del programma dai cambiamenti che si produrrebbero in esse nel caso che questo funzionamento fosse difettoso, oppure si decidesse di implementarlo in modo diverso. Per avere una protezione completa è necessario disporre di una robusta interfaccia che protegga il resto del programma dalla modifica delle funzionalità soggette a più frequenti cambiamenti.

Descrizione[modifica | modifica wikitesto]

Utilizzo[modifica | modifica wikitesto]

I termini incapsulamento e information hiding (letteralmente "occultamento delle informazioni") vengono spesso usati come sinonimi, anche se, a rigore, esiste una differenza concettuale: l'information hiding è il principio teorico su cui si basa la tecnica dell'incapsulamento. Secondo il concetto di information hiding i dettagli implementativi di una classe - o di un costrutto di altro tipo (oggetto, modulo, ecc) - sono nascosti all'utente. Pertanto una parte di un programma può nascondere informazioni incapsulandole in un costrutto dotato di interfaccia, permettendo l'information hiding. Tuttavia l'incapsulamento non è garanzia di information hiding, poiché potrebbe - se mal utilizzato o per motivi particolari - non nascondere i dettagli implementativi.

L'incapsulamento riduce il costo da pagare per correggere gli errori in fase di sviluppo di un programma. Questo risultato viene ottenuto strutturando l'intero progetto, ed i moduli che lo compongono, in modo che un'errata decisione presa nell'implementazione di un singolo modulo non si ripercuota sull'intero progetto, e possa essere corretta modificando soltanto quel modulo. Si potrà così evitare di dover modificare anche i moduli clienti, che interagiranno con il modulo incapsulato soltanto attraverso interfacce.

L'uso più frequente dell'incapsulamento è quello di nascondere lo strato fisico in cui vengono memorizzati i dati; in tal modo, se la rappresentazione interna dei dati cambia, le modifiche si propagano soltanto ad una piccola parte del programma. Supponiamo, ad esempio, che un punto di uno spazio tridimensionale sia rappresentato dalle coordinate x,y,z espresse da tre valori scalari in virgola mobile, e che, successivamente, si passi ad una rappresentazione delle coordinate del punto mediante un singolo array a tre dimensioni: un modulo di programma progettato secondo la tecnica dell'incapsulamento proteggerà il resto del programma da questo cambiamento di rappresentazione.

Esempi[modifica | modifica wikitesto]

Da un punto di vista generale - quindi non solo applicato alla progettazione del software - l'incapsulamento può essere visto come la suddivisione di un sistema complesso in unità modulari aventi ciascuna una funzionalità ben definita. Ad esempio, un'automobile è un macchinario piuttosto complesso. Per facilitarne il progetto, la fabbricazione e la manutenzione è vantaggioso suddividerla in "moduli" dotati di mutue interfacce, in modo che la progettazione dell'insieme possa prescindere dalla definizione dei dettagli dei singoli moduli, rendendo in questo modo l'automobile non solo più facile da progettare, ma anche più economica da produrre.

Continuando con l'esempio dell'automobile, una casa automobilistica potrebbe avere un modello di lusso, equipaggiato con un motore più potente, ed un modello economico, dotato di un motore standard. Ai progettisti conviene prevedere per entrambi i motori gli stessi collegamenti (interfacce) con il resto della vettura, in modo che tutti e due possano essere assemblati all'interno del medesimo vano motore, unificato nelle due versioni. Gli stessi motori, quindi, si potranno collegare allo stesso albero di trasmissione, agli stessi supporti ed agli stessi comandi. La differenza fra le due versioni è che quella di lusso avrà un motore con cilindrata maggiore e gli iniettori progettati per fornire il maggior volume di miscela aria-carburante che il motore di cilindrata maggiore richiede. In aggiunta al motore più potente, la versione di lusso può anche essere equipaggiata con altri optional, come un'autoradio con incorporato lettore CD, sedili più comodi, migliori sospensioni, pneumatici più larghi e differenti colori. Nonostante queste varianti, la maggior parte della vettura di lusso è uguale alla versione più economica. L'autoradio con lettore CD è un "modulo" che sostituisce la radio normale, che, a sua volta, è un modulo della versione economica. I sedili più confortevoli sono montati sui medesimi supporti di quelli standard. Che i sedili siano di pelle, plastica, abbiano il supporto lombare o no, non ha importanza.

I responsabili del progetto dividono il compito in sotto-progetti di singole parti e li assegnano a team di lavoro separati. Ogni team progetta la parte di propria competenza in ottemperanza ad una ben definita normativa e dotandola delle interfacce necessarie ad assicurare allo stesso tempo: massima flessibilità nella progettazione della parte e facilità del suo assemblaggio con le altre parti.

Come risulta dagli esempi, la tecnica dell'incapsulamento permette di ottenere una grande flessibilità del lavoro di progettazione del software. I programmatori possono modificare facilmente le funzionalità di un programma, proprio come se si trattasse di semplici operazioni di manutenzione, per meglio adattarlo alle esigenze dell'utente. Quando il codice sorgente di un programma è suddiviso in blocchi modulari in modo da tener conto dei principi dell'information hiding, le successive operazioni di modifica e manutenzione sono molto più facili perché i cambiamenti sono localizzati e non globali, e quindi si riduce notevolmente il rischio di introdurre errori ed il tempo necessario per eseguire le operazioni di test e debug.

Voci correlate[modifica | modifica wikitesto]

informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica