Чем отличается программа от подпрограммы

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

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

Основы программирования на Python. Часть 8. Подпрограммы: процедуры и функции

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

Данные передаются в виде параметров или аргументов в виде списка, метод доступа к которому стандартизован и имеет аппаратную поддержку. В микропроцессорах INTEL такой поддержкой является аппаратный стек и команды работы с ним. Подпрограмма может иметь свои собственные локальные переменные, существующие только в интервале времени от входа в подпрограмму до выхода из нее, а также разделять с другими подпрограммами и главной программой доступ к глобальным переменным.

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

Читайте также:
Виды программ на компьютере

Вызывающая программа:

  • Подготовить список параметров согласно соглашениям о связях;
  • Подготовить для подпрограммы адрес возврата;
  • Передать управление в подпрограмму.

Вызываемая подпрограмма:

  • Сохранить состояние среды (контекст) вызывающей программы (в некоторых реализациях это действие выполняет операционная система);
  • Выделить память для локальных переменных;
  • Получить доступ к параметрам;
  • Выполнить алгоритм, заложенный в подпрограмму; при необходимости воспользоваться списком параметров, правильно извлекая и изменяя из значения в соответствии с соглашениями о связях;
  • Освободить память локальных переменных и восстановить контекст вызывавшей программы;
  • Возвратить управление в вызывавшую программу;

Вызывающая программа:

  • Воспользоваться результатами работы подпрограммы.

Параметры, передаваемые в подпрограмму в момент её вызова, называются фактическими. Они замещают формальные параметры, указываемые в заголовке подпрограммы. Параметры могут передаваться по адресу (по имени) или по значению. Последние не могут изменить свои значения в вызывающей программе. По адресу передаются изменяемые параметры, а также массивы и структуры. Подпрограммы бывают реентерабельные (или повторновходовые) – это те, которые допускают вызов какой-либо собственной функции изнутри себя самой. Для их написания необходимо соблюдать некоторые правила, например, не использовать локальные переменные. Рекурсивные подпрограммы позволяют делать вызов себя из себя самой (классический пример ­– рекурсивное определение факториала). Реализация описанных понятий происходит по-разному в зависимости от архитектуры аппаратных средств и операционной системы. Для микропроцессоров INTEL традиционным является использование аппаратного стека. Структура информации, соответствующая описанному выше протоколу, дана на следующем рисунке. Она образует «фрейм», или «кадр» стека. Следует помнить, что логический рост стека на данных микропроцессорах происходит «сверху вниз», от больших адресов к меньшим. Рис. V.4.1. Структура фрейма вызова подпрограммы

Подпрограммы, процедуры и функции

Источник: studfile.net

Программы и подпрограммы

Любую задачу, будь то, написание текстового редактора или покупка автомобиля, можно разделить на подзадачи.

Читайте также:
Технология проведения анимационной программы

Теоретически разделение служит целям упрощения и может продолжаться до бесконечности.

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

К «Принципу решения сложных задач» есть комментарии, один из которых гласит: «Если задача простая, то разбивать на подзадачи ее не надо».

А началось все с подпрограмм.

Часто в программе какую-то последовательность команд надо повторять много раз. На ум приходит слово «цикл». Но если эту последовательность нам надо повторять в разных местах программы, циклы нам ничем не помогут.

Простой пример. Надо напечатать «++++++++++» (десять плюсиков). Это делается с помощью цикла:

for i:=1 to 10 do write (‘+’);

Но если в программе нужно печатать эти плюсики двадцать раз в разном месте? Можно написать этот цикл 20 раз.

Но есть другой вариант — написать цикл один раз и потом этот код 20 раз вызывать.

Программы и подпрограммы

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

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

Читайте также:
Какая программа лучше для елм 327 на Андроид для приоры

В оперативной памяти компьютера одновременно размещается большое количество программ и подпрограмм. Поскольку процессор один, только одна программа является активной и непосредственно выполняется процессором, остальные ждут своей очереди. Как процессор узнает, какую программу выполнять? Это определяется адресным регистром: адрес, содержащийся в нем, является адресом в активной программе.

Однако не все так просто. Для конкретной работы программы требуется дополнительная информация об адресе программы в ОЗУ, об адресе в ОЗУ входных и выходных параметров, о размещении рабочих данных, о состоянии программы. Блок этой дополнительной информации, который называется окружением программы, хранится в ОЗУ.

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

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

Все эти действия являются частью подсистемы управления выполнением программ.

Источник: studopedia.org

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru