La conception d’un algorithme un peu compliqué s’effectue toujours en plusieurs étapes qui correspondent à des raffinements successifs. La 1ère version de l’algorithme est autant que possible indépendante d’une implémentation particulière. La représentation des données n’est pas fixée. A ce premier niveau les données sont considérées de manière abstraite: on se donne une notation pour les décrire ainsi l’ensemble des opérations qu'on peut leur appliquer et les propriétés de ces opérations ; on parle alors de type abstrait de données. La conception de l’algorithme se fait en utilisant les opérations de type abstrait et les différents représentations de ce dernier permettent d’obtenir différentes versions de l’algorithme, si le type abstrait utilisé n’est pas un type du langage de programmation.