Читайте также: |
|
Сцепление является мерой взаимозависимости модулей, которая определяет, насколько хорошо модули отделены друг от друга. Модули независимы, если каждый из них не содержит о другом никакой информации. Чем больше информации о других модулях хранит модуль, тем больше они с ним сцеплены.
Различают пять типов сцепления модулей:
r по данным;
r по образцу;
r по управлению;
r по общей области данных;
r по содержимому.
Сцепление по данным предполагает, что модули обмениваются данными, представленными скалярными значениями. Например, функция Max предполагает сцепление по данным через параметры скалярного типа:
Function Max(a, b: integer): integer;
begin
if a > b then Max:= a
else Max:= b;
end;
Сцепление по образцу предполагает, что модули обмениваются данными, объединенными в структуры. Так функция MaxEl, описанная ниже, предполагает сцепление по образцу (параметр a – открытый массив).
Function MaxEl(a: array of integer): integer;
var i: word;
begin
MaxEl:= a[0];
for i:= 1 to High(a) do
if a[i] > MaxEl then MaxEl:= a[i];
end;
При сцеплении по управлению один модуль посылает другому некоторый информационный объект (флаг), предназначенный для управления внутренней логикой модуля. Таким способом часто выполняют настройку режимов работы программного обеспечения. Например, функция MinMax предполагает сцепление по управлению, так как значение параметра flag влияет на логику программы: если функция MinMax получает значение параметра flag, равное true, то возвращает максимальное значение из двух, а если false, то минимальное:
Function MinMax(a, b: integer; flag: boolean): integer;
begin
if (a > b) and (flag) then MinMax:= a
else MinMax:= b;
end;
Сцепление по общей области данных предполагает, что модули работают с общей областью данных. Этот тип сцепления считается недопустимым, поскольку:
r программы, использующие данный тип сцепления, очень сложны для понимания при сопровождении программного обеспечения;
r ошибка одного модуля, приводящая к изменению общих данных, может проявиться при выполнении другого модуля, что существенно усложняет локализацию ошибок;
r при ссылке к данным в общей области модули используют конкретные имена, что уменьшает гибкость разрабатываемого программного обеспечения.
Например, функция MaxA, использующая глобальный массив A, сцеплена с основной программой по общей области:
Следует иметь в виду, что «подпрограммы с памятью», действия которых зависят от истории вызовов, используют сцепление по общей памяти, что делает их работу в общем случае непредсказуемой. Именно этот вариант используют статические переменные C и C++.
В случае сцепления по содержимому один модуль содержит обращения к внутренним компонентам другого (передает управление внутрь, читает и/или изменяет внутренние данные, или сами коды), что полностью противоречит блочно-иерархическому подходу. Отдельный модуль в этом случае уже не является блоком («черным ящиком»): его содержимое должно учитываться в процессе разработки другого модуля. Современные универсальные языки процедурного программирования, например Pascal, данного типа сцепления в явном виде не поддерживают, но для языков низкого уровня, например Ассемблера, такой вид сцепления остается возможным.
В табл. 1 приведены характеристики различных типов сцепления по экспертным оценкам. Допустимыми считаются первые три типа сцепления, так как использование остальных приводит к резкому ухудшению качества программ.
Как правило, модули сцепляются между собой несколькими способами. Учитывая это, качество программного обеспечения принято определять по типу сцепления с худшим характеристиками. Так, если использовано сцепление по данным и сцепление по управлению, то определяющим считается сцепление по управлению.
В некоторых случаях сцепление модулей можно уменьшить, удалив необязательные связи и структурировав необходимые связи. Примером может служить объектно-ориентированное программирование, в котором вместо большого количества параметров метод неявно получает адрес области (структуры), в которой расположены поля объекта, и явно – дополнительные параметры. В результате модули оказываются сцепленными по образцу.
Табл. 1
Тип сцепления | Сцепление, балл | Устойчивость к ошибкам других модулей | Наглядность (понятность) | Возможность изменения | Вероятность повторного использования |
По данным | Хорошая | Хорошая | Хорошая | Большая | |
По образцу | Средняя | Хорошая | Средняя | Средняя | |
По управлению | Средняя | Плохая | Плохая | Малая | |
По общей области | Плохая | Плохая | Средняя | Малая | |
По содержимому | Плохая | Плохая | Плохая | Малая |
Дата добавления: 2015-08-09; просмотров: 159 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Понятие модуля. | | | Связность модулей. |