Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

L'incapsulamento nella OOP

Per usare un oggetto non serve sapere come è fatto
Per usare un oggetto non serve sapere come è fatto
Link copiato negli appunti

Nei programmi Object Oriented, come abbiamo già osservato, si è soliti mettere in stretta relazione tra loro un pezzo di informazione con il comportamento specifico che agisce su tale informazione. Questo è ciò che abbiamo definito oggetto.

L'incapsulamento è proprio legato al concetto di "impacchettare" in un oggetto i dati e le azioni che sono riconducibili ad un singolo componente.

Un altro modo di guardare all'incapsulamento, che abbiamo già accennato, è quello di pensare a suddividere un'applicazione in piccole parti (gli oggetti, appunto) che raggruppano al loro interno alcune funzionalità legate tra loro.

Ad esempio, pensiamo ad un conto bancario. Le informazioni utili (le proprietà) potranno essere rappresentate da: il numero di conto, il saldo, il nome del cliente, l'indirizzo, il tipo di conto, il tasso di interesse e la data di apertura.

Le azioni che operano su tali informazioni (i metodi) saranno, invece: apertura, chiusura, versamento, prelevamento, cambio tipologia conto, cambio cliente e cambio indirizzo. L'oggetto Conto incapsulerà queste informazioni e azioni al suo interno.

Come risultato, ogni modifica al sistema informatico della banca che implichi una modifica ai conti correnti, potrà essere implementata semplicemente nell'oggetto Conto.

Un altro vantaggio derivante dall'incapsulamento è quello di limitare gli effetti derivanti dalle modifiche ad un sistema software.

Chiariamo meglio il concetto avvalendoci di un classico esempio. Si pensi, ad un sistema software come ad una distesa di acqua e ad una richiesta di modifica del software come ad una enorme masso. Gettando il masso nell'acqua si creeranno tante onde e spruzzi in tutte le direzioni. Tali onde si propagheranno per tutta la distesa di acqua, rimbalzeranno sulla costa e, alla fine, si scontreranno con altre onde. In definitiva, il masso lanciato in acqua avrà causato un notevole effetto di disturbo su tutta la superficie su cui si estende la distesa d'acqua.

Proviamo, adesso, ad utilizzare il concetto di incapsulamento, definito in precedenza, applicandolo a tale esempio. La distesa d'acqua viene suddivisa in tante piccole porzioni di acqua, ognuna delle quali è ben delimitata con delle barriere per evitare che l'acqua fuoriesca da essa. Se gettiamo un masso su una di queste porzioni di acqua avremo ancora una volta il verificarsi di onde in tutte le direzioni ma, questa volta, esse termineranno la loro azione scontrandosi con le barriere delimitatrici. In sostanza, tutte le altre porzioni di acqua non verranno minimamente intaccate.

Cerchiamo ora di esaminare una situazione che preveda una modifica da apportare rimanendo nel contesto del sistema bancario di cui abbiamo definito proprietà e metodi. Supponiamo che la banca in questione abbia deciso che se un determinato cliente ha un conto di credito nella stessa banca, tale conto possa essere utilizzato come copertura per eventuali scoperti sul conto corrente.

Per gestire tale situazione, in un sistema non incapsulato, si procederebbe con un approccio decisamente poco efficace. Ovvero, non sapendo dove siano localizzati nel codice i punti in cui viene gestita l'operazione di prelievo, l'unica alternativa possibile sarebbe quella di ricercare dappertutto, aggiungendo la nuova funzionalità al programma ogni volta che si identifichi un punto da modificare.

Con buona probabilità, se saremo stati bravi, saremo riusciti ad individuare l'80 per cento dei punti da modificare. Con l'utilizzo dell'incapsulamento sarà, invece, sufficiente identificare l'oggetto che gestisce l'azione di prelevamento (ovvero l'oggetto Conto) ed eseguire la modifica all'interno di esso, completando la variazione del sistema richiesta senza intaccare tutto il resto del sistema stesso.

Un concetto simile all'incapsulamento è l'occultamento dell'informazione, meglio noto con il termine di information hiding. Tale concetto esprime l'abilità di nascondere al mondo esterno tutti i dettagli implementativi più o meno complessi che si svolgono all'interno di un oggetto. Il mondo esterno, per un oggetto, è rappresentato da qualunque cosa si trovi all'esterno dell'oggetto stesso.

L'information hiding, come l'incapsulamento fornisce lo stesso vantaggio: la flessibilità.

Implemetare l'incapsulamento

Ecco come si implementa l'incapsulamento nei vari linguaggi orientati agli oggetti per il web.

Ti consigliamo anche