Основні концепції мов програмування на прикладі мови Паскаль, локальні і глобальні

Компілятор Паскаля формує сегмент коду, в якому зберігається програма у вигляді машинних команд, сегмент даних, в якому виділяється пам'ять під глобальні змінні програми, і сегмент стека, призначений для розміщення локальних змінних під час виконання програми.

Глобальними називаються змінні. областю визначення яких є вся програма або блок. Вони описані в головній програмі. Змінні, що не були ініційовані явно, перед початком виконання програми обнуляються. Час життя глобальних змінних з початку програми і до її завершення.

Усередині підпрограм описуються локальні змінні. Вони розташовуються в сегменті стека, причому, розподіл пам'яті відбувається в момент виклику підпрограми, а її звільнення - по завершенні підпрограми. Таким чином, час життя локальних змінних - з початку роботи підпрограми і до її закінчення. Значення локальних змінних між двома викликами однією і тією ж підпрограми не зберігаються, і ці змінні попередньо НЕ обнуляються, тобто у відповідних осередках пам'яті знаходяться довільні значення.

Глобальні змінні доступні в будь-якому місці програми або підпрограми, крім тих підпрограм, в яких описані локальні змінні з такими ж іменами. Локальні змінні - змінні з обмеженою областю визначення в програмі. Вони можуть використовуватися тільки в підпрограмі, в якій вони описані, і у всіх, вкладених в неї.

Отже, ніяких додаткових зусиль з передачі глобальних змінних в підпрограму не потрібно, оскільки вони видно в ній природним чином. Цей спосіб обміну інформацією між головною програмою і підпрограмою - найпростіший, він же і найгірший, як часто трапляється і в інших життєвих ситуаціях.

Крім того, використання глобальних змінних звужує можливості застосування підпрограми: якщо в ній використовується ім'я глобальної змінної, підпрограма може працювати тільки з нею, а не з будь-якої змінної цього ж типу, як це відбувається при передачі даних через параметри. Уявіть, як незручно було б користуватися стандартними процедурами і функціями, якби для їх виклику було потрібно заводити і форматувати змінні з заданими іменами!

Якщо в підпрограмі не використовуються глобальні змінні, вона стає незалежною: її можна використовувати повторно, помістити в іншу програму або в окремий модуль.

Локалізувати змінні, тобто писати підпрограми так, щоб всі дані або передавалися їм ззовні через параметри, або були описані всередині підпрограми, дуже важливо. Як ми побачимо пізніше, цей принцип лежить в основі інкапсуляції - одного з наріжних каменів об'єктно-орієнтованого програмування.

Схожі статті