Сущность процедурного программирования
С увеличением объёма программ программисту невозможно удерживать в своей памяти все нюансы задачи, и он вынужден структурировать информацию, выделяя главное и отбрасывая несущественное. Этот процесс называется повышением степени абстракции программы.
Первым шагом на этом пути является процедурное программирование.
Процедурное программирование представляет собой метод, реализующий нисходящую технологию проектирования программ. Процедурное программирование предполагает разбиение задачи на более простые подзадачи, каждая из которых оформляется в виде подпрограммы.
Подпрограмма– это именованная последовательность описаний и операторов, выполняющая некоторое функционально законченное действие. Результирующая программа включает последовательность вызовов подпрограмм, при выполнении которых в свою очередь могут вызываться другие подпрограммы.
Любая подпрограмма должна быть объявлена и определена.
Объявление (опережающее описание, прототип, сигнатура) подпрограммы должно находиться в тексте раньше её вызова для того, чтобы компилятор мог выполнить проверку правильности вызова подпрограммы. Объявление задаёт имя подпрограммы и список передаваемых параметров.
Определение (описание) подпрограммы содержит кроме объявления тело подпрограммы, представляющее собой последовательность описаний и операторов.
Подпрограмма начинает выполняться в момент её вызова. Подпрограмма описывается один раз, а вызываться она может многократно из разных точек программы в соответствии со схемой алгоритма.
В определении, объявлении и при вызове подпрограммы типы, количество и порядок следования параметров в списке параметров подпрограммы должны совпадать. На их имена ограничений по соответствию не накладывается, поскольку подпрограмму можно вызывать с различными аргументами.
Описания, содержащиеся внутри подпрограммы, являются локальными по отношению к ней. Областью их действия является подпрограмма.
Описания, содержащиеся вне каких-либо подпрограмм, называются глобальными. Областью их действия является вся часть текста программы ниже этого описания.
Обмен данными между подпрограммой и внешней средой может осуществляться за счёт списка параметров подпрограммы и с использованием глобальных переменных.
Организация передачи данных за счёт глобальных переменных очень легка. Однако она не рекомендуется (а при выполнении лабораторных работ категорически запрещена), поскольку затрудняет отладку программы из-за возможности возникновение побочных эффектов и нарушает автономность подпрограмм. Любая подпрограмма должна быть максимально независима, а её интерфейс должен полностью определяться заголовком.
Список параметров подпрограммы является наиболее предпочтительным способом организации передачи данных между подпрограммой и внешней средой. В нём указываются имена входных и выходных данных подпрограммы. Использование списка параметров исключает возникновение побочных эффектов, то есть непредвиденных искажений данных при использовании подпрограмм.
Параметры, перечисленные в списке параметров подпрограммы, называются формальными. Соответствующие параметры, записанные в операторе вызова подпрограммы, называются фактическими.
Существует два способа передачи параметров в подпрограмму: по значению и по адресу.
При передаче по значению при вызове подпрограммы формальные параметры принимают значения копий значений фактических параметров. После этого связь между фактическими и формальными параметрами теряется, и операторы подпрограммы работают с этими копиями. Доступа к исходным значениям фактических параметров у подпрограммы нет, и, следовательно, нет возможности их изменить. В этом случае фактический параметр – это любое выражение того же типа, что и формальный параметр, или один из его частных случаев – переменная или константа.
При передаче по адресу формальные параметры подпрограммы принимают значения адресов фактических параметров. Операторы подпрограммы получают доступ к данным по этим адресам и могут менять исходные значения фактических параметров. В этом случае фактические параметры должны быть переменными того же типа, что и соответствующие формальные параметры.