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

Материал из Википедии — свободной энциклопедии
Это старая версия этой страницы, сохранённая Loetthen (обсуждение | вклад) в 15:25, 19 апреля 2012. Она может серьёзно отличаться от текущей версии.
Перейти к навигации Перейти к поиску

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

Связанность обычно противопоставляется связности (англ. cohesion). Слабая связанность часто сочетается с сильной связностью и наоборот. Метрика качества ПО связанности и связности была придумана Larry Constantine, изначальным разработчиком Структурного Дизайна[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.