Основные характеристики программного модуля.

Не всякий программный модуль способствует упрощения программы . Выделить хороший с этой точки зрения модуль является серьёзной творческой задачей. Для оценки приемлемости выделенного модуля используют обычно используются такие его характеристики:

· размер модуля;

· прочность модуля;

· сцепление с другими модулями;

· рутинность модуля (независимость от предыстории обращений к нему).

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

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

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

Высшими по прочности классами модулей являются следующие рекомендуемые классы.

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

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

В модульных языках программирования как минимум имеются средства для задания функционально-прочных модулей (например, модуль типа FUNCTION в языке ФОРТРАН). Средства же для задания информационно-прочных модулей в ранних языках программирования отсутствовали. Эти средства появились только в более поздних объектно-ориентированных языках.

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

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

Не рекомендуется также сцепление по общей области ( COMMON- области, реализованные в языках типа FORTRAN).

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

Рутинность модуля — это его независимость от предыстории обращений к нему. Модуль называется зависящим от предыстории обращений, если результат его работы зависит от его внутреннего состояния. Технология программирования не рекомендует использовать нерутинные (непредсказуемые) модули, однако эта рекомендация является неконструктивной, т.к. во многих случаях именно зависящий от предыстории модуль является лучшей реализацией информационно прочного модуля.