
- •Підпрограма. Визначення. 1
- •Підпрограма. Визначення. 2
- •Застосування підпрограм
- •Відкриті та закриті підпрограми
- •Закриті підпрограми. 1
- •Закриті підпрограми. 2
- •Процедурна абстракція
- •Абстракція управління
- •Оболонка підпрограмної капсули. Параметри підпрограми
- •Параметри закритої підпрограми. 1
- •Параметри закритої підпрограми. 2
- •Параметри закритої підпрограми. 3
- •Параметри закритої підпрограми. 4
- •Параметри закритої підпрограми. 5
- •Параметри закритої підпрограми. 6
- •Локальні об'єкти підпрограм. 1
- •Локальні об'єкти підпрограм. 2
- •Глобальні об'єкти підпрограм
- •Правило хорошого стилю програмування
- •Відмінності між параметрами та локальними об’єктами підпрограми. 1
- •Відмінності між параметрами та локальними об’єктами підпрограми. 2
- •Прототип підпрограми
- •Способи передачі значень параметрів підпрограми. 1
- •Способи передачі значень параметрів підпрограми. 2
- •Передавання значення вмісту. 1
- •Передавання значення вмісту. 2
- •Передавання значення вмісту. 3
- •Передавання імені. 3
- •Приклад застосування різних способів передачі параметрів
- •Передача значення
- •Передача посилання
- •Передача імені
- •Процедури
- •Функції
- •Абстрактний тип даних. 1
- •Абстрактний тип даних. 2
- •Операції абстрактних типів даних
- •Склад абстрактного типу даних
- •Процедурний тип
- •Процедурний тип. Приклад
- •Вказівник на функцію
- •Алгоритм читання оператора опису
- •Приклади читання оператора опису
- •Вказівник на функцію. Приклад
Абстрактний тип даних. 1
Абстрактний тип даних (abstract data type) – це визначуваний тип, що потребує опису не тільки множини значень, але й множини операцій.
Класифікація абстрактних типів даних:
Абстрактний тип даних. 2
В основі абстрактних типів даних лежать структури даних. Абстрактний тип даних, як і будь-який інший тип даних мови програмування, використовується для опису об'єктів програми. Стан абстрактного типу даних, це його значення в деякий момент часу виконання програми. Як правило, значення абстрактного типу даних є складеним, тому стан об'єкта абстрактного типу даних – це множина поточних значень об'єкта – компонентів мультизначення.
Операції абстрактних типів даних
Усі операції зі значеннями об'єктів, описаних абстрактними типами даних, належать до одного з таких трьох типів:
конструктори - змінюють стан об'єкта (наприклад, записати в, прочитати з);
селектори - оцінюють стан об'єкту (наприклад, чи порожнє значення структури даних, або повне; яка довжина значення, що в голові значення, а, що у хвості, якщо це список; якщо, наприклад, це черга - що у вершині?
ітератори – «розглядають» (досліджують) стан об'єкта (наприклад, повертають, значення всіх компонентів послідовне одне за одним без зміни стану об'єкта).
Склад абстрактного типу даних
За визначенням опис абстрактних типів даних повинен містити наступне:
позначення типу,
опис значень типу;
опис операцій зі значеннями типу.
Таким чином компоненти, які входять в опис типу, гетерогенні, тому для опису абстрактних типів даних слід використовувати іменовані типи. При цьому для опису операцій на підпрограмному рівні інкапсуляції використовують підпрограмні типи, у мові Pascal – так звані процедурні, або у мові С покажчики на підпрограми, які називаються вказівники на функції.
Процедурний тип
Процедурний тип (procedural type) - це тип, множина значень якого містить посилання на закриті підпрограми. Об'єкти цього типу можуть використовуватися у лівій частині оператора присвоювання та в операціях відношень.
Опис типу являє собою опис інтерфейсу закритої підпрограми без вказування конкретного позначення підпрограми.
Підпрограми, позначення яких містимуться у правій частині оператора присвоювання, повинні мати модифікатор far наприкінці опису інтерфейсу.
Процедурний тип. Приклад
program ATD;
type
pStack = ^stack;
pProc = procedure (stack : pStack; nMes : integer);
pFunc = function(stack : pStack): integer;
Stack = record
m_s : array[1..128] of integer;
m_sp : integer;
m_Push : pProc;
m_Pop : pFunc;
m_Init : pFunc;
end;
function Init(stack : pStack):integer; far;
begin
stack^.m_sp := 0;
end;
procedure Push(stack : pStack;nMes : integer); far;
begin
end;
function Pop (stack : pStack) : integer; far;
begin
end;
var
Pmy_Stack : pStacK;
begin
new(pmy_Stack);
pmy_Stack^.m_Push := Push;
pmy_Stack^.m_Pop := Pop;
pmy_Stack^.m_Init := Init;
pmy_Stack^.m_init(pmy_Stack);
end.