Зацепление (программирование)

Материал из Википедии — свободной энциклопедии
(перенаправлено с «Связанность (программирование)»)
Перейти к: навигация, поиск

Зацепле́ние, сцепле́ние, сопряже́ние[1] (англ. coupling) — способ и степень взаимозависимости между программными модулями[2]; сила взаимосвязей между модулями[3]; мера того, насколько взаимозависимы разные подпрограммы или модули[2].

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

Метрики зацепления и связности были придуманы Ларри Константином, изначальным разработчиком структурного проектирования[4], который был также ранним сторонником таких концепций (см. также SSADM).

Слабое зацепление является одним из шаблонов GRASP Крэйга Лармана[5].

Типы зацепления[править | править вики-текст]

Концептуальная модель зацепления

Типы зацепления, согласно стандарту ISO/IEC/IEEE 24765-2010, включают:

  • зацепление по общей области (common-environment coupling);
  • зацепление по содержимому (content coupling);
  • зацепление по управлению (control coupling);
  • зацепление по данным (data coupling);
  • смешанное зацепление (hybrid coupling);
  • патологическое зацепление (pathological coupling)[2].

Методы уменьшения зацепления[править | править вики-текст]

Существуют различные методы уменьшения зацепления. Как правило, они описаны в виде шаблонов проектирования. Одним из ключевых методов является инверсия управления, и, в частности, внедрение зависимости.

Снизить зацепление также помогает использование многослойной архитектуры приложений, например Model-View-Controller, Model-View-Presenter, Model-View-ViewModel и т.п.

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

  1. Макконнел, 2010.
  2. 1 2 3 ISO/IEC/IEEE 24765-2010 Systems and software engineering — Vocabulary
  3. ISO/IEC TR 19759:2005, Software Engineering — Guide to the Software Engineering Body of Knowledge (SWEBOK)
  4. W. Stevens, G. Myers, L. Constantine, «Structured Design», IBM Systems Journal, 13 (2), 115—139, 1974.
  5. Philip A. Laplante, Philip A. Laplante. What Every Engineer Should Know about Software Engineering. — CRC Press, 2007. — P. 105–106. — ISBN 978-1-4200-0674-2.

Литература[править | править вики-текст]

Макконнелл, Стив. Совершенный код = Code Complete. — 2-е издание. — М.: Русская редакция, 2010. — С. 139. — 896 с. — (Мастер-класс). — ISBN 978-5-7502-0064-1.