Adloun

informatique (MP2I/MPI) · Chapitre 6 · Application directe du cours

Constructeur, accesseur, transformateur

Types et structures de données abstraites · niveau 2

Énoncé

Classer les opérations d'une file selon le vocabulaire du programme, puis repérer celle qui ne rentre dans aucune des trois catégories et dire ce qu'elle est.


creer()          est_vide(f)      enfiler(f, x)
defiler(f)       taille(f)        detruire(f)

Corrigé

  • Constructeur : creer — il fabrique et initialise. C'est le seul.
  • Accesseurs : est_vide, taille. Ils lisent l'état sans le changer ; en C, leur paramètre doit être const, et le compilateur vérifie alors la promesse.
  • Transformateurs : enfiler, et defiler.

Le cas de defiler mérite un mot : il rend une valeur et modifie l'état. C'est donc un transformateur qui rend un résultat, et non un accesseur. La distinction n'est pas byzantine : on peut appeler deux fois un accesseur sans conséquence, jamais deux fois defiler. Certaines interfaces séparent d'ailleurs tete(f), accesseur pur, de defiler(f), transformateur — ce que fait la bibliothèque standard d'OCaml avec Stack.top et Stack.pop.

L'intrus est detruire, qui n'est ni l'un ni l'autre : il ne construit pas, ne lit pas, ne laisse pas la structure dans un état utilisable. C'est un destructeur, et sa présence dans l'interface est un aveu : elle dit que cette structure vit dans le tas et que quelqu'un doit rendre sa mémoire. Une file OCaml n'en a pas besoin ; une file C, si. C'est un endroit où la réalisation transparaît dans le contrat — le programme ne le mentionne pas, mais c'est un fait de la vie en C, et le chapitre chap:memoire y revient.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre