Un tipo di dati astratto è un concetto teorico (una raccolta di firme e regole di funzione) per descrivere i valori che un tipo può avere definendo come questi valori possono essere costruiti e quali costruzioni creano gli stessi valori. Ad esempio, per i numeri interi, puoi avere:
Tre firme:
zero: INTEGER
successor(INTEGER): INTEGER
predecessor(INTEGER): INTEGER
E le seguenti regole:
successor(predecessor(X)) = X
predecessor(successor(X)) = X
Puoi introdurre addizioni, sottrazioni e qualsiasi altra operazione fornendo queste regole.
Gli ADT sono veicoli per capire i tipi, in modo simile a una macchina di Turing per capire il calcolo.
Esiste una relazione tra ADT e tipi di dati nei linguaggi di programmazione,
più specificamente classi in lingue OO. Ma questa è una relazione complessa, poiché le istanze di classi in OO introducono l'idea di "identità dell'oggetto" che non è presente negli ADT.