Dans certains des articles, on utilise ce terme. Et il est très répandu également sur le Web, sous cette forme ou dans sa version angloclassos: data structure.
Une structure de données est simplement du code dont le but est de contenir des données et de les représenter sous une certaine forme:
- une liste est une structure de données;
- un dictionnaire est une structure de données;
- un arbre binaire est une structure de données.
Les structures de données sont donc des conteneurs, mais qui sont liés à une certaine logique de manipulation: on peut faire des append()
et des pop()
sur une liste, des get()
et setdefault()
sur un dictionnaire, et des parent()
, left()
et right()
sur un arbre binaire. Dans des langages qui ne sont pas complètement orientés objet comme PHP, on a des fonctions pour manipuler ces structures de données, par exemple
array_pop()
permet de manipuler Array()
.
Or, vous pouvez coder votre propre structure de données, et c’est d’ailleurs ce que vous faites quand vous créez un objet.
Vous pouvez apprécier maintenant la question suivante avec une certaine ironie: qu’est-ce qui n’est PAS une structure de données ? Dans les langages comme le C, une fonction n’est pas une structure de données: elle ne contient rien, c’est une suite d’instructions. Mais dans le langage Python, une fonction est une structure de données car c’est un objet: il contient des références vers son code, ses arguments, et tout un tas de metadata.
Pour se simplifier la vie, on parlera de structure de données pour les objets qui ont été créés avec pour but de contenir et de manipuler des données à travers eux (liste, tuple, set, dict, strings, etc), et non pas des objets dont leur nature a pour effet secondaire d’être une structure de données (fonctions, objets métiers, classes, etc).
Notez bien que les structures de données sont très nombreuses: il n’y a pas que les tuples et les sets dans la vie. Rien qu’en Python, on a des arrays, des string buffers, des heap queue, et tout un tas de joyeusetés.
Bon ben tout est dit… Un article aussi fulgurant que lumineux! (je deviens fayot là, faut que j’arrête…)
Mais nan, mais nan. On adore la flaterie. C’est le seul truc qu’on a pour nous motiver avec ce blog de toute façon.
“Dans les langages comme le C, une fonction n’est pas une structure de données: elle ne contient rien, c’est une suite d’instructions.”
Hmm, les pointeur ne sont-t’ils pas les adresses mémoire des structure de données appelées fonction ?
C’est tout le problème de la sémantique. On a toujours une limite à son explication. On peut même dire qu’un caractère est une structure de données: il a une adresse en mémoire et représente un caractère, mais est stocké comme un chiffre, lui-même stocké en octets. Alors qu’est-ce qu’il ne l’est pas ? Une instruction processeur ? Sauf qu’elle possède belle est bien un format spécifique à la puce, et contient des données qui les différencient les unes des autres.
Puisqu’on qu’on ne peut pas faire de différence parfaite entre les données et leurs représentations, je garde cette explication pour la fonction C, fut-elle, comme tu le soulignes, imparfaite.