Collections d'objets
Dans les applications réelles, les objets sont souvent regroupés en collections. Il faut alors gérer la collection en tant qu'entité à part entière, et non seulement les objets individuels. Les opérations typiques sur une collection sont : insérer, supprimer et accéder à un objet.
Relation entre objets d'une collection
Les opérations applicables à une collection dépendent de la relation entre ses objets. On distingue deux grandes familles : les relations linéaires et les relations non linéaires.
Relation linéaire
Dans une collection linéaire, chaque objet est connecté à l'objet précédent et à l'objet suivant. Les objets se succèdent dans un ordre défini.

Relation non linéaire
Dans une collection non linéaire, un objet peut être connecté à plusieurs autres objets. On distingue deux sous-types courants :
Relation tabulaire
Un objet est connecté à deux objets de la même ligne et à deux objets de la même colonne, formant une structure en grille.

Relation hiérarchique (arbre)
Les objets sont organisés comme les branches d'un arbre inversé : une racine relie des branches, chacune portant un ensemble d'objets enfants.

Interface vs Implémentation
Comme pour tout objet en programmation orientée objet, une collection possède deux aspects distincts qu'il faut dissocier : l'interface et l'implémentation.
Interface
L'interface d'une collection expose les opérations disponibles — insérer, supprimer, accéder, réorganiser — sans révéler comment la collection est construite en mémoire. C'est le principe de la STL (Standard Template Library) : elle fournit un riche ensemble de collections avec leurs interfaces, mais l'implémentation interne reste cachée à l'utilisateur.
Implémentation
Si la STL ne répond pas à un besoin spécifique, deux approches sont possibles :
- Écrire sa propre classe de collection avec les fonctions nécessaires.
- Hériter d'une classe STL existante et personnaliser uniquement les opérations requises.
Choix d'implémentation
Pour implémenter une collection, deux structures de données fondamentales s'offrent à nous : le tableau et la liste chaînée.
Utiliser un tableau
Un tableau à une dimension convient aux collections linéaires ; un tableau à deux dimensions aux collections non linéaires. La connexion entre les objets est établie via l'indice : un objet d'indice supérieur suit celui d'indice inférieur.
Utiliser une liste chaînée
Dans une liste chaînée, les objets sont reliés par des pointeurs plutôt que par des indices. Un objet peut pointer vers un ou plusieurs autres objets de la collection.
- La taille n'a pas besoin d'être connue à la compilation.
- Le redimensionnement ne nécessite pas de copier toute la collection — on ajuste simplement les pointeurs.
| Critère | Tableau | Liste chaînée |
|---|---|---|
| Connexion entre objets | Par indice | Par pointeur |
| Taille fixée à la compilation | Oui (tableau statique) | Non |
| Redimensionnement | Copie complète nécessaire | Ajustement des pointeurs uniquement |
| Complexité d'implémentation | Simple | Plus élevée |
| Accès aléatoire | Direct (O(1)) | Séquentiel (O(n)) |
Discussion (0)
Soyez le premier à laisser un commentaire !
Laisser un commentaire
Votre commentaire sera visible après modération.