À retenir
- Permet de traiter un objet unique ou un groupe d'objets de façon identique.
- Repose sur une structure en arbre (racine, branches, feuilles).
- Facilite l'ajout de nouveaux types d'éléments sans modifier le code existant.
En programmation, le terme composite désigne une structure composée de plusieurs éléments organisés de manière hiérarchique. L'idée est de pouvoir manipuler un groupe d'objets exactement de la même manière qu'un objet unique. C'est comme une boîte de rangement : elle peut contenir des objets simples (des stylos) ou d'autres boîtes, mais pour celui qui déplace l'ensemble, c'est toujours un "contenant" à manipuler.
Étymologie
Vient du latin compositus, qui signifie « placé ensemble » ou « assemblé ». En informatique, ce mot a gagné en popularité grâce au Design Pattern Composite, un modèle de conception logicielle décrit dans les années 90 pour structurer les données en forme d'arbre.
Exemples d'usage
- Le système de fichiers : Un dossier est un élément composite car il peut contenir des fichiers (éléments simples) ou d'autres dossiers.
- Les interfaces graphiques : Un bouton est un élément simple, mais un panneau (panel) est un composite car il peut regrouper des boutons, des zones de texte ou d'autres panneaux.
- Le code HTML : Une balise
<div>est un élément composite qui peut contenir du texte ou d'autres balises.
Cas d'usage
Ce concept est massivement utilisé dès qu'il s'agit de représenter des hiérarchies de type "arbre". On le retrouve dans le développement d'interfaces utilisateur (UI), la gestion de structures de données complexes (comme les menus de navigation) ou les moteurs de rendu graphique.
Bonnes pratiques
Pour bien utiliser le principe composite, il faut que les objets simples et les objets complexes partagent la même interface (les mêmes commandes). Le piège classique est de vouloir ajouter des fonctions spécifiques aux groupes d'objets dans l'interface commune, ce qui oblige les objets simples à implémenter des fonctions dont ils n'ont pas besoin.
Synonymes
Antonymes
Conseil
Si vous débutez, imaginez toujours le composite comme un arbre généalogique ou une structure de dossiers. Si vous devez appliquer une action (comme 'afficher' ou 'calculer la taille') à la fois sur un petit élément et sur un gros bloc qui contient plein de petits éléments, alors le modèle composite est probablement la solution.
Questions fréquentes
Quelle est la différence entre composite et agrégation ?
L'agrégation est une simple relation de possession (un objet en contient un autre), tandis que le composite impose que l'on puisse utiliser le contenant et le contenu de la même manière via une interface commune.
Est-ce que le composite ralentit le programme ?
Il peut y avoir une légère surcharge due à la récursivité (le programme descend dans l'arbre), mais c'est généralement négligeable par rapport au gain de clarté du code.