Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сокращено.docx
Скачиваний:
8
Добавлен:
16.08.2019
Размер:
766.9 Кб
Скачать
  1. Сцепление модулей.

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

пять типов сцепления модулей: 1по данным; 2по образцу; 3по управлению;

4по общей области данных; 5по содержимому.

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

Например, функция Мах предполагает сцепление по данным через параметры скалярного типа:

Function Max(a, b: integer):integer;

Begin

if a>b then Max:=a else Max: =b;

end;

Сцепление по образцу - модули обмениваются данными, объединенными в структуры. обеспечивает неплохие хар-ки, но они хуже, чем у предыдущего типа, тк конкретные передаваемые данные «спрятаны» в структуры, и потому уменьшается «прозрачность» связи м/у модулями. Кроме того, при изменении структуры передаваемых данных необходимо модифицировать все использующие ее модули.

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

Function МахEl(а:array of integer):integer;

Var i:word;

Begin MaxEl: =a[0]; for i:=l to High(a) do if a[i]>MaxEl

then MaxEl: =a[i]; end;

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

Например, функция MinMax предполагает сцепление по управлению, тк значение параметра flag влияет на логику программы: if функция 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;

Сцепление по общей области данных - модули работают с общей областью данных. Этот тип считается недопустимым, тк:

-программы, использующие данный тип сцепления, очень сложны для понимания при сопровождении программного обеспечения;

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

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

Например, функция МахА, использующая глобальный массив А, сцеплена с основной программой по общей области:

Function MaxA:integer;

Var i:word;

Begin МахА: =a[Low(a)];

for i:= Low(a)+1 to High(a) do

if a[i]>MaxA then MaxA:=a[i]; end;

«подпрограммы с памятью», действия которых зависят от истории вызовов, используют сцепление по общей области, что делает их работу в общем случае непредсказуемой. Именно этот вар-т исп-т стат-ие переменные С и C++.

В случае сцепления по содержимому один модуль содержит обращения к внутренним компонентам другого (передает управление внутрь, читает и/или изменяет внутренние данные или сами коды), что полностью противоречит блочно-иерархическому подходу. Отдельный модуль в этом случае уже не является блоком («черным ящиком»): его содержимое должно учитываться в процессе разработки другого модуля. Современные универсальные языки (Pascal), данного типа сцепления в явном виде не поддерживают, но для языков низкого уровня, (Ассемблер), такой вид сцепления остается возможным.

модули сцепляются м/у собой нес-ми способами. => кач-во ПО принято определять по типу сцепления с худшими характеристиками.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]