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 ê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.
Exercices semblables
- Lire un type sans l'écrire corrigé
- Trois lignes, trois effets corrigé
- Ce que le type opaque interdit, mot pour mot corrigé
- Trois lignes, une matrice fausse corrigé
- Le coût de l'abstraction, mesuré corrigé