Définition
Une règle de conception logicielle (aussi appelée principe du moindre savoir) prescrivant qu'un module ne devrait communiquer qu'avec ses collaborateurs immédiats (lui‑même, ses champs, ses paramètres, les objets qu'il crée et ses composants directs) afin de réduire le couplage et limiter la connaissance de la structure interne.
Principe
Principe
Minimiser le couplage et l'exposition d'informations en restreignant l'ensemble des objets qu'un module utilise directement, améliorant ainsi la modularité, la substituabilité et évitant les longues chaînes d'appels délégués.
Démonstration
Démonstration
Exemple concret : plutôt que client.methodA().methodB().doWork(), le client devrait demander à l'objet de haut niveau d'effectuer l'opération requise ou exposer une interface concise pour que le client ne parcoure pas le graphe d'objets interne ; cela réduit les dépendances fragiles sur l'interne des objets.
Mauvaise application
Mauvaise application
Appliquer la loi de Déméter dogmatiquement peut engendrer des méthodes wrapper excessives, des interfaces anémiques ou des responsabilités trop fragmentées nuisant à la clarté ou à la performance ; inversement, éviter toute délégation peut dupliquer la logique et réduire la réutilisation.
Conséquence
Conséquence
Quand elle est appliquée avec discernement, elle réduit le couplage accidentel, facilite le refactoring et améliore l'encapsulation et la testabilité ; elle peut cependant augmenter le nombre de méthodes de transfert ou nécessiter des interfaces façade volontairement conçues.
Inversion
Inversion
L'approche inverse permet aux modules de parcourir et manipuler librement des graphes d'objets profonds, augmentant l'expressivité mais aussi le couplage serré et les interdépendances fragiles.
Limite
Limite
Une heuristique pour la conception orientée objet et des composants, pas une règle absolue : elle vise le couplage au niveau des sites d'appel et ne prescrit pas les compromis d'implémentation interne, les décisions d'architecture en couches ou l'utilisation de données immuables partagées.
Tension sémantique
Tension sémantique
Tension entre la réduction stricte du couplage prônée par la loi et des préoccupations pragmatiques comme la performance, la clarté et l'évitement du code répétitif ; tension entre règles locales d'utilisation de messages et motifs architecturaux de haut niveau (par ex. visitor, API fluent).
Synthèse
Synthèse
La loi de Déméter recommande de restreindre les interactions directes aux collaborateurs immédiats pour diminuer le couplage et améliorer la modularité ; appliquée judicieusement elle facilite la maintenabilité, mais une application excessive ou aveugle engendre d'autres coûts à pondérer.