Un objet en-tête est un objet introduit dans l'implémentation impérative d'un type abstrait afin de préserver l'identité de l'objet.
Lorsque l'on utilise une interface impérative, et lorsqu'un objet existe simultanément dans plusieurs conteneurs différents, il est obligatoire que le résultat d'un opération sur l'objet soit visible à travers chacun de ces conteneurs. De plus, afin de pouvoir comparer des objets pour déterminer l'identité, il faut que l'objet reste identique (la même adresse dans la mémoire, le même pointeur) après une telle opération.
Ceci pose un problème pour certains types et certaines opérations. Pour une liste par exemple, lorsque le premier élément de la liste est supprimé, ou lorsqu'un nouvel objet est inséré en début de la liste, l'identité de la liste change. On ne peut donc pas utiliser une liste directement pour implémenter une séquence impérative.
Pour éviter ce problème, on introduit un objet artificiel, appelé objet en-tête dont le seul but est de servir d'identifier de manière unique la séquence. Cet objet contient ensuite la véritable liste d'objets de la séquence. Une séquence vide sera donc représentée par l'objet en-tête avec une liste vide dedans.