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

редактировать
Степень взаимозависимости между программными модулями

В программная инженерия, сцепление - степень взаимозависимости между программными модулями; мера того, насколько тесно связаны две процедуры или модуля; сила взаимосвязей между модулями.

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

Содержание

  • 1 История
  • 2 типа связи
    • 2.1 Процедурное программирование
    • 2.2 Объектно-ориентированное программирование
    • 2.3 Динамическая связь
    • 2.4 Семантическая связь
    • 2.5 Логическая связь
  • 3 Недостатки сильной связи
  • 4 Проблемы с производительностью
  • 5 Решения
  • 6 Связь в сравнении с когезией
  • 7 Связь модулей
  • 8 См. Также
  • 9 Ссылки
  • 10 Дополнительная литература

История

38>показатели качества программного обеспечения связи и сплоченности были изобретены Ларри Константином в конце 1960-х годов как часть структурированного дизайна, основанного на характеристиках «хороших» практик программирования, которые снижение затрат на обслуживание и модификацию. Структурированный дизайн, включая когезию и сцепление, был опубликован в статье Stevens, Myers Constantine (1974) и книге Yourdon Constantine (1979), и последние впоследствии стали стандартными терминами.

Типы сцепления

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

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

Процедурное программирование

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

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

Объектно-ориентированное программирование

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

В недавней работе были исследованы различные другие концепции связи, которые использовались в качестве индикаторов для различных принципов модуляции, используемых на практике.

Динамическая связь

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

Семантическая связь

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

Логическая связь

Логическая связь (или эволюционная связь, или связь изменений) использует историю выпусков программной системы для поиска шаблонов изменений среди модулей или классов: например, сущностей, которые могут быть изменены вместе или последовательности изменений (за изменением в классе A всегда следует изменение в классе B).

Недостатки сильной связи

Плотно связанные системы, как правило, демонстрируют следующие характеристики развития, которые часто рассматриваются как недостатки:

  1. Изменение одного модуля обычно вызывает эффект пульсации изменений в других модулях.
  2. Сборка модулей может потребовать больше усилий и / или времени из-за повышенной межмодульной зависимости.
  3. Определенный модуль может быть сложнее повторно используйте и / или протестируйте, потому что должны быть включены зависимые модули.

Проблемы с производительностью

В зависимости от того, слабо или тесно связаны, производительность системы часто снижается из-за создания, передачи, преобразования сообщений и параметров (например, маршалинг) и интерпретация сообщения (которая может быть ссылкой на строку, массив или структуру данных), которые требуют меньше накладных расходов, чем создание сложного сообщения, такого как сообщение SOAP. Для создания более длинных сообщений требуется больше ЦП и памяти. Для оптимизации производительности во время выполнения длина сообщения должна быть минимизирована, а смысл сообщения - максимальным.

Накладные расходы и производительность передачи сообщений
Поскольку сообщение должно быть передано полностью, чтобы сохранить его полное значение, передача сообщения должна быть оптимизирована. Более длинные сообщения требуют больше ЦП и памяти для передачи и приема. Кроме того, при необходимости получатели должны повторно собрать сообщение в исходное состояние, чтобы полностью принять его. Следовательно, для оптимизации производительности во время выполнения длина сообщения должна быть минимизирована, а значение сообщения должно быть максимизировано.
Накладные расходы и производительность трансляции сообщений
Протоколы сообщений и сами сообщения часто содержат дополнительную информацию (например, пакет, структуру, определение и языковая информация). Следовательно, получателю часто требуется переводить сообщение в более точную форму, удаляя лишние символы и информацию о структуре и / или преобразовывая значения из одного типа в другой. Любой вид перевода увеличивает нагрузку на ЦП и / или память. Чтобы оптимизировать производительность во время выполнения, форма и содержимое сообщения должны быть уменьшены и уточнены, чтобы максимизировать его смысл и уменьшить перевод.
Затраты на интерпретацию сообщений и производительность
Все сообщения должны интерпретироваться получателем. Простые сообщения, такие как целые числа, могут не требовать дополнительной обработки для интерпретации. Однако для сложных сообщений, таких как сообщения SOAP, требуется синтаксический анализатор и преобразователь строк для отображения предполагаемого значения. Чтобы оптимизировать производительность во время выполнения, сообщения должны быть уточнены и сокращены, чтобы минимизировать накладные расходы на интерпретацию.

Решения

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

  • Aимеет атрибут, который ссылается на (имеет тип) B.
  • Aвызовы служб объекта B.
  • Aимеет атрибут метод, который ссылается на B (через тип возвращаемого значения или параметр).
  • Aявляется подклассом (или реализует) класса B.

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

Такие системы, как CORBA или COM позволяют объектам взаимодействовать друг с другом, не имея необходимости знать что-либо о реализации другого объекта. Обе эти системы даже позволяют объектам общаться с объектами, написанными на других языках.

Связь против сплоченности

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

Связь модулей

Связь в программной инженерии описывает версию показателей, связанных с этой концепцией.

Для связи потока данных и управления:

  • di: количество параметров входных данных
  • ci: количество параметров входного управления
  • do: количество параметров выходных данных
  • co: количество параметров управления выходом

Для глобального связывания:

  • gd: количество глобальных переменных, используемых в качестве данных
  • gc: количество глобальных переменных, используемых в качестве управления

Для связывания с окружающей средой:

  • w: количество вызываемых модулей (разветвление)
  • r: количество модулей, вызывающих рассматриваемый модуль (fan-in)

C oupling (C) = 1 - 1 di + 2 × ci + do + 2 × co + gd + 2 × gc + w + r {\ displaystyle \ mathrm {Coupling} (C) = 1 - {\ frac {1} {d_ {i} +2 \ times c_ {i} + d_ {o} +2 \ times c_ {o} + g_ {d} + 2 \ times g_ {c} + w + r}}}\ mathrm {Coupling} (C) = 1 - \ frac {1} {d_ {i} + 2 \ times c_ {i} + d_ {o} + 2 \ times c_ {o} + g_ {d} + 2 \ times g_ {c} + w + r}

Соединение (C)увеличивает значение, чем больше связан модуль. Это число колеблется от приблизительно 0,67 (низкая связь) до 1,0 (высокая степень связи)

Например, если модуль имеет только один параметр входных и выходных данных

C = 1 - 1 1 + 0 + 1 + 0 + 0 + 0 + 1 + 0 = 1–1 3 = 0,67 {\ displaystyle C = 1 - {\ frac {1} {1 + 0 + 1 + 0 + 0 + 0 + 1 + 0}} = 1 - {\ frac {1} {3}} = 0,67}C = 1 - \ frac {1} {1 + 0 + 1 + 0 + 0 + 0 + 1 + 0} = 1 - \ frac {1} {3} = 0,67

Если модуль имеет 5 параметров входных и выходных данных, равное количество параметров управления и имеет доступ к 10 элементам глобальных данных с разветвлением 3 и разветвление из 4,

C = 1–1 5 + 2 × 5 + 5 + 2 × 5 + 10 + 0 + 3 + 4 = 0,98 {\ displaystyle C = 1 - {\ frac {1} {5 + 2 \ times 5 + 5 + 2 \ times 5 + 10 + 0 + 3 + 4}} = 0,98}C = 1 - \ frac {1} {5 + 2 \ times 5 + 5 + 2 \ times 5 + 10 + 0 + 3 + 4} = 0,98

См. Также

Ссылки

Дополнительная литература

Последняя правка сделана 2021-05-16 06:52:47
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте