
- •Основы модульного программирования
- •Подпрограммы
- •Особенности написания и использования функций в языке с
- •Программирование рекурсивных алгоритмов
- •Функции стандартной библиотеки языка с для работы со строками (string.H) (см. Пособие)
- •. Функции стандартной библиотеки языка с для работы с файлами (stdio.H) (см. Пособие)
Автор – Шульга Т.Э.
Основы модульного программирования
Одной из распространенных методик создания программной продукции в настоящее время является структурное программирование. Одним из основных принципов структурного программирования является принцип модульности. В соответствии с этим принципом программа разделяется на отдельные законченные фрагменты - модули, блоки которые просты по управлению и допускают независимую отладку и тестирование. В результате отдельные ветви программы могут создаваться разными группами программистов. (Следует заметить, что понятие «модуль» не совпадает в данном случае с понятием «модуль» в смысле «библиотека» языка Паскаль).
Программа, разработанная в соответствии с принципами структурного программирования, должна удовлетворять следующим требованиям:
программа должна разделяться на независимые части, называемые модулями;
модуль - это независимый блок, код (текст) которого физически и логически отделен от кода других модулей;
модуль выполняет только одну логическую функцию, иначе говоря, должен решать самостоятельную задачу своего уровня по принципу: один программный модуль - одна логическая функция;
работа программного модуля не должна зависеть:
от входных данных;
от того, какому программному модулю предназначены его выходные данные;
от предыстории вызовов программного модуля;
размер программного модуля желательно ограничивать одной - двумя страницами исходного листинга (50-100 строк исходного кода);
модуль должен иметь только одну входную и одну выходную точку;
взаимосвязи между модулями устанавливаются по иерархической структуре;
каждый модуль должен начинаться с комментария, объясняющего его назначение, назначение переменных, передаваемых в модуль и из него, модулей, которые его вызывают, и модулей, которые вызываются из него;
оператор безусловного перехода или вообще не используется в модуле, или применяется в исключительных случаях только для перехода на выходную точку модуля;
в тексте модуля необходимо использовать комментарии, в особенности в сложных местах алгоритма;
идентификаторы переменных и модулей должны быть смысловыми, «говорящими»;
в одной строке стоит записывать не более одного оператора. Если для записи оператора требуется больше, чем одна строка, то все последующие операторы записываются с отступами;
желательно не допускать вложенности блоков операторов более трех уровней;
следует избегать использования языковых конструкций с неочевидной семантикой и программистских «трюков».
В заключение следует напомнить, что все эти вместе взятые меры направлены на повышение качества разрабатываемого программного обеспечения.
Подпрограммы
Простейшим видом модуля является подпрограмма.
Подпрограмма - это именованная логически законченная группа операторов языка, которую можно вызвать для выполнения по имени любое количество раз из различных мест программы.
Использование подпрограмм позволяет решить следующие задачи:
избавляет от необходимости многократно повторять в тексте программы аналогичные фрагменты;
улучшает читабельность текста программы, позволяя легче выявить ее логическую структуру и скрывая подробности вычислений (то есть повышается слепень абстрагирования);
повышают устойчивость к ошибкам программирования и непредвидимым последствиям при модификациях программы;
в общем случае уменьшает объем используемой памяти ЭВМ;
сокращает время отладки программы;
Существует два основных критерия создания подпрограммы.
Если некоторая последовательность действий встречается в программе более одного раза, следует выделить ее в подпрограмму.
Если последовательность действий встречается один раз, но может быть функционально объединена в единое целое, то следует выделять ее в подпрограмму. Этот критерий менее четкий чем предыдущий. Тем не менее, его полезно использовать в следующих случаях:
если программа длинная:очевидно, что объем незначительно увеличится, но сама программа станет более читабельной. (Это примерно похоже на программы дисциплины на темы).
если в программе используются сложные алгоритмы: модно отладить подпрограммы отдельно в небольших тестирующих программах.
реализация алгоритма решения задачи в виде подпрограммы позволит при необходимости легко перенести ее в другую программу или отдельный модуль, используемый другими программами.
Все подпрограммы имеют следующие свойства:
Обмен данными между подпрограммами осуществляется чаще всего через так называемый механизм передачи параметров (аргументов). (Аналог аргументов математической функции)
Операторы, находящиеся внутри подпрограммы выполняется (начиная с первого) только, если это подпрограмма вызванаиз другой программы.Подпрограммы вызываются обычно путем простой записи их имени с указанием значений параметров, хотя в некоторых языках программирования существуют специальные операторы для вызова подпрограмм. Подпрограмму, вызвавшую данную называют внешней по отношению к данной. Программа, выполняемая в данный момент, называется активной.
Главной называется программа (подпрограмма), которая вызывается операционной системой.
После выполнения операторов подпрограммы управление передается на оператор программы, вызвавшей данную подпрограмму, следующий за вызовом.
В общем случае подпрограммы могут быть вложенными, в том смысле, что допускается вызов подпрограммы не только из главной программы, но и из любых других подпрограмм.
Подпрограммы бывают двух видов – процедуры и функции. Процедура просто выполняет группу операторов (например, процедура вывода двухмерного массива), а функция, кроме того, вычисляет некоторое значение и передает его обратно в главную программу Говорят, что функция возвращает значение. Это значение имеет определенный тип (говорят, что функция имеет определенный тип).