Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція 20-21.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
380.74 Кб
Скачать

Абстрактний тип даних. 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.