Jump to content

Круговая зависимость

В разработке программного обеспечения циклическая зависимость — это связь между двумя или более модулями, которые прямо или косвенно зависят друг от друга для правильного функционирования. Такие модули также известны как взаимно рекурсивные .

Циклические зависимости естественны во многих моделях предметной области , где определенные объекты одной и той же предметной области зависят друг от друга. [1] Однако при проектировании программного обеспечения циклические зависимости между более крупными программными модулями считаются антишаблоном из-за их негативных последствий. [1] Несмотря на это, такие циклические (или циклические) зависимости широко распространены среди исходных файлов реального программного обеспечения. [2] Однако взаимно рекурсивные модули довольно распространены в функциональном программировании , где часто поощряются индуктивные и рекурсивные определения.

Проблемы

[ редактировать ]

Циклические зависимости могут вызывать множество нежелательных эффектов в программах. Наиболее проблематичной с точки зрения разработки программного обеспечения является тесная связь взаимозависимых модулей, которая уменьшает или делает невозможным отдельное повторное использование одного модуля.

Циклические зависимости могут вызвать эффект домино , когда небольшое локальное изменение в одном модуле распространяется на другие модули и имеет нежелательные глобальные последствия (ошибки программы, ошибки компиляции). Циклические зависимости также могут привести к бесконечным рекурсиям или другим неожиданным сбоям.

Циклические зависимости также могут вызывать утечки памяти , не позволяя некоторым автоматическим сборщикам мусора (тех, которые используют подсчет ссылок ) освободить неиспользуемые объекты.

Причины и решения

[ редактировать ]

В очень больших проектах программного обеспечения инженеры-программисты могут потерять контекст и непреднамеренно ввести циклические зависимости. Существуют инструменты для анализа программного обеспечения и поиска нежелательных циклических зависимостей. [3]

Циклические зависимости могут быть введены при реализации функции обратного вызова . Этого можно избежать, применяя шаблоны проектирования, такие как шаблон наблюдателя .

См. также

[ редактировать ]
  1. ^ Перейти обратно: а б Лакос, Джон (20 июля 1996 г.). Крупномасштабное проектирование программного обеспечения на C++ (1-е изд.). Бостон: Аддисон-Уэсли. ISBN  9780201633627 .
  2. ^ Мелтон, Хайден; Темперо, Юэн (12 января 2007 г.). «Эмпирическое исследование циклов среди классов в Java». Эмпирическая программная инженерия . 12 (4): 389–415. CiteSeerX   10.1.1.141.5362 . дои : 10.1007/s10664-006-9033-1 . ISSN   1382-3256 . S2CID   11134940 .
  3. ^ JDepend для Java
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: a4818ac00e517f94ca89f02ef667c75f__1709573820
URL1:https://arc.ask3.ru/arc/aa/a4/5f/a4818ac00e517f94ca89f02ef667c75f.html
Заголовок, (Title) документа по адресу, URL1:
Circular dependency - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)