Что такое связность модуля

Связность модуля (cohesion)

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

Существует 7 типов связности:

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

В последовательно связном модуле его объекты охватывают подзадачи, для которых выходные данные одной из подзадач являются входными для другой (открыть файл – прочитать запись – закрыть файл).

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

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

Модуль с временной связностью – это такой модуль, в котором объекты модуля привязаны к конкретному промежутку времени. Примером может являться модуль, осуществляющий инициализацию системы. Элементы данного модуля почти не связаны друг с другом за исключением того, что должны выполняться в определенное время.

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

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

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

Мера связностиСцеплениеМодифицируемостьПонятностьСопровождаемость
Функциональнаяхорошеехорошаяхорошаяхорошая
Последовательнаяхорошеехорошаяблизкая к хорошейхорошая
Информационнаясреднеесредняясредняясредняя
Процедурнаяприемлемоеприемлемаяприемлемаяплохая
Временнаяплохоеплохаясредняяплохая
Логическаяплохоеплохаяплохаяплохая
Случайнаяплохоеплохаяплохаяплохая

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

Источник

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

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

Существует 7 типов связности:

Связность по совпадению

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

В последовательно связном модуле его объекты охватывают подзадачи, для которых выходные данные одной из подзадач являются входными для другой (открыть файл – прочитать запись – закрыть файл).

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

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

Модуль с временной связностью – это такой модуль, в котором объекты модуля привязаны к конкретному промежутку времени. Примером может являться модуль, осуществляющий инициализацию системы. Элементы данного модуля почти не связаны друг с другом за исключением того, что должны выполняться в определенное время.

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

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

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

Мера связностиСцеплениеМодифицируемостьПонятностьСопровождаемость
Функциональнаяхорошеехорошаяхорошаяхорошая
Последовательнаяхорошеехорошаяблизкая к хорошейхорошая
Информационнаясреднеесредняясредняясредняя
Процедурнаяприемлемоеприемлемаяприемлемаяплохая
Временнаяплохоеплохаясредняяплохая
Логическаяплохоеплохаяплохаяплохая
Случайнаяплохоеплохаяплохаяплохая

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

Связанность (coupling) модуля является мерой взаимозависимости модулей. При создании систем необходимо стремиться к максимальной независимости модулей, т.е. связанность модулей должна быть минимальной.

При проектировании систем допустимыми являются: связанность (сцепление) по данным, связанность по образцу и связанность по управлению.

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

Модули связаны по образцу если один модуль посылает другому составной информационный объект (например, объект – библиографическая запись, которая содержит имя автора, название книги и т.д.).

Модули связаны по управлению, если один посылает другому информационный объект – флаг, предназначенный для управления его внутренней логикой.

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

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

С понятием связанность тесно связано понятие связность.

Что такое связность модуля. Смотреть фото Что такое связность модуля. Смотреть картинку Что такое связность модуля. Картинка про Что такое связность модуля. Фото Что такое связность модуля

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

Что такое связность модуля. Смотреть фото Что такое связность модуля. Смотреть картинку Что такое связность модуля. Картинка про Что такое связность модуля. Фото Что такое связность модуля

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций.

Что такое связность модуля. Смотреть фото Что такое связность модуля. Смотреть картинку Что такое связность модуля. Картинка про Что такое связность модуля. Фото Что такое связность модуля

Что такое связность модуля. Смотреть фото Что такое связность модуля. Смотреть картинку Что такое связность модуля. Картинка про Что такое связность модуля. Фото Что такое связность модуля

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого.

Источник

Low Coupling и High Cohesion

Что такое связность модуля. Смотреть фото Что такое связность модуля. Смотреть картинку Что такое связность модуля. Картинка про Что такое связность модуля. Фото Что такое связность модуля

Качественный дизайн обладает слабой связанностью (low coupling) и сильной связностью (high cohesion). Это значит, что программный компонент имеет небольшое число внешних связей и отвечает за решение близких по смыслу задач.

Что такое связность модуля. Смотреть фото Что такое связность модуля. Смотреть картинку Что такое связность модуля. Картинка про Что такое связность модуля. Фото Что такое связность модуля

Связанность (Coupling)

Что такое связность модуля. Смотреть фото Что такое связность модуля. Смотреть картинку Что такое связность модуля. Картинка про Что такое связность модуля. Фото Что такое связность модуля

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

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

Слабая связанность (Low coupling), напротив, является признаком хорошо структурированной и хорошо спроектированной системы, и, когда она комбинируется с сильной связностью(high cohesion), соответствует общим показателям хорошей читаемости и сопровождаемости.

Low Coupling — это принцип, который позволяет распределить обязанности между объектами таким образом, чтобы степень связанности между системами оставалась низкой.

Степень связанности (coupling) — это мера, определяющая, насколько жестко один элемент связан с другими элементами, либо каким количеством данных о других элементах он обладает.

Элемент с низкой степенью связанности (или слабым связыванием) зависит от не очень большого числа других элементов и имеет следующие свойства:

Виды связанности

Что такое связность модуля. Смотреть фото Что такое связность модуля. Смотреть картинку Что такое связность модуля. Картинка про Что такое связность модуля. Фото Что такое связность модуля

Связанность содержимого (content coupling)

Связанность через общее (common coupling)

Связанность через внешнее (external coupling)

Связанность по управлению (control coupling)

Связанность по структурированным данным (data-structured coupling, stamp couplig)

Связанность через данных (data coupling)

Связанность по сообщениям (message coupling)

Отсутствие связанности (no coupling)

Закон Деметры

Принцип наименьшего знания

Что такое связность модуля. Смотреть фото Что такое связность модуля. Смотреть картинку Что такое связность модуля. Картинка про Что такое связность модуля. Фото Что такое связность модуля

Закон Деметры (Law of Demeter, LoD) — набор правил проектирования при разработке программного обеспечения, в частности объектно-ориентированных программ, накладывающий ограничения на взаимодействия объектов (модулей).

Обобщенно, закон Деметры является специальным случаем слабой связанности (loose coupling). Правила были предложены в конце 1987 в северо-восточном Университете (Бостон, Массачусетс, США).

Говоря упрощённо, каждый программный модуль:

Общее описание правила: Объект A не должен иметь возможность получить непосредственный доступ к объекту C, если у объекта A есть доступ к объекту B и у объекта B есть доступ к объекту C.

Что такое связность модуля. Смотреть фото Что такое связность модуля. Смотреть картинку Что такое связность модуля. Картинка про Что такое связность модуля. Фото Что такое связность модуля

Таким образом, код a.b.Method() нарушает Закон Деметры, а код a.Method() является корректным.

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

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

Связность (Cohesion)

Что такое связность модуля. Смотреть фото Что такое связность модуля. Смотреть картинку Что такое связность модуля. Картинка про Что такое связность модуля. Фото Что такое связность модуля

Связность, или прочность ( cohesion) — мера силы взаимосвязанности элементов внутри модуля; способ и степень, в которой задачи, выполняемые некоторым программным модулем, связаны друг с другом.

Cвязность характеризует то, насколько хорошо все методы класса или все фрагменты метода соответствуют главной цели, — иначе говоря, насколько сфокусирован класс. Стив Макконнелл

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

Класс с низкой связностью(low cohesion) выполняет много разнородных функций или несвязанных между собой обязанностей. Такие классы создавать нежелательно, поскольку они приводят к возникновению следующих проблем:

Классы с низкой степенью связности, как правило, являются слишком « абстрактными» или выполняют обязанности, которые можно легко распределить между другими объектами.

Виды связности

Что такое связность модуля. Смотреть фото Что такое связность модуля. Смотреть картинку Что такое связность модуля. Картинка про Что такое связность модуля. Фото Что такое связность модуля

Случайная (coincidental cohesion)

Логическая (logical cohesion)

Временная (temporal cohesion)

Процедурная (procedural cohesion)

По взаимодействию (communication cohesion)

По последовательности действий (sequential cohesion)

Функциональная (functional cohesion)

Источник

Связность модулей.

Что такое связность модуля. Смотреть фото Что такое связность модуля. Смотреть картинку Что такое связность модуля. Картинка про Что такое связность модуля. Фото Что такое связность модуля

а- функциональная; б- последовательная; в- информационная; г- процедурная; д-временная; е- логическая

При функциональной связности все объекты модуля предназначены для выполнения одной функции (рисунок 6.1, а): операции, объединяемые для выполнения одной функции, или данные, связанные с одной функцией. Модуль, элементы которого связаны функционально, имеет четко определенную цель, при его вызове выполняется одна задача. Такой модуль имеет максимальную связность, следствием которой являются его хорошие технологические качества: простота тестирования, модификации и сопровождения.

При последовательной связности функций выход одной функции служит исходными данными для другой функции (рисунок 6.1, б). Как правило, такой модуль имеет одну точку входа, т. е. реализует одну подпрограмму, выполняющую две функции. Считают, что данные, используемые последовательными функциями, также связаны последовательно. Модуль с последовательной связностью функций можно разбить на два или более модулей, как с последовательной, так и с функциональной связностью. Такой модуль выполняет несколько функций, и, следовательно, его технологичность хуже: сложнее организовать тестирование, а при выполнении модификации мысленно приходится разделять функции модуля.

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

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

Временная связность функций подразумевает, что эти функции выполняются параллельно или в течение некоторого периода времени (рисунок 6.1, д). Временная связность данных означает, что они используются в некотором временном интервале. Например, временную связность имеют функции, выполняемые при инициализации некоторого процесса. Отличительной особенностью временной связности является то, что действия, реализуемые такими функциями, обычно могут выполняться в любом порядке.

Логическая связь базируется на объединении данных или функций в одну логическую группу (рисунок 6.1, е). В качестве примера можно привести функции обработки текстовой информации или данные одного и того же типа. Модуль с логической связностью функций часто реализует альтернативные варианты одной операции, например, сложение целых чисел и сложение вещественных чисел. Из такого модуля всегда будет вызываться одна какая-либо его часть, при этом вызывающий и вызываемый модули будут связаны по управлению. Понять логику работы модулей, содержащих логически связанные компоненты, как правило, сложнее, чем модулей, использующих временную связность, следовательно, их показатели технологичности еще ниже.

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

Интерфейсная часть в данном случае содержит совокупность объявлений ресурсов (заголовков подпрограмм, имен переменных, типов, классов и т. п.), которые данная библиотека предоставляет другим модулям. Ресурсы, объявление которых в интерфейсной части отсутствует, извне не доступны.

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

Источник

Связность модуля

Что такое связность модуля. Смотреть фото Что такое связность модуля. Смотреть картинку Что такое связность модуля. Картинка про Что такое связность модуля. Фото Что такое связность модуля Что такое связность модуля. Смотреть фото Что такое связность модуля. Смотреть картинку Что такое связность модуля. Картинка про Что такое связность модуля. Фото Что такое связность модуля Что такое связность модуля. Смотреть фото Что такое связность модуля. Смотреть картинку Что такое связность модуля. Картинка про Что такое связность модуля. Фото Что такое связность модуля Что такое связность модуля. Смотреть фото Что такое связность модуля. Смотреть картинку Что такое связность модуля. Картинка про Что такое связность модуля. Фото Что такое связность модуля

Что такое связность модуля. Смотреть фото Что такое связность модуля. Смотреть картинку Что такое связность модуля. Картинка про Что такое связность модуля. Фото Что такое связность модуля

Что такое связность модуля. Смотреть фото Что такое связность модуля. Смотреть картинку Что такое связность модуля. Картинка про Что такое связность модуля. Фото Что такое связность модуля

Связность модуля (Cohesion) — это мера зависимости его частей [58], [70], [77]. Связность — внутренняя характеристика модуля. Чем выше связность модуля, тем лучше результат проектирования, то есть тем «черней» его ящик (капсула, защитная оболочка модуля), тем меньше «ручек управления» на нем находится и тем проще эти «ручки».

Для измерения связности используют понятие силы связности (СС). Существует 7 типов связности:

1. Связность по совпадению(СС=0). В модуле отсутствуют явно выраженные внутренние связи.

2. Логическая связность(СС=1). Части модуля объединены по принципу функционального подобия. Например, модуль состоит из разных подпрограмм обработки ошибок. При использовании такого модуля клиент выбирает только одну из подпрограмм.

q сложное сопряжение;

q большая вероятность внесения ошибок при изменении сопряжения ради одной из функций.

3. Временная связность(СС=3). Части модуля не связаны, но необходимы в один и тот же период работы системы.

Недостаток: сильная взаимная связь с другими модулями, отсюда — сильная чувствительность внесению изменений.

4.Процедурная связность (СС=5). Части модуля связаны порядком выполняемых ими действий, реализующих некоторый сценарий поведения.

5.Коммуникативная связность (СС=7). Части модуля связаны по данным (работают с одной и той же структурой данных).

6.Информационная (последовательная) связность (СС=9). Выходные данные одной части используются как входные данные в другой части модуля.

7.Функциональная связность (СС=10). Части модуля вместе реализуют одну функцию.

Отметим, что типы связности 1,2,3 — результат неправильного планирования архитектуры, а тип связности 4 — результат небрежного планирования архитектуры приложения.

Общая характеристика типов связности представлена в табл. 4.1.

Таблица 4.1. Характеристика связности модуля

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *