Jump to content

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

В разработке программного обеспечения связь это степень взаимозависимости между программными модулями ; мера того, насколько тесно связаны две процедуры или модули; [1] прочность связей между модулями. [2] Связь не бинарна, а многомерна. [3]

Связь и когезия

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

Метрики качества программного обеспечения , связанные с связностью и связностью, были изобретены Ларри Константином в конце 1960-х годов как часть структурированного проектирования , основанного на характеристиках «хороших» практик программирования, которые снижали затраты на обслуживание и модификацию. Структурированный дизайн, включая сплоченность и связь, были опубликованы в статье Стивенса, Майерса и Константина (1974). [4] и книга Юрдон и Константин (1979), [5] и последние впоследствии стали стандартными терминами.

Типы муфт

[ редактировать ]

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

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

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

[ редактировать ]

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

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

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

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

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

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

[ редактировать ]

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

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

[ редактировать ]

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

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

[ редактировать ]

Анализ логической связи (или эволюционной связи, или связи изменений) использует историю выпусков программной системы для обнаружения закономерностей изменений среди модулей или классов: например, объектов, которые могут быть изменены вместе, или последовательности изменений (изменение в классе А всегда сопровождается изменением класса Б).

Размеры муфты

[ редактировать ]

По мнению Грегора Хопе, связь многомерна: [3]

  • Технологическая зависимость
  • Зависимость от местоположения
  • Топологическая зависимость
  • Формат данных и зависимость типа
  • Семантическая зависимость
  • Зависимость от разговора
  • Зависимость заказа
  • Временная зависимость

Недостатки жесткой связи

[ редактировать ]

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

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

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

[ редактировать ]

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

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

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

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

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

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

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

[ редактировать ]

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

Соединение модулей

[ редактировать ]

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

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

  • d i : количество параметров входных данных
  • c i : количество входных параметров управления
  • d o : количество параметров выходных данных
  • c o : количество выходных параметров управления

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

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

Для экологической связи:

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

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

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

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

См. также

[ редактировать ]
  1. ^ ISO/IEC/IEEE 24765:2010 Системная и программная инженерия. Словарь.
  2. ^ ISO/IEC TR 19759:2005, Программная инженерия. Руководство по своду знаний по программной инженерии (SWEBOK).
  3. ^ Jump up to: а б Хохпе, Грегор. Шаблоны корпоративной интеграции: проектирование, создание и развертывание решений для обмена сообщениями . Аддисон-Уэсли Профессионал. ISBN  978-0321200686 .
  4. ^ Стивенс, Уэйн П .; Майерс, Гленфорд Дж .; Константин, Ларри Лерой (июнь 1974 г.). «Структурированный дизайн». IBM Systems Journal . 13 (2): 115–139. дои : 10.1147/sj.132.0115 .
  5. ^ Юрдон, Эдвард ; Константин, Ларри Лерой (1979) [1975]. Структурное проектирование: основы дисциплины проектирования компьютерных программ и систем . Юрдон Пресс. Бибкод : 1979sdfd.book.....Y . ISBN  978-0-13-854471-3 .
  6. ^ Бек, Фабиан; Диль, Стефан (сентябрь 2011 г.). «О соответствии модульности и связи кодов». В материалах 19-го симпозиума ACM SIGSOFT и 13-й Европейской конференции по основам программной инженерии (SIGSOFT/FSE '11) . Сегед, Венгрия. п. 354. дои : 10.1145/2025113.2025162 . ISBN  9781450304436 . S2CID   2413103 . {{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  7. ^ Арисхольм, Эрик; Бриан, Лайонел К .; Фойен, Аудун (август 2004 г.). «Измерение динамической связи для объектно-ориентированного программного обеспечения». Транзакции IEEE по разработке программного обеспечения . 30 (8). IEEE : 491–506. дои : 10.1109/TSE.2004.41 . HDL : 10852/9090 . S2CID   3074827 .
  8. ^ Прессман, Роджер С. (1982). Программная инженерия - подход практикующего специалиста (4-е изд.). МакГроу-Хилл. ISBN  0-07-052182-4 .

Дальнейшее чтение

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 92145d10dffb1ba448db8929c7e8dc54__1721360460
URL1:https://arc.ask3.ru/arc/aa/92/54/92145d10dffb1ba448db8929c7e8dc54.html
Заголовок, (Title) документа по адресу, URL1:
Coupling (computer programming) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)