
- •Підпрограма. Визначення. 1
- •Підпрограма. Визначення. 2
- •Застосування підпрограм
- •Відкриті та закриті підпрограми
- •Закриті підпрограми. 1
- •Закриті підпрограми. 2
- •Процедурна абстракція
- •Абстракція управління
- •Оболонка підпрограмної капсули. Параметри підпрограми
- •Параметри закритої підпрограми. 1
- •Параметри закритої підпрограми. 2
- •Параметри закритої підпрограми. 3
- •Параметри закритої підпрограми. 4
- •Параметри закритої підпрограми. 5
- •Параметри закритої підпрограми. 6
- •Локальні об'єкти підпрограм. 1
- •Локальні об'єкти підпрограм. 2
- •Глобальні об'єкти підпрограм
- •Правило хорошого стилю програмування
- •Відмінності між параметрами та локальними об’єктами підпрограми. 1
- •Відмінності між параметрами та локальними об’єктами підпрограми. 2
- •Прототип підпрограми
- •Способи передачі значень параметрів підпрограми. 1
- •Способи передачі значень параметрів підпрограми. 2
- •Передавання значення вмісту. 1
- •Передавання значення вмісту. 2
- •Передавання значення вмісту. 3
- •Передавання імені. 3
- •Приклад застосування різних способів передачі параметрів
- •Передача значення
- •Передача посилання
- •Передача імені
- •Процедури
- •Функції
- •Абстрактний тип даних. 1
- •Абстрактний тип даних. 2
- •Операції абстрактних типів даних
- •Склад абстрактного типу даних
- •Процедурний тип
- •Процедурний тип. Приклад
- •Вказівник на функцію
- •Алгоритм читання оператора опису
- •Приклади читання оператора опису
- •Вказівник на функцію. Приклад
Закриті підпрограми. 1
Виклики закритих підпрограм обробляються завжди під час компіляції. При цьому компілятором на місці виклику генерується послідовність команд, які дають змогу звертатися до відповідного екземпляра підпрограми в пам'яті і повертати управління в точку, що йде слідом за викликом.
підпро
грами
програми після
виклики компіляції
Закриті підпрограми. 2
На основі закритих підпрограм будуються програмні конструкції підпрограмного рівня інкапсуляції – так звані процедури (procedure) і функції (function).
Механізм процедур і функцій є обов'язковим для використання у всіх мовах програмування високого рівня.
Процедурна абстракція
Із визначення інкапсуляції підпрограмного рівня випливає, що підпрограмна капсула – це послідовність структурних операторів, охоплених оболонкою. Порядок розміщення операторів у капсулі відбиває сутність розв’язувальної капсулою задачі.
Тоді поняття підпрограмної капсули дає змогу програмістові-читачеві (абстрагуватися) від того, як розв’язує задачу капсула, і зосередитись на тому, яку задачу вона розв’язує. Такий погляд на підпрограму відбиває сутність процедурної абстракції.
Абстракція управління
Підпрограмну капсулу можна також розглядати як «чорну скриньку», на вхід якої передається управління, а на виході управління повертається. Унаслідок передачі управління та виконання операторів капсули можна отримати корисний ефект, який знайде відображення у векторі стану програми, у точці після виклику підпрограми.
Такий погляд на підпрограму становить сутність абстракції управління.
Оболонка підпрограмної капсули. Параметри підпрограми
Часто у процесі обробки використовуються не лише значення об'єктів, що містяться всередині капсули (локальні об'єкти). Проте часто доводиться передавати значення всередину капсули. При цьому результат, якщо він існує, постає потреба передати в середовище, яке оточує підпрограму.
Значення, що передаються всередину підпрограми, зазвичай різняться від виклику до виклику, тому, об'єкти, котрі можуть мати такі значення, називаються параметрами (parameters).
Параметри закритої підпрограми. 1
Кожен параметр можна описувати у вигляді тотожності такого виду:
<індикатор типу параметру <позначення параметра> ≡ <позначення значення, яке він набуває параметр у виклику підпрограми>.
Наприклад, нехай ділянку програми (р1 + р2) – 2 * р3 оформлено у вигляді підпрограми, де р1, р2, р3 – позначення параметрів. Тоді її виклик із параметрами, які мають наступні значення (тотожності):
int р1 = 5;
int р2 = 10;
int р3 = 3;
виробляє результат - значення 9 типу int.
Параметри закритої підпрограми. 2
Очевидно, що заміна параметрів на їхні значення за допомогою вказаної тотожності має сенс тільки перед виконанням підпрограми. Тому такі описи необхідно виконувати перед кожним викликом підпрограми. Цей громіздкий процес поліпшили, розклавши його на два етапи:
Ліві частини тотожностей ( в прикладі int p1, int p2, int p3) – описи, об'єднують у список (послідовність) і записують в інтерфейсу, при описі підпрограми;
Праві частини тотожностей (в прикладі 5, 10, 3 – значення), в тому самому порядку, що й описи, записують у виклику, при використанні підпрограми.