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

From Wiki Abbreviations
Jump to: navigation, search

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


Вызов подпрограммы

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

В языках высокого уровня описание подпрограммы состоит, как правило, из двух частей:

- заголовок подпрограммы;

-тело подпрограммы.

Заголовок подпрограммы содержит информацию, необходимую для вызова подпрограммы: имя подпрограммы и, если необходимо, параметры для работы подпрограммы.

Тело подпрограммы — это набор операторов, который будет выполняться всякий раз, когда вызывается подпрограмма.

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

Некоторые языки программирования (например, Паскаль, Ада, Модула-2) допускают описание вложенных подпрограмм, то есть помещение подпрограмм внутрь других подпрограмм. Такие вложенные подпрограммы могут использоваться только в той подпрограмме, в которой они описаны. В иных случаях (например, в языке Си) вложение подпрограмм не допускается.


Параметры подпрограмм.

Для обеспечения контролируемой передачи параметров в подпрограмму и возврата результатов из неё используется механизм параметров. Подпрограмма может иметь доступ к некоторым данным, которые описаны в основной программе. А также к данным, которые ей переданы при вызове в списке параметров. Параметры описываются при описании подпрограммы (в её заголовке) и могут использоваться внутри подпрограммы аналогично переменным, описанным в непосредственно внутри подпрограммы. При вызове подпрограммы значения каждого из параметров указываются в команде вызова (обычно после имени вызываемой подпрограммы).

Формальные и фактические параметры.

Формальные параметры задаются в вызывающей программе при объявлении или определении подпрограммы. Фактические параметры передаются в подпрограмму непосредственно при её вызове.

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

Способ передачи параметров в подпрограмму

Существует несколько способов передачи параметров в подпрограмму.

Передача параметров по значению

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

Передача параметров по ссылке

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

Передача параметров по имени

В вызывающей программе, при вызове подпрограммы, в формальный параметр может быть помещено произвольное выражение. При этом вычисление этого выражения произойдёт внутри подпрограммы в тот момент, когда потребуется его значение. Если это значение фигурирует несколько раз, то и вычисляться оно будет тоже несколько раз. Параметры, передаваемые по имени, дают возможность писать довольно универсальные подпрограммы. Такой способ передачи параметров используется, к примеру в языках Алгол или Алгол 68.

Передача параметров через стек

Это разновидность передачи параметра по значению «с ручным приводом», в данном случае отсутствует понятие формальных и фактических параметров. Все параметры лежат на стеке, причём их типы, количество и порядок не контролируются компилятором. Данный подход реализован в языке Форт.

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


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

В языках программирования высокого уровня могут использоваться следующие типы подпрограмм: Функции, Процедуры, Методы.

Функция

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

Процедура

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

Методы

Подпрограммы, входящие в состав классов в объектных языках программирования, обычно называются методами. Этим термином называют любые подпрограммы-члены класса, как функции, так и процедуры; когда требуется уточнение, говорят о методах-процедурах или методах-функциях.