Sono nuovo di OOP. Ho letto definiton di entrambi i termini in molti articoli e libri diversi, ma non riesco ancora a capire se esiste una relazione tra loro.
Nei linguaggi OOP con l'ereditarietà del tipo, "astrazione" viene spesso utilizzata per indicare la relazione tra sottotipo e supertipo. Ma questo è un significato tecnico relativamente ristretto.
"Abstraction" è un concetto molto più ampio e significa l'atto di descrivere qualcosa attraverso le sue proprietà essenziali ignorando i dettagli che non sono rilevanti nel contesto di cui stai parlando.
I tipi di dati astratti sono un buon esempio di astrazione: sono definiti solo attraverso le operazioni supportate, senza specificare come tali operazioni siano implementate. L'abstract datatype "list" supporta ottenere, inserire e rimuovere elementi tramite un indice, e questo è tutto ciò che devi sapere a quel livello.
Ora in quasi tutti i principali linguaggi OO, i tipi di dati astratti sono di fatto modellati come un tipo ereditato da implementazioni concrete, ma è esso stesso un dettaglio di implementazione di questi linguaggi, non pertinente al concetto di tipi di dati astratti.
Leggi altre domande sui tag object-oriented abstraction