Зацепление (программирование): различия между версиями
[непроверенная версия] | [отпатрулированная версия] |
·1e0nid· (обсуждение | вклад) м →Типы зацепления: стилевые правки |
|||
Строка 11: | Строка 11: | ||
[[Файл:CouplingVsCohesion.svg|thumb|300px|right|Связность и зацепление модулей:<br/> a) '''правильно''' (слабое зацепление, сильная связность), b) '''неправильно''' (сильное зацепление, слабая связность)]] |
[[Файл:CouplingVsCohesion.svg|thumb|300px|right|Связность и зацепление модулей:<br/> a) '''правильно''' (слабое зацепление, сильная связность), b) '''неправильно''' (сильное зацепление, слабая связность)]] |
||
Типы зацепления, согласно стандарту ISO/IEC/IEEE 24765 |
Типы зацепления, согласно стандарту ISO/IEC/IEEE 24765, включают:<ref name="ISO_24765"/> |
||
* '''зацепление по общей области''' ({{lang-en2|common-environment coupling, common coupling}}) — два программных модуля совместно используют общую область данных; |
* '''зацепление по общей области''' ({{lang-en2|common-environment coupling, common coupling}}) — два программных модуля совместно используют общую область данных; |
||
* '''зацепление по содержимому''' ({{lang-en2|content coupling}}) — некоторые или все программные модули включены в некоторый модуль как составные части; |
* '''зацепление по содержимому''' ({{lang-en2|content coupling}}) — некоторые или все программные модули включены в некоторый модуль как составные части; |
Версия от 13:41, 5 апреля 2022
Зацепление[1], сцепление, связанность, сопряжение[2] (англ. coupling) — способ и степень взаимозависимости между программными модулями[3]; сила взаимосвязей между модулями[4]; мера того, насколько взаимозависимы разные подпрограммы или модули[3].
Сильное зацепление рассматривается как серьёзный недостаток, поскольку затрудняет понимание логики модулей, их модификацию, автономное тестирование, а также переиспользование по отдельности. Слабое зацепление, напротив, является признаком хорошо структурированной и хорошо спроектированной системы, и, когда оно комбинируется с сильной связностью, соответствует общим показателям хорошей читаемости и сопровождаемости.
Метрики зацепления и связности были придуманы Ларри Константином, изначальным разработчиком структурного проектирования[5], который был также ранним сторонником таких концепций (см. также SSADM).
Слабое зацепление является одним из шаблонов GRASP Крэйга Лармана[6].
Типы зацепления
Типы зацепления, согласно стандарту ISO/IEC/IEEE 24765, включают:[3]
- зацепление по общей области (common-environment coupling, common coupling) — два программных модуля совместно используют общую область данных;
- зацепление по содержимому (content coupling) — некоторые или все программные модули включены в некоторый модуль как составные части;
- зацепление по управлению (control coupling) — один программный модуль обменивается данными с другим модулем с явной целью повлиять на его последующее выполнение;
- зацепление по данным (data coupling, input-output coupling) — выходные данные одного программного модуля служат входными данными другого модуля;
- смешанное зацепление (hybrid coupling) — различные подмножества значений некоторого элемента данных используются в нескольких программных модулях для разных и несвязанных целей;
- патологическое зацепление (pathological coupling) — один программный модуль зависит от деталей внутренней реализации другого модуля или влияет на них.
Методы уменьшения зацепления
Существуют различные методы уменьшения зацепления (англ. decoupling). Как правило, они описаны в виде шаблонов проектирования. Одним из ключевых методов является инверсия управления, и, в частности, внедрение зависимости.
Снизить зацепление также помогает использование многослойной архитектуры приложений, например Model-View-Controller, Model-View-Presenter, Model-View-ViewModel и т. п.
См. также
Примечания
- ↑ Кравченко А. К., Афанасьева И. В. Влияние изменения зацепления и связности на сложность кода и его быстродействие в разработке программного обеспечения // Радиоэлектроника и информатика, 2016, № 3, с. 9—12.
- ↑ Макконнелл, 2010.
- ↑ 1 2 3 ISO/IEC/IEEE 24765-2017 Systems and software engineering — Vocabulary
- ↑ ISO/IEC TR 19759:2005, Software Engineering — Guide to the Software Engineering Body of Knowledge (SWEBOK)
- ↑ W. Stevens, G. Myers, L. Constantine, «Structured Design», IBM Systems Journal, 13 (2), 115—139, 1974.
- ↑ 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.