Un type abstrait est un type dont la description ne fait pas référence à la façon dont il est implémenté. L'absence de ce type de références permet au créateur du type de choisir l'implémentation qu'il souhaite et de modifier cette implémentation a posteriori, afin d'améliorer la performance ou d'y rajouter des fonctionnalités supplémentaires.
Le degré d'abstraction est toujours en conflit avec la performance. C'est pourquoi il est relativement difficile d'obtenir un type abstrait permettant à la fois un grand nombre d'implémentations différentes et l'efficacité.
La description d'un type abstrait est donc une description des opérations possibles ayant un objet du type comme argument ou résultat (voir chapitre 15). Afin d'être complète, une telle description doit contenir plusieurs éléments expliqués en détail dans les sections suivantes.
Une grande partie de cette description doit être faite sous forme de documentation. Une description sous forme de commentaires dans le code est utile mais insuffisante. Certaines informations concernant le type ne sont pas naturellement rattachées à une opération particulière et donc pas non plus à un morceau de code particulier. Une documentation sous forme de commentaires a tendance à omettre ce type d'informations très importantes pour la compréhension du type.