
- •Підпрограма. Визначення. 1
- •Підпрограма. Визначення. 2
- •Застосування підпрограм
- •Відкриті та закриті підпрограми
- •Закриті підпрограми. 1
- •Закриті підпрограми. 2
- •Процедурна абстракція
- •Абстракція управління
- •Оболонка підпрограмної капсули. Параметри підпрограми
- •Параметри закритої підпрограми. 1
- •Параметри закритої підпрограми. 2
- •Параметри закритої підпрограми. 3
- •Параметри закритої підпрограми. 4
- •Параметри закритої підпрограми. 5
- •Параметри закритої підпрограми. 6
- •Локальні об'єкти підпрограм. 1
- •Локальні об'єкти підпрограм. 2
- •Глобальні об'єкти підпрограм
- •Правило хорошого стилю програмування
- •Відмінності між параметрами та локальними об’єктами підпрограми. 1
- •Відмінності між параметрами та локальними об’єктами підпрограми. 2
- •Прототип підпрограми
- •Способи передачі значень параметрів підпрограми. 1
- •Способи передачі значень параметрів підпрограми. 2
- •Передавання значення вмісту. 1
- •Передавання значення вмісту. 2
- •Передавання значення вмісту. 3
- •Передавання імені. 3
- •Приклад застосування різних способів передачі параметрів
- •Передача значення
- •Передача посилання
- •Передача імені
- •Процедури
- •Функції
- •Абстрактний тип даних. 1
- •Абстрактний тип даних. 2
- •Операції абстрактних типів даних
- •Склад абстрактного типу даних
- •Процедурний тип
- •Процедурний тип. Приклад
- •Вказівник на функцію
- •Алгоритм читання оператора опису
- •Приклади читання оператора опису
- •Вказівник на функцію. Приклад
Передавання імені. 3
Семантика:
Цей спосіб найбільш ефективний, але й найбільш небезпечний, тому, як правило, у мовах програмування він не реалізується.
Приклад застосування різних способів передачі параметрів
i : integer;
а : array [1…2] of integer;
subroutine P(x : integer);
i := i + 1;
x := x + 2;
end P;
begin
a[1] := 10;
a[2] := 20;
i := 1;
P(a[i]);
end.
Передача значення
a[i] = 10
початкове значення х = 10
кінцеве значення а = (10, 20)
Передача посилання
x = a[i] = a[1]
в підпрограмі х := х + 2 означає a[1] = a[1] + z
кінцеве значення а = (12, 20)
Передача імені
x = a[i] = a[i]
в підпрограмі x := x + 2 означає a[i] := a[i] + 2
кінцеве значення а = (10, 22)
Приклади використання небезпечного третього способу. 1
Підпрограма 1:
F(x)
a * x + 3;
end F;
тоді виклик F(b + c) призведе до виразу a * b + c + 3
Приклади використання небезпечного третього способу. 2
Підпрограма 2:
swap(int a, b)
int t;
t = a;
t = b;
b = t;
end swap;
тоді виклик swap(i, a[i]) призведе до виконання наступних операторів:
t = i;
i = a[i];
a [i] = t;
Зазначення способів передачі параметрів.1
Отже, у списку формальних параметрів необхідно зазначити спосіб передавання значень параметрів. Це можна робити трьома шляхами|коліями|:
явно, використанням спеціально зарезервованих слів;
за замовчуванням;
комбінуванням двох попередніх способів (явно або за замовчуванням).
Зазначення способів передачі параметрів.2
Наприклад, в мові Pascal спосіб передавання значень параметрів зазначається наступним чином шляхами|коліями|:
передавання значення вказується за замовчуванням;
передача посилання вказується зарезервованого лексемою varr;
передача найменування не використовується.
У мові С реалізовано тільки один спосіб – передавання значення, інших способів немає.
Повертання результатів із підпрограми
Закриті підпрограми можуть повертати результат у зовнішнє оточення підпрограми трьома шляхами:
використовуючи способи передавання параметрів за посиланням або за найменуванням;
використовуючи в тілі підпрограми об'єкти, описані глобально;
формуючи результат спеціальним оператором і у спеціальному місці пам'яті поза підпрограмою.
Процедури та функції
Застосування перших двох шляхів не потребує додаткових витрат. Проте використання другого шляху належить до побічних ефектів і вкрай небажане. Третій шлях потребує опису результату, виробленого підпрограмою, і застосування спеціального оператора для розміщення результату у певному місці пам'яті.
Підпрограми залежно від того, чи є у них результат і яким із вказаних шляхів він повертається, поділяються на два типи: процедури та функції.
Процедури
Підпрограми першого типу не виробляють значення–результат, а інші значення передають у зовнішнє оточення першими двома способами і називаються процедурами (procedure).
Для позначення процедур може використовуватися зарезервоване слово procedure (Pascal).