Constructeur, accesseur, transformateur
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 6 — Types et structures de données abstraites
É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 êtreconst, et le compilateur vérifie alors la promesse. - Transformateurs :
enfiler, etdefiler.
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.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.