---
title: "Dépendance circulaire"
type: "antipattern"
slug: "circular-dependency"
url: "http://localhost:3000/fr/antipatterns/circular-dependency.md"
description: "Interdépendance problématique de modules logiciels"
---
# Dépendance circulaire

> Interdépendance problématique de modules logiciels

En [génie logiciel](https://en.wikipedia.org/wiki/Software%5Fengineering "Software engineering"), une **dépendance circulaire** (ou **dépendance cyclique**) est une relation entre deux modules ou plus qui dépendent l'un de l'autre, directement ou indirectement, pour fonctionner correctement. De tels modules sont aussi qualifiés de [mutuellement récursifs](https://en.wikipedia.org/wiki/Mutual%5Frecursion "Mutual recursion").

## Vue d'ensemble

Les dépendances circulaires sont naturelles dans de nombreux [modèles de domaine](https://en.wikipedia.org/wiki/Domain%5Fmodel "Domain model") où certains objets d'un même domaine dépendent les uns des autres. Cependant, en [conception logicielle](https://en.wikipedia.org/wiki/Software%5Fdesign "Software design"), les dépendances circulaires entre des modules logiciels plus importants sont considérées comme un [anti-pattern](https://en.wikipedia.org/wiki/Anti-pattern "Anti-pattern") en raison de leurs effets négatifs. Malgré cela, de telles dépendances circulaires (ou cycliques) se sont révélées répandues parmi les fichiers source des logiciels du monde réel. Les modules mutuellement récursifs sont toutefois assez courants en [programmation fonctionnelle](https://en.wikipedia.org/wiki/Functional%5Fprogramming "Functional programming"), où les définitions inductives et récursives sont souvent encouragées.

## Problèmes

Les dépendances circulaires peuvent provoquer de nombreux effets indésirables dans les programmes informatiques. Le plus problématique du point de vue de la conception logicielle est le _couplage fort_ ([tight coupling](https://en.wikipedia.org/wiki/Coupling%5F%28computer%5Fprogramming%29 "Coupling (computer programming)")) des modules mutuellement dépendants, qui réduit ou rend impossible la réutilisation séparée d'un module unique.

Les dépendances circulaires peuvent provoquer un [effet domino](https://en.wikipedia.org/wiki/Domino%5Feffect "Domino effect") lorsqu'un petit changement local dans un module se propage à d'autres modules et a des effets globaux indésirables (erreurs de programme, erreurs de compilation). Les dépendances circulaires peuvent aussi entraîner des récursions infinies ou d'autres défaillances inattendues.

Les dépendances circulaires peuvent également causer des [fuites de mémoire](https://en.wikipedia.org/wiki/Memory%5Fleak "Memory leak") en empêchant certains [ramasse-miettes](https://en.wikipedia.org/wiki/Garbage%5Fcollection%5F%28computer%5Fscience%29 "Garbage collection (computer science)") automatiques (ceux qui utilisent le [comptage de références](https://en.wikipedia.org/wiki/Reference%5Fcounting "Reference counting")) de désallouer les objets inutilisés.

## Causes et solutions

Dans de très vastes conceptions logicielles, les ingénieurs logiciels peuvent perdre le contexte et introduire par inadvertance des dépendances circulaires. Il existe des outils pour analyser le logiciel et trouver les dépendances circulaires indésirables.

Des dépendances circulaires peuvent être introduites lors de l'implémentation d'une fonctionnalité de [rappel](https://en.wikipedia.org/wiki/Callback%5F%28computer%5Fprogramming%29 "Callback (computer programming)") (callback). Cela peut être évité en appliquant des [patrons de conception](https://en.wikipedia.org/wiki/Software%5Fdesign%5Fpattern "Software design pattern") comme le [patron observateur](https://en.wikipedia.org/wiki/Observer%5Fpattern "Observer pattern").
