Связанность (программирование)

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Свя́занность (англ. coupling) или зави́симость (англ. dependency) — характеристика взаимосвязи модуля с другими модулями. Это степень, в которой каждый программный модуль полагается на другие модули.

Связанность обычно противопоставляется связности (англ. cohesion). Слабая связанность часто сочетается с сильной связностью и наоборот. Метрика качества ПО связанности и связности была придумана Ларри Константином, изначальным разработчиком Структурного Дизайна[1], который был также ранним сторонником таких концепций (см. также SSADM). Слабая связанность часто является признаком хорошо структурированной компьютерной системы и признаком хорошего дизайна, и, когда она комбинируется с сильной связностью, соответствует общим показателям хорошей читаемости и поддерживаемости.

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

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

Связанность может быть «низкой» (также «свободной» и «слабой») или «высокой» (также «несвободной» или «сильной»). Некоторые типы связанности по направлению от наивысшей к наинизшей связанности, следующие:

Связанность содержимого (высокая)
Связанность содержимого это когда один модуль изменяет или полагается на внутреннюю кухню другого модуля (например, доступ к локальным данным другого модуля).
Следовательно, изменение способа, которым второй модуль производит данные (расположение, тип, время) приведёт к необходимости изменять зависимый модуль.
Общая связанность
Общая связанность это когда два модуля делят между собой один и тот же глобальный набор данных (например, глобальную переменную).
Изменение общего ресурса подразумевает изменение всех модулей, использующих его.
Внешняя связанность
Внешняя связанность возникает когда два модуля делят между собой определённый извне формат данных, протокол связи, или интерфейс устройства. Это обычно основано на коммуникации со внешними средствами и устройствами.
Связанность управления
Связанность управления это когда один модуль управляет исполнением другого путём передачи ему информации по поводу того, что делать (например, передачей флага «что-нужно-сделать»).
Связанность по отпечатку в структуре данных (stamp coupling)
Это когда модули делят между собой составную структуру данных, и каждый используют только её часть, по возможности даже не ту же самую часть (например, передача полной структуры в функцию, которой нужно только одно поле этой структуры).
Это может привести к изменению способа чтения модулем этой структуры, когда изменится поле, которое модуль не использует.
Связанность данных
Связанность данных это когда модули делят общие данные через, скажем, параметры. Каждая порция данных это элементарный фрагмент, и это только те данные, которые используются совместно (например, передача целого числа функции, вычисляющей квадратный корень).
Связанность сообщений (низкая)
Это наислабейший тип связанности. Он может быть достигнут децентрализацией состояний (как в объектах) и коммуникацией компонентов через параметры или передачу сообщений (см. Обмен сообщениями).
Нет связанности
Модули не общаются между собой вовсе.

Объектно-ориентированное программирование[править | править вики-текст]

Связанность подклассов
Описывает взаимоотношения между дочерним и родительским элементами. Дочерний элемент связан с родительским, но родительский не связан с дочерним.
Временнáя связанность
Когда два действия связаны вместе в один модуль только потому, что они происходят в одно и то же время.

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

Ссылки[править | править вики-текст]

IEEE Std 610.12-1990

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

  1. W. Stevens, G. Myers, L. Constantine, «Structured Design», IBM Systems Journal, 13 (2), 115—139, 1974.