Реализация программных модулей

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

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

– один вход и один выход. На входе модуль получает набор исходных данных, выполняет их обработку и возвращает один набор выходных данных;

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

– логическая независимость. Результат работы данного фрагмента программы не зависит от работы других модулей;

– слабые информационные связи с другими модулями. Обмен данными между отдельными модулями должен быть минимален;

– размер и сложность модуля должны быть в разумных пределах.

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

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

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

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

– функциональная прочность. Модуль реализует какую-либо определенную функцию. При этом он может использовать и другие модули. Данная степень прочности свойственна модульному и объектно-ориентированному программированию. Рекомендуется к использованию;

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

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

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

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

– всегда использовать рутинный модуль, если он имеет параметрическое сцепление;

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

В ВКР в целях презентации должны присутствовать листинги (списки операторов на языке программирования) программных модулей. Для ясности листинги рекомендуется сопровождать комментариями (рисунок 8.2).

 

//Обработчик события удаления записи

private void button2_Click(object sender, EventArgs e)

{

if (MessageBox.Show(

«Операция необратима! Вы подтверждаете удаление?»,

«Удаление записи», MessageBoxButtons.YesNo,

MessageBoxIcon.Question) == DialogResult.Yes)

{

/*объявление и иницивлизация ссылки на строку с

ключевым полем id_estim:

*/

DataRow r =

sesDataSet.ТаблицаОценки.Rows.Find(id_estim);

//удаление строки на которую указывает ссылка r:

r.Delete();

//внесение изменений в таблицу:

this.таблицаОценкиTableAdapter.Update

(sesDataSet.ТаблицаОценки);

}

}

}

Рисунок 8.2 – Пример листинга программы

Допускается размещение только модулей, созданных самим студентом. Те модули, которые сгенерированы средой программирования (Microsoft Visual Studio, Borland C++ Builder, Interface Builder и т. П.), размещать не рекомендуется, так как это не является признаком высокой квалификации студента в области программирования и создает обманчивое впечатление о размере ВКР. Листинги могут присутствовать как в тексте ВКР, так и в приложениях к нему. В любом случае они должны служить дополнением к излагаемому материалу и обязательно сопровождаться пояснениями и ссылками (если расположены в приложении).