- •Процедурно-орієнтоване програмування Організація підпрограм Поняття підпрограми
- •Організація підпрограм
- •Механізм передачі параметрів
- •Принцип локалізації
- •Концепція розподілу пам’яті
- •Способи передачі параметрів
- •Вказівники на функції
- •Розширені можливості використання підпрограм Функції з аргументами за замовчуванням
- •Перевантаження функцій
- •Шаблони функцій
- •Вбудовані функції
- •Рекурсія
Принцип локалізації
В процесі запису алгоритму підзадачі, зазвичай, виникає необхідність оголошення деяких додаткових типів значень і (або) програмних об'єктів, наприклад допоміжних змінних для представлення проміжних результатів. Якщо всі їх описувати в основній програмі, то паралелізму і незалежності при розробці різних частин програми досягти не вдасться.
Також один і той же ідентифікатор в програмі не повинен використовуватися для різних цілей. З одного боку, ця вимога зрозуміла, оскільки інакше може виникнути неоднозначність розуміння і інтерпретації програми. З іншого боку, абсолютне виконання цієї вимоги приводить до значних труднощів при паралельній роботі виконавців в частині узгодження ідентифікаторів, які використовуються в підпрограмах і в основній програмі.
Зазначені труднощі усуваються в більшості мов програмування завдяки блоковій структурі програми і принципу локалізації даних.
Механізм блокової організації програм дозволяє розглядати програму як деяку ієрархічну структуру, що складається з головної програми і множини вкладених блоків (підпрограм). Зовнішньою по відношенню до всіх інших підпрограм, є програма (рис. 2).
Рис. 2. Реалізація вкладеності підпрограм
Тут А - основна програма; В, Е - підпрограми, що викликаються в основній програмі; С,D - підпрограми, що викликаються в підпрограмі B; F - підпрограма, що викликається в підпрограмі E.
Суть принципу локалізації даних полягає в тому, що будь-якій підпрограмі дозволяється вводити у вживання свої внутрішні програмні об'єкти (змінні, константи тощо), необхідні для її виконання. Такі програмні об'єкти називаються локальними і мають певний сенс (область дії) лише в межах даної підпрограми. При цьому об'єкти, що описуються в основній програмі, є глобальними і доступнимив будь-якому місці програми, у тому числі і у підпрограмах.
Таким чином у підпрограмі можуть оброблятися:
Глобальні дані – змінні і константи, які описані в основній програмі, і доступ до яких дозволений із тіла будь-якої підпрограми. Глобальні ідентифікатори в тілі підпрограми мають той же самий сенс, який вони мали до моменту входу в підпрограму. Пам'ять під усі глобальні дані виділяється на етапі компіляції і її розмір залишається незмінним протягом усього часу виконання програми. За допомогою глобальних ідентифікаторів здійснюється постійний і безпосередній зв'язок підпрограми з охоплюючим її блоком.
Локальні дані - змінні і константи, які описані в підпрограмах. Область їхньої дії – та підпрограма, у якій вони описані, і всі вкладені в неї підпрограми. Локальна змінна створюється при кожному виклику підпрограми і знищується, як тільки завершилося її виконання. Тому поза підпрограмою локальна змінна недоступна.
У загальному випадку на всі імена, що вводяться в списку формальних параметрів підпрограми, поширюються ті ж правила, що і на описані у підпрограмі програмні об’єкти. Вони вважаються локальними для підпрограми, яка і є областю дії для цих об'єктів. Поза цією областю дії вони не визначені.
Поняття "глобальності" і "локальності" варто розуміти відносно - стосовно конкретного блоку: дані, описані в блоці, вважаються глобальними по відношенню до усіх внутрішніх блоків. Вкладеність блоків і поняття глобальної та локальної змінної ілюструє наступний приклад:
Program Scope;
Var A0, B0, C0 : byte;
Procedure P1;
var A1, B1, C1 : byte;
Procedure P2;
var A2, B2, C2 : byte;
begin
{ A0, B0, C0, A1, B1, C1 - глобальні змінні, A2, B2, C2 - локальні змінні }
end;
begin
{ A0, B0, C0 - глобальні змінні, A1, B1, C1 - локальні змінні }
end;
Begin
{ A0, B0, C0 - глобальні змінні }
End.