Come si è visto, una delle peculiarità maggiori della programmazione ad oggetti è quella di rendere agevole, snella ed efficiente la manutenzione del software.
Quando si è parlato di polimorfismo, di ereditarietà e di incapsulamento si sono messi in luce i vantaggi derivanti da tali caratteristiche nella gestione di eventuali modifiche da apportare successivamente alla fase di rilascio del software stesso.
Il concetto di Astrazione dei Dati interviene a rafforzare ulteriormente questi punti di forza, in particolare per quanto riguarda il riutilizzo del codice.
Più in particolare, si può affermare che l'Astrazione dei Dati viene utilizzata per gestire al meglio la complessità di un programma, ovvero viene applicata per decomporre sistemi software complessi in componenti più piccoli e semplici che possono essere gestiti con maggiore facilità ed efficienza.
Una delle definizioni migliori sul concetto di Astrazione dei Dati è quella di Booch: «Un'astrazione deve denotare le caratteristiche essenziali di un oggetto contraddistinguendolo da tutti gli altri oggetti e fornendo, in tal modo, dei confini concettuali ben precisi relativamente alla prospettiva dell'osservatore»
Per chiarire meglio i concetti appena esposti è sicuramente utile descrivere un esempio pratico. Consideriamo una classe Animale, che incapsuli al suo interno tutte le caratteristiche (metodi e proprietà) che sono comuni a tutti gli animali.
Ad esempio, si potranno definire i metodi mangia() e respira() e le proprietà altezza e peso (solo per citarne alcuni). Ma, riflettendoci un attimo, appare chiaro che creare una istanza di un oggetto Animale ha poco senso visto che è certamente più consono definire istanze di oggetti specifici come Cavallo, Cane, Gatto, etc.
In un simile contesto la classe Animale, non potendo essere direttamente istanziata, rappresenta un dato astratto ed è denominata, in OOP, Classe Astratta, ovvero una classe che rappresenta, fondamentalmente, un modello per ottenere delle classi derivate più specifiche e più dettagliate.
In una classe astratta, solitamente sono contenuti pochi metodi (di solito uno o due) per i quali è fornita anche l'implementazione mentre per tutti gli altri metodi è presente soltanto una mera definizione del metodo stesso ed è, pertanto, necessario (ed obbligatorio) che tutte le classi discendenti ne forniscano la opportuna implementazione.
I metodi appartenenti a questa ultima tipologia (e che sono definiti nella classe astratta) prendono il nome di Metodi Astratti. Nel caso limite in cui una classe astratta contenga soltanto metodi astratti allora essa verrà catalogata più correttamente come interfaccia (vedasi paragrafo inerente le interfacce).
Come detto, l'utilizzo dell'astrazione dei dati (unito al concetto di ereditarietà) facilita il riutilizzo del codice e snellisce il disegno di un sistema software. Infatti, qualora si presentasse la necessità, sarà agevole poter definire delle altre classi intermedie che possano avvalersi delle definizioni già presenti nelle classi astratte. Inoltre, risulterà di enorme utilità poter riutilizzare le classi astratte già definite, anche in altri progetti.
Implemetare l'astrazione dei dati
Ecco come si implementa l'astrazione dei dati in alcuni dei linguaggi orientati agli oggetti per il web.