Абстрактний тип даних (АТД) — це математична модель для типів даних, де тип даних визначається поведінкою (семантикою) з точки зору користувача даних, а саме в термінах можливих значень, можливих операцій над даними цього типу і поведінки цих операцій. Вся внутрішня структура такого типу захована від розробника програмного забезпечення — в цьому і полягає суть абстракції. Абстрактний тип даних визначає набір функцій, незалежних від конкретної реалізації типу, для оперування його значеннями. Конкретні реалізації АТД називаються структурами даних.
В програмуванні абстрактні типи даних зазвичай подаються у вигляді інтерфейсів, які приховують відповідні реалізації типів. Програмісти працюють з абстрактними типами даних виключно через їх інтерфейси, оскільки реалізація може в майбутньому змінитися. Такий підхід відповідає принципу інкапсуляції в об'єктно-орієнтованому програмуванні. Сильною стороною цієї методики є саме приховування реалізації. Раз зовні опублікований тільки інтерфейс, то поки структура даних підтримує цей інтерфейс, всі програми, що працюють із заданою структурою абстрактним типом даних, будуть продовжувати працювати. Розробники структур даних намагаються, не змінюючи зовнішнього інтерфейсу і семантики функцій, поступово допрацьовувати реалізації, покращуючи алгоритми по швидкості, надійності і використовуваної пам'яті.
Різниця між абстрактними типами даних і структурами даних, які реалізують абстрактні типи, можна пояснити на наступному прикладі. Абстрактний тип даних список може бути реалізований за допомогою масиву або лінійного списку, з використанням різних методів динамічного виділення пам'яті. Однак кожна реалізація визначає один і той же набір функцій, який повинен працювати однаково (по результату, а не за швидкістю) для всіх реалізацій.
Абстрактні типи даних дозволяють досягти модульності програмних продуктів і мати кілька альтернативних взаємозамінних реалізацій окремого модуля.
Приклади
Наприклад, цілі числа — це абстрактний тип даних, який визначається як значення …, −2, −1, 0, 1, 2, … , і поводиться відповідно до звичної математики (з увагою про цілочисельне ділення), за допомогою операцій додавання, віднімання, множення і ділення, а також операції більше ніж, менше ніж і т. д. незалежно від того, як цілі числа представлені за допомогою комп'ютера. Очевидно, що «поведінка» включає в себе різні аксіоми (асоціативність і комутативність складання і т. д.) і умови за операціями (не може ділити на нуль). Зазвичай цілі числа представлені в структурі даних у вигляді двійкових чисел, найчастіше як доповняльний код, але може бути двійково-десятковий код або обернений код, але користувач абстрагується від конкретного вибору уявлення, і може просто використовувати ці дані у вигляді цілих чисел.
АТД складається не тільки з операцій, але і значень початкових даних і обмежень на операції. «Інтерфейс», як правило, стосується лише операцій, і, можливо, деяких з обмежень на операції, зокрема попередні умови і постумови, але не інші обмеження, такі як відносини між операціями.
Наприклад, абстрактний стек, який має LIFO структуру, може бути визначений за допомогою трьох операцій: PUSH, котра вставляє елемент даних в стек; POP, яка видаляє елемент даних з нього; і PEEK або TOP, яка отримує доступ до елементу даних в вершині стека без видалення. Абстрактна черга, яка має FIFO структуру, також буде мати три операції: ENQUEUE, яка вставляє елемент даних в чергу; DEQUEUE, яка видаляє перший елемент даних з нього; і FRONT, що отримує доступ і служить першим елементом даних в черзі. Там не було б ніякої можливості диференціювати ці два типи даних, якщо математичне обмеження не вводиться, тоді це для стека вказує, що кожна POP завжди повертає найостанніший втиснутий елемент, який ще не вискочив. При аналізі ефективності алгоритмів, які використовують стеки, можна також вказати, що всі операції не приймають той же самий час, незалежно від того, скільки елементів даних були витіснені в стек, і що стек використовує постійну кількість схов для кожного елемента.
Вступ
Абстрактні типи даних — це чисто теоретичні об'єкти, які використовуються (між іншим) для спрощення опису абстрактних алгоритмів, також для класифікації та оцінки структури даних, і формального опису систем типів мов програмування. Проте АТД можуть бути реалізовані за допомогою певних типів даних або структур даних, у багатьох відношеннях і в багатьох мовах програмування; або описані в формальній мові специфікації. АТД часто реалізуються у вигляді модулів: інтерфейс модуля оголошує процедури, які відповідають операціям АТД, іноді з коментарями, які описують обмеження. Ця стратегія приховування інформації дозволяє реалізації модуля бути зміненою без порушення клієнтських програм.
Термін Абстрактний Тип Даних також можна розглядати, як узагальнений підхід ряду алгебричних структур, таких, як решітки, групи і кільця. Поняття абстрактних типів даних пов'язане з поняттям абстракції даних, це важливо в об'єктно-орієнтованому програмування та методології проектування за контрактом на розробку програмного забезпечення.
Визначення абстрактного типу даних
Абстрактний тип даних визначається як математична модель об'єктів даних, які становлять тип даних, а також функції, які працюють на цих об'єктах. Там немає стандартних конвенцій, для визначення їх. Широкий поділ може бути проведений між «імперативними» і «функціональним» стилів визначення.
Визначення імперативного стилю
У філософії імперативних мов програмування, абстрактна структура даних задумана як сутність, яка є змінним-це означає, що він може перебувати в різних станах в різний час. Деякі операції можуть змінити стан АТД; таким чином, порядок, в якому оцінюються операції має важливе значення, і та ж сама операція на одних і тих же суб'єктах, можуть мати різні ефекти, якщо виконуються в різний час, так само, як інструкції комп'ютера, або команди і процедури імперативної мови. Щоб підкреслити цю точку зору, прийнято казати, що операції виконуються або застосовуються, не стільки, скільки оцінюються. Імперативний стиль часто використовується при описі абстрактних алгоритмів. (Дивіться Мистецтво програмування Дональда Кнута для отримання більш докладної інформації)
Абстрактна змінна
Визначення імперативного стилю АТД часто залежать від поняття абстрактної змінної, яку можна розглядати, як найпростіший нетривіальний АТД. Абстрактна змінна V є змінний об'єкт, який допускає дві операції:
- store(V, х), де х є значення невизначеного характеру;
- fetch(V), що дає значення, з тим обмеженням, що
fetch
(V) завжди повертає значення х, котре використовуються в самий останній операції store(V, х) на тій же самій змінної V.
Як і в багатьох мовах програмування, операція store
(V, x) часто пишеться V ← x (або деякі аналогічні позначення) і fetch
(V) мається на увазі кожен раз, коли змінна V використовується в контексті, де потрібно значення. Так, наприклад, V ← V + 1 зазвичай розуміється, як скорочення для store
(V,fetch
(V) + 1).
У цьому визначенні неявно передбачається, що збереження значення в змінну U не робить ніякого впливу на стан окремої змінної V. Для того, щоб зробити це припущення явним, можна було б додати, що обмеження
- якщо U і V є різні змінні, то послідовність {
store
(U, x);store
(V, y) } еквівалентна послідовностіstore
(V, y);store
(U, x) }.
У більш загальному плані, при визначенні АТД часто припускають, що будь-яка операція, яка змінює стан одного екземпляра АТД не робить ніякого впливу на стан будь-якого іншого екземпляру (в тому числі інших екземплярів одного і того ж АТД), хіба тільки аксіоми АТД не означають, що два екземпляри пов'язані (псевдонімами) в цьому сенсі. Наприклад, при розширенні визначення абстрактної змінної, щоб включити абстрактні структури, операція, яка вибирає поле з структурою змінної R повинен дати змінну V, яка є псевдонімом до тієї частини R.
Означення абстрактної змінної V може також обмежити записані значення x членів певної множини X, називається діапазон, або тип V. Як і в мовах програмування, такі обмеження можуть спростити опис і аналіз алгоритмів, а також поліпшити їх читаність.
Зверніть увагу, що це визначення нічого не говорить про результат оцінки fetch
(V), коли V є не-ініціалізована, тобто, перед виконанням будь-якої операції збереження на V. Алгоритм, який робить це, як правило, вважається недійсним, оскільки його ефект не визначений. (Проте, є деякі важливі алгоритми, ефективність яких значною мірою залежить від припущення, що така вибірка є законною, і повертає деяке довільне значення в діапазоні змінної.)
Створення екземпляра
Деяким алгоритмам необхідно створювати нові екземпляри деякого АТД (наприклад, нові змінні, або нові стеки). Для опису таких алгоритмів, він, як правило, включає в АТД визначення операції Create(), який дає екземпляр АТД, як правило, з аксіом, еквівалентних
- результат операції Create() відрізняється від будь-якого екземпляру, які використовується алгоритмом.
Ця аксіома може бути посилена, щоб виключити також часткове накладення спектрів з іншими екземплярами. З іншого боку, ця аксіома досі дозволяє реалізації операції Create() отримати раніше створений екземпляр, який став недоступним для програми.
Приклад: абстрактний стек (імперативний стиль)
Як інший приклад, визначення абстрактного стека імперативним стилем може вказати, що стан стека S може бути змінений тільки за допомогою операцій
push
(S, x), де х деяке значення невизначеного характеру;pop
(S), що надає значення як результат, з тим обмеженням, що- Для будь-якого значення х і будь-якої абстрактної змінної V, послідовність операцій {
push(S,x)
; V ←pop(S)
} еквівалентна операції V ← x.
Так як привласнення V ← x, за визначенням, не може змінити стан S, ця умова означає, що V ← pop(S)
відновлює S в стан він мав до операції push(S,x)
. З цієї умови і з властивостей абстрактних змінних, то це означає, наприклад, що послідовність
{ push
(S, x); push
(S, y); U ← pop
(S); push
(S, z); V ← pop
(S); W ← pop
(S) }
де х, у та z є будь-які значення, а U, V, W попарно різні змінні, еквівалентно
{ U ← y; V ← z; W ← x }
При цьому неявно передбачається, що операції на екземплярі стека не змінюють стан будь-якого іншого екземпляру АТД, в тому числі інших стеків; а саме
- Для будь-яких значень x, y, а також будь-яких різних стеків S і T, послідовність {
push(S,x)
;push(T,y)
} еквівалентна послідовності {push(T,y)
;push(S,x)
}.
Абстрактне визначення стека зазвичай включає в себе також булеву функцію empty(S)
і операцію create()
, яка повертає екземпляр стека, з аксіом, еквівалентних
create
() ≠ S для будь-якого стека S (новостворений стек відрізняється від усіх попередніх стеків);empty
(create
()) (новостворений стек порожній);not
empty
(push
(S, x)) (заштовхуючи щось в стек робить його непустим);
Стиль одного екземпляру
Іноді АТД визначається так, якби тільки один його екземпляр існував під час виконання алгоритму, і всі операції були застосовані до цього екземпляру, який явно не записаний. Наприклад, абстрактний стек, який вказано вище, може бути визначений з операціями push(x)
та pop
(), які працюють на єдиному існуючому стеку. Визначення АТД в цьому стилі можна легко переписати, щоб визнати, що кілька екземплярів АТД співіснують, шляхом додавання явного параметра екземпляру (наприклад, S в попередньому прикладі) для кожної операції, яка використовує або змінює неявне екземпляр.
З іншого боку, деякі АТД не можуть бути визначені за значенням, не припускаючи декількох екземплярів. Це той випадок, коли одна операція приймає два різних екземпляра АДТ як параметри. Для прикладу, розглянемо доповнюючи визначення абстрактного стека з операцією compare
(S, T), яка перевіряє, чи стеки S і Т містять одні й ті ж елементи в тому ж порядку.
Визначення функціонального стилю
Інший спосіб визначення АТД, ближче до духу функціонального програмування, це розглядати кожен стан структури, як окрему сутність. З цієї точки зору, будь-яка операція, яка змінює АТД моделюється як математична функція, яка приймає старий стан як аргумент, і повертає новий стан як частину результату. На відміну від імперативних операцій, ці функції не мають побічних ефектів. Таким чином, порядок, в якому вони оцінюються — несуттєвий, і та ж операція застосовується до тих же аргументів (в тому числі і тих же вхідних станів) завжди буде повертати ті ж результати (і вихідні стани).
У функціональному поданні, зокрема, не існує ніякого способу (або необхідності), щоб визначити «абстрактне змінну» з семантикою імперативних змінних (а саме, з операціями fetch і store). Замість того щоб зберігати значення в змінних, він передає їх як аргументи функції.
Приклад: абстрактний стек (функціональний стиль)
Наприклад, повне визначення абстрактного стека у функціональному стилі може використовувати три операції:
- push: приймає стан стека і довільне значення, повертає стан стека;
- top: приймає стан стека, повертає значення;
- pop: приймає стан стека, повертає стан стека.
У визначенні функціонального стилю немає необхідності в операції створення. Справді, не існує поняття «екземпляр стеку». Стек станів можна розглядати, як потенційні стани єдиної структури стека, а два стану стека, які містять одні і ті ж значення в тому ж порядку, вважаються однаковими станами. Ця точка зору фактично відображає поведінку деяких конкретних реалізацій, таких як зв'язані списки з хеш-мінусами.
Замість операції create
(), визначення абстрактного стека у функціональному стилі може припустити існування особливого стану стека, порожнього стека, який позначається спеціальним символом, як Λ або «()»; або визначити операцію bottom
(), яка не приймає аргументів і повертає цей особливий стан стека. Зауважимо, що аксіоми мають на увазі, що
push
(Λ, x) ≠ Λ.
У визначенні стека у функціональному стилі, немає потреби у предикаті empty: замість нього, можна перевірити, чи є стек порожній шляхом тестування, чи дорівнює стек Λ.
Зверніть увагу, що ці аксіоми не визначають дію top
(s) або pop
(s), якщо s не є станом стека повертається операцією push. Так як операція push залишає стек не порожнім, тоді ці дві операції не визначені (і, отже неспроможні) при s = Λ. З іншого боку, аксіоми (і відсутність побічних ефектів) слід, що push
(s, x) = push
(t, y) тоді й лише тоді, коли x = y та s = t.
Як і в деяких інших галузях математики, прийнято вважати також, що стек станів тільки ті, чиє існування може бути доведено з аксіом в кінцеве число кроків. В прикладі абстрактного стеку, зазначений вище, це правило означає, що кожен стек — це кінцева послідовність значень, яка стає порожнім стеком (Λ) після кінцевого числа викликів операції pop
(). Самі по собі, аксіоми, не виключають існування нескінченних стеків (на котрих операцію pop
() можна викликати нескінчену кількість раз, щоразу отримуючи інший стан) або кругові стеки (які повертаються в той же стан після кінцевого числа викликів операції pop
()). Зокрема, вони не виключають стани S такі, що pop
(s) = s або push
(s, x) = s для деякого х. Однак, так як ніхто не може отримати такий стек станів із заданими операціями, вони вважаються «не існуючими».
Чи слід включати складність
Крім поведінки з точки зору аксіом, можна також включити, в визначенні операції АТД, їх алгоритмічної складності. Олександр Степанов, дизайнер стандартної бібліотеки шаблонів C++, включені гарантії складності в специфікації STL, аргументуючи:
Причина введення поняття абстрактних типів даних було дозволити взаємозамінність програмних модулів. Ви не можете мати змінні модулі, якщо ці модулі не поділяють подібну поведінку складності. Якщо замінити один модуль іншим модулем з тією же функціональною поведінкою, але з різними компромісами складності, користувач цього коду буде неприємно здивований. Я міг би сказати йому що-небудь, що мені подобається абстракції даних, і він до цих пір не хотів би використовувати код. Складність твердження мають бути частиною інтерфейсу.— Олександр Степанов
Переваги абстрактних типів даних
Інкапсуляція
Абстракція зобов'язується, що будь-яка реалізація АТД має певні властивості і здібності; знати їх — це все, що потрібно, щоб використовувати об'єкт АТД. Користувач не потребує будь-яких технічних знань про те, як здійснюється робота над АТД, щоб їх використовувати.
Локалізація змін
Код, який використовує об'єкт АТД не потрібно буде редагувати, якщо реалізація АТД змінилася. Оскільки будь-які зміни в реалізації як і раніше повинні відповідати інтерфейсу, а так як код з використанням об'єкту АТД може відноситися тільки до властивостей і здібностей, зазначених в інтерфейсі, можуть бути зроблені зміни в реалізації, при цьому не вимагаючи будь-яких змін в коді, де використовується АТД.
Гнучкість
Різні варіанти реалізації АТД, мають всі ті ж властивості і здібності, котрі еквівалентні і можуть бути використані як взаємозамінні в коді, який використовує АТД. Це дає велику гнучкість при використанні об'єктів АТД в різних ситуаціях. Наприклад, різні реалізації АТД можуть бути більш ефективним в різних ситуаціях; можна використовувати кожен з них в ситуації, коли він є кращим, збільшуючи таким чином загальну ефективність.
Типові операції
Деякі операції, які часто вказані для АТД (можливо, під іншими назвами) є
compare
(s, t), що перевіряє, чи є еквівалентні в деякому сенсі два стани екземплярів;hash
(s), яка обчислює деякі стандартні геш-функції зі стану екземплярів;print
(s) абоshow
(s), яка виробляє зручний для читання представлення стану екземпляру.
У визначенні АТД в імперативному стилі також можливо знайти
create
(), що дає новий екземпляр АТД;initialize
(s), що готує новий створений екземпляр s для подальших операцій, або скидає його в якийсь «початковий стан»;copy
(s, t), що ставить екземпляр s у стан еквівалентний стану екземпляра t;clone
(t), який виконує s ←create
(),copy
(s, t), і повертає s;free
(s) абоdestroy
(s), що звільняє пам'ять та інші ресурси, котрі використовуються екземпляром s.
Операція free зазвичай не актуальна або немає сенсу, оскільки АТД — це теоретичні об'єкти, які не «використовують пам'ять». Проте, це може бути необхідно, коли необхідно проаналізувати сховище, що використовується алгоритмом, який використовує АТД. У цьому випадку потрібно додаткові аксіоми, які визначають, скільки пам'яті кожен екземпляр АТД використовує, в залежності від його стану, і скільки пам'яті повертається в пул при використанні операції free.
Приклади
Деякі загальні АТД, які довели свою корисність в найрізноманітніших додатках
Кожен з цих АТД може бути визначена різними способами і варіантами, не обов'язково еквівалентними. Наприклад, абстрактний стек може або не може мати операцію підрахунку, яка говорить, скільки елементів були добавлені і ще не видалені. Цей вибір робить відмінність не тільки для своїх клієнтів, але і для реалізації.
Абстрактний графічний тип даних
Розширення АТД для комп'ютерної графіки було запропоновано в 1979 році: абстрактний тип графічних даних (AGDT). Воно було введено Надією Магненат Тельманн і Даніелем Тельманн. AGDT забезпечує переваги АТД зі зручностями для побудови графічних об'єктів в структурованому вигляді.
Реалізація
Реалізація АТД означає забезпечення однієї процедури або функції для кожної абстрактної операції. Екземпляри АДТ представлені будь-якою конкретною структурою даних, яка маніпулює цими процедурами, відповідно до специфікації АТД.
Як правило, існує багато способів реалізувати той же АТД, з використанням декількох різних конкретних структур даних. Так, наприклад, абстрактний стек може бути реалізований за допомогою зв'язаного списку або масивом.
Для того, щоб запобігти клієнтів від залежності від реалізації, АТД часто упакований в вигляді непрозорого типу даних в одному або декількох модулях, чий інтерфейс містить тільки підпис (кількість і типи параметрів і результатів) від операцій. Реалізація модуля, а саме тіла процедур і конкретна структура даних, яка використовується — тоді можуть бути приховані від більшості клієнтів модуля. Це дає можливість змінити реалізацію, не зачіпаючи клієнтів. Якщо реалізація піддається впливу, відомо, замість цього, як прозорий тип даних.
При реалізації АТД, кожен екземпляр (в термінах імперативного стилю) або кожне стан (в термінах функціонального стилю), як правило, представлений дескриптором якогось виду.
Сучасні об'єктно-орієнтовані мови, такі як і Java, підтримують форму абстрактних типів даних. Коли клас використовується як тип, це абстрактний тип, який відноситься до прихованого уявлення. У цій моделі АТД зазвичай реалізується як клас, і кожен екземпляр АТД, як правило, об'єкт цього класу. Інтерфейс модуля зазвичай оголошує конструктори, як звичайні процедури, і більшість інших операцій АТД, як методи цього класу. Проте, такий підхід не легко інкапсулювати декілька репрезентативних варіанти, знайдених в АТД. Вона також може підірвати розширюваності об'єктно-орієнтованих програм. У чисто об'єктно-орієнтованої програми, яка використовує інтерфейси як типи, типи відносяться до поведінці, не уявленню.
Приклад: реалізація абстрактного стека
Як приклад, ось реалізація абстрактного стека в мові програмування C.
Імперативний стиль інтерфейсу
Інтерфейс в імперативному стилі може бути:
typedef struct stack_Rep stack_Rep; // тип: уявлення екземпляру стека(непрозорий запис) typedef stack_Rep* stack_T; // тип: дескриптор до екземпляру стека (непрозорий вказівник) typedef void* stack_Item; // тип: значення, збережене в екземплярі стека(довільний адрес) stack_T stack_create(void); // створює новий порожній екземпляр стека void stack_push(stack_T s, stack_Item x); // додає елемент на вершину стека stack_Item stack_pop(stack_T s); // видаляє верхній елемент зі стека і повертає його bool stack_empty(stack_T s); // перевіряє, порожній чи стек
Цей інтерфейс може бути використаний в такий спосіб:
#include <stack.h> // підключає інтерфейс стека stack_T s = stack_create(); // створює новий порожній екземпляр стека int x = 17; stack_push(s, &x); // додає адресу x на вершину стека void* y = stack_pop(s); // видаляє адресу х зі стека і повертає його if(stack_empty(s)) { } // робить щось, якщо стек порожній
Цей інтерфейс може бути реалізований різними способами. Реалізація може бути як завгодно неефективна, так як формального визначення АТД, вище, не визначає, скільки простору стека може використовуватися, і як довго кожна операція повинна зайняти. Він також не уточнює, чи продовжує стек стану s існувати після виклику x ← pop
(s).
На практиці формальне визначення повинно бути зазначено, що простір пропорційно кількості елементів заштовханих і ще не видалених; і що кожна з операцій вище, повинна закінчитися за постійну кількість часу, незалежно від цієї кількості. Для виконання цих додаткових специфікацій, реалізація може використовувати зв'язаний список або масив (з динамічною зміною розмірів) разом з двома цілими числами (кількість елементів і розмір масиву).
Функціональний стиль інтерфейсу
Функціональний стиль визначення АТД є більш придатними для функціональних мов програмування, і навпаки. Проте, можна забезпечити інтерфейс функціональним стилем навіть в імперативній мові програмування, як C. Наприклад:
typedef struct stack_Rep stack_Rep; // тип: уявлення стану стека (непрозорий запис) typedef stack_Rep* stack_T; // тип: дескриптор до стану стека (непрозорий вказівник) typedef void* stack_Item; // тип: значення стану стека (довільний адрес) stack_T stack_empty(void); // повертає порожнє стан стека stack_T stack_push(stack_T s, stack_Item x); // додає елемент на вершину стану стека і повертає отриманий стан стека stack_T stack_pop(stack_T s); // видаляє верхній елемент зі стану стека і повертає отриманий стан стека stack_Item stack_top(stack_T s); // повертає верхній елемент стану стека
Бібліотеки АТД
Багато сучасних мов програмування, такі як C ++ і Java, поставляються зі стандартними бібліотеками, які реалізують кілька загальних АТД, таких як ті, які перераховані вище.
Вбудовані абстрактні типи даних
Специфікація деяких мов програмування навмисно розпливчаста про подання деяких вбудованих типів даних, визначаючи тільки ті операції, які можуть бути зроблені на них. Таким чином, ці типи можна розглядати як «вбудовані АТД». Прикладами є масиви в багатьох сценарних мовах, таких як Awk, Lua, і Perl, які можна розглядати як реалізацію абстрактного списку.
Див. також
Примітки
- Порівняно з представленням цілих в абстрактній алгебрі.
Зноски
- Rudolf Lidl (2004). Abstract Algebra. Springer. ISBN ., Chapter 7,section 40.
- . Hiring | Upwork (амер.). 5 травня 2015. Архів оригіналу за 28 жовтня 2016. Процитовано 28 жовтня 2016.
- Stevens, Al (March 1995). . . Архів оригіналу за 1 лютого 2012. Процитовано 31 січня 2015.
- D. Thalmann, N. Magnenat Thalmann (1979). Design and Implementation of Abstract Graphical Data Types. IEEE., Proc. 3rd International Computer Software and Applications Conference (COMPSAC'79), IEEE, Chicago, USA, pp.519-524
- Robert Sedgewick (1998). Algorithms in C. Addison/Wesley. ISBN ., definition 4.4.
Література
- ; (July 1988). (PDF). ACM Transactions on Programming Languages and Systems. 10 (3). doi:10.1145/44501.45065. Архів оригіналу (PDF) за 17 травня 2017. Процитовано 11 грудня 2016.
- ; Zilles, Stephen (1974). Programming with abstract data types. Proceedings of the ACM SIGPLAN symposium on Very high level languages. с. 50—59. doi:10.1145/800233.807045.
- Dale, Nell; Walker, Henry M. (1996). Abstract Data Types: Specifications, Implementations, and Applications. Jones & Bartlett Learning. ISBN .
Ця стаття потребує додаткових для поліпшення її . (березень 2016) |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Abstraktnij tip danih ATD ce matematichna model dlya tipiv danih de tip danih viznachayetsya povedinkoyu semantikoyu z tochki zoru koristuvacha danih a same v terminah mozhlivih znachen mozhlivih operacij nad danimi cogo tipu i povedinki cih operacij Vsya vnutrishnya struktura takogo tipu zahovana vid rozrobnika programnogo zabezpechennya v comu i polyagaye sut abstrakciyi Abstraktnij tip danih viznachaye nabir funkcij nezalezhnih vid konkretnoyi realizaciyi tipu dlya operuvannya jogo znachennyami Konkretni realizaciyi ATD nazivayutsya strukturami danih V programuvanni abstraktni tipi danih zazvichaj podayutsya u viglyadi interfejsiv yaki prihovuyut vidpovidni realizaciyi tipiv Programisti pracyuyut z abstraktnimi tipami danih viklyuchno cherez yih interfejsi oskilki realizaciya mozhe v majbutnomu zminitisya Takij pidhid vidpovidaye principu inkapsulyaciyi v ob yektno oriyentovanomu programuvanni Silnoyu storonoyu ciyeyi metodiki ye same prihovuvannya realizaciyi Raz zovni opublikovanij tilki interfejs to poki struktura danih pidtrimuye cej interfejs vsi programi sho pracyuyut iz zadanoyu strukturoyu abstraktnim tipom danih budut prodovzhuvati pracyuvati Rozrobniki struktur danih namagayutsya ne zminyuyuchi zovnishnogo interfejsu i semantiki funkcij postupovo dopracovuvati realizaciyi pokrashuyuchi algoritmi po shvidkosti nadijnosti i vikoristovuvanoyi pam yati Riznicya mizh abstraktnimi tipami danih i strukturami danih yaki realizuyut abstraktni tipi mozhna poyasniti na nastupnomu prikladi Abstraktnij tip danih spisok mozhe buti realizovanij za dopomogoyu masivu abo linijnogo spisku z vikoristannyam riznih metodiv dinamichnogo vidilennya pam yati Odnak kozhna realizaciya viznachaye odin i toj zhe nabir funkcij yakij povinen pracyuvati odnakovo po rezultatu a ne za shvidkistyu dlya vsih realizacij Abstraktni tipi danih dozvolyayut dosyagti modulnosti programnih produktiv i mati kilka alternativnih vzayemozaminnih realizacij okremogo modulya PrikladiNapriklad cili chisla ce abstraktnij tip danih yakij viznachayetsya yak znachennya 2 1 0 1 2 i povoditsya vidpovidno do zvichnoyi matematiki z uvagoyu pro cilochiselne dilennya za dopomogoyu operacij dodavannya vidnimannya mnozhennya i dilennya a takozh operaciyi bilshe nizh menshe nizh i t d nezalezhno vid togo yak cili chisla predstavleni za dopomogoyu komp yutera Ochevidno sho povedinka vklyuchaye v sebe rizni aksiomi asociativnist i komutativnist skladannya i t d i umovi za operaciyami ne mozhe diliti na nul Zazvichaj cili chisla predstavleni v strukturi danih u viglyadi dvijkovih chisel najchastishe yak dopovnyalnij kod ale mozhe buti dvijkovo desyatkovij kod abo obernenij kod ale koristuvach abstraguyetsya vid konkretnogo viboru uyavlennya i mozhe prosto vikoristovuvati ci dani u viglyadi cilih chisel ATD skladayetsya ne tilki z operacij ale i znachen pochatkovih danih i obmezhen na operaciyi Interfejs yak pravilo stosuyetsya lishe operacij i mozhlivo deyakih z obmezhen na operaciyi zokrema poperedni umovi i postumovi ale ne inshi obmezhennya taki yak vidnosini mizh operaciyami Napriklad abstraktnij stek yakij maye LIFO strukturu mozhe buti viznachenij za dopomogoyu troh operacij PUSH kotra vstavlyaye element danih v stek POP yaka vidalyaye element danih z nogo i PEEK abo TOP yaka otrimuye dostup do elementu danih v vershini steka bez vidalennya Abstraktna cherga yaka maye FIFO strukturu takozh bude mati tri operaciyi ENQUEUE yaka vstavlyaye element danih v chergu DEQUEUE yaka vidalyaye pershij element danih z nogo i FRONT sho otrimuye dostup i sluzhit pershim elementom danih v cherzi Tam ne bulo b niyakoyi mozhlivosti diferenciyuvati ci dva tipi danih yaksho matematichne obmezhennya ne vvoditsya todi ce dlya steka vkazuye sho kozhna POP zavzhdi povertaye najostannishij vtisnutij element yakij she ne viskochiv Pri analizi efektivnosti algoritmiv yaki vikoristovuyut steki mozhna takozh vkazati sho vsi operaciyi ne prijmayut toj zhe samij chas nezalezhno vid togo skilki elementiv danih buli vitisneni v stek i sho stek vikoristovuye postijnu kilkist shov dlya kozhnogo elementa VstupAbstraktni tipi danih ce chisto teoretichni ob yekti yaki vikoristovuyutsya mizh inshim dlya sproshennya opisu abstraktnih algoritmiv takozh dlya klasifikaciyi ta ocinki strukturi danih i formalnogo opisu sistem tipiv mov programuvannya Prote ATD mozhut buti realizovani za dopomogoyu pevnih tipiv danih abo struktur danih u bagatoh vidnoshennyah i v bagatoh movah programuvannya abo opisani v formalnij movi specifikaciyi ATD chasto realizuyutsya u viglyadi moduliv interfejs modulya ogoloshuye proceduri yaki vidpovidayut operaciyam ATD inodi z komentaryami yaki opisuyut obmezhennya Cya strategiya prihovuvannya informaciyi dozvolyaye realizaciyi modulya buti zminenoyu bez porushennya kliyentskih program Termin Abstraktnij Tip Danih takozh mozhna rozglyadati yak uzagalnenij pidhid ryadu algebrichnih struktur takih yak reshitki grupi i kilcya Ponyattya abstraktnih tipiv danih pov yazane z ponyattyam abstrakciyi danih ce vazhlivo v ob yektno oriyentovanomu programuvannya ta metodologiyi proektuvannya za kontraktom na rozrobku programnogo zabezpechennya Viznachennya abstraktnogo tipu danihAbstraktnij tip danih viznachayetsya yak matematichna model ob yektiv danih yaki stanovlyat tip danih a takozh funkciyi yaki pracyuyut na cih ob yektah Tam nemaye standartnih konvencij dlya viznachennya yih Shirokij podil mozhe buti provedenij mizh imperativnimi i funkcionalnim stiliv viznachennya Viznachennya imperativnogo stilyu U filosofiyi imperativnih mov programuvannya abstraktna struktura danih zadumana yak sutnist yaka ye zminnim ce oznachaye sho vin mozhe perebuvati v riznih stanah v riznij chas Deyaki operaciyi mozhut zminiti stan ATD takim chinom poryadok v yakomu ocinyuyutsya operaciyi maye vazhlive znachennya i ta zh sama operaciya na odnih i tih zhe sub yektah mozhut mati rizni efekti yaksho vikonuyutsya v riznij chas tak samo yak instrukciyi komp yutera abo komandi i proceduri imperativnoyi movi Shob pidkresliti cyu tochku zoru prijnyato kazati sho operaciyi vikonuyutsya abo zastosovuyutsya ne stilki skilki ocinyuyutsya Imperativnij stil chasto vikoristovuyetsya pri opisi abstraktnih algoritmiv Divitsya Mistectvo programuvannya Donalda Knuta dlya otrimannya bilsh dokladnoyi informaciyi Abstraktna zminna Viznachennya imperativnogo stilyu ATD chasto zalezhat vid ponyattya abstraktnoyi zminnoyi yaku mozhna rozglyadati yak najprostishij netrivialnij ATD Abstraktna zminna V ye zminnij ob yekt yakij dopuskaye dvi operaciyi store V h de h ye znachennya neviznachenogo harakteru fetch V sho daye znachennya z tim obmezhennyam sho fetch V zavzhdi povertaye znachennya h kotre vikoristovuyutsya v samij ostannij operaciyi store V h na tij zhe samij zminnoyi V Yak i v bagatoh movah programuvannya operaciya store V x chasto pishetsya V x abo deyaki analogichni poznachennya i fetch V mayetsya na uvazi kozhen raz koli zminna V vikoristovuyetsya v konteksti de potribno znachennya Tak napriklad V V 1 zazvichaj rozumiyetsya yak skorochennya dlya store V fetch V 1 U comu viznachenni neyavno peredbachayetsya sho zberezhennya znachennya v zminnu U ne robit niyakogo vplivu na stan okremoyi zminnoyi V Dlya togo shob zrobiti ce pripushennya yavnim mozhna bulo b dodati sho obmezhennya yaksho U i V ye rizni zminni to poslidovnist store U x store V y ekvivalentna poslidovnosti store V y store U x U bilsh zagalnomu plani pri viznachenni ATD chasto pripuskayut sho bud yaka operaciya yaka zminyuye stan odnogo ekzemplyara ATD ne robit niyakogo vplivu na stan bud yakogo inshogo ekzemplyaru v tomu chisli inshih ekzemplyariv odnogo i togo zh ATD hiba tilki aksiomi ATD ne oznachayut sho dva ekzemplyari pov yazani psevdonimami v comu sensi Napriklad pri rozshirenni viznachennya abstraktnoyi zminnoyi shob vklyuchiti abstraktni strukturi operaciya yaka vibiraye pole z strukturoyu zminnoyi R povinen dati zminnu V yaka ye psevdonimom do tiyeyi chastini R Oznachennya abstraktnoyi zminnoyi V mozhe takozh obmezhiti zapisani znachennya x chleniv pevnoyi mnozhini X nazivayetsya diapazon abo tip V Yak i v movah programuvannya taki obmezhennya mozhut sprostiti opis i analiz algoritmiv a takozh polipshiti yih chitanist Zvernit uvagu sho ce viznachennya nichogo ne govorit pro rezultat ocinki fetch V koli V ye ne inicializovana tobto pered vikonannyam bud yakoyi operaciyi zberezhennya na V Algoritm yakij robit ce yak pravilo vvazhayetsya nedijsnim oskilki jogo efekt ne viznachenij Prote ye deyaki vazhlivi algoritmi efektivnist yakih znachnoyu miroyu zalezhit vid pripushennya sho taka vibirka ye zakonnoyu i povertaye deyake dovilne znachennya v diapazoni zminnoyi Stvorennya ekzemplyara Deyakim algoritmam neobhidno stvoryuvati novi ekzemplyari deyakogo ATD napriklad novi zminni abo novi steki Dlya opisu takih algoritmiv vin yak pravilo vklyuchaye v ATD viznachennya operaciyi Create yakij daye ekzemplyar ATD yak pravilo z aksiom ekvivalentnih rezultat operaciyi Create vidriznyayetsya vid bud yakogo ekzemplyaru yaki vikoristovuyetsya algoritmom Cya aksioma mozhe buti posilena shob viklyuchiti takozh chastkove nakladennya spektriv z inshimi ekzemplyarami Z inshogo boku cya aksioma dosi dozvolyaye realizaciyi operaciyi Create otrimati ranishe stvorenij ekzemplyar yakij stav nedostupnim dlya programi Priklad abstraktnij stek imperativnij stil Yak inshij priklad viznachennya abstraktnogo steka imperativnim stilem mozhe vkazati sho stan steka S mozhe buti zminenij tilki za dopomogoyu operacij push S x de h deyake znachennya neviznachenogo harakteru pop S sho nadaye znachennya yak rezultat z tim obmezhennyam sho Dlya bud yakogo znachennya h i bud yakoyi abstraktnoyi zminnoyi V poslidovnist operacij push S x V pop S ekvivalentna operaciyi V x Tak yak privlasnennya V x za viznachennyam ne mozhe zminiti stan S cya umova oznachaye sho V pop S vidnovlyuye S v stan vin mav do operaciyi push S x Z ciyeyi umovi i z vlastivostej abstraktnih zminnih to ce oznachaye napriklad sho poslidovnist push S x push S y U pop S push S z V pop S W pop S de h u ta z ye bud yaki znachennya a U V W poparno rizni zminni ekvivalentno U y V z W x Pri comu neyavno peredbachayetsya sho operaciyi na ekzemplyari steka ne zminyuyut stan bud yakogo inshogo ekzemplyaru ATD v tomu chisli inshih stekiv a same Dlya bud yakih znachen x y a takozh bud yakih riznih stekiv S i T poslidovnist push S x push T y ekvivalentna poslidovnosti push T y push S x Abstraktne viznachennya steka zazvichaj vklyuchaye v sebe takozh bulevu funkciyu empty S i operaciyu create yaka povertaye ekzemplyar steka z aksiom ekvivalentnih create S dlya bud yakogo steka S novostvorenij stek vidriznyayetsya vid usih poperednih stekiv empty create novostvorenij stek porozhnij not empty push S x zashtovhuyuchi shos v stek robit jogo nepustim Stil odnogo ekzemplyaru Inodi ATD viznachayetsya tak yakbi tilki odin jogo ekzemplyar isnuvav pid chas vikonannya algoritmu i vsi operaciyi buli zastosovani do cogo ekzemplyaru yakij yavno ne zapisanij Napriklad abstraktnij stek yakij vkazano vishe mozhe buti viznachenij z operaciyami push x ta pop yaki pracyuyut na yedinomu isnuyuchomu steku Viznachennya ATD v comu stili mozhna legko perepisati shob viznati sho kilka ekzemplyariv ATD spivisnuyut shlyahom dodavannya yavnogo parametra ekzemplyaru napriklad S v poperednomu prikladi dlya kozhnoyi operaciyi yaka vikoristovuye abo zminyuye neyavne ekzemplyar Z inshogo boku deyaki ATD ne mozhut buti viznacheni za znachennyam ne pripuskayuchi dekilkoh ekzemplyariv Ce toj vipadok koli odna operaciya prijmaye dva riznih ekzemplyara ADT yak parametri Dlya prikladu rozglyanemo dopovnyuyuchi viznachennya abstraktnogo steka z operaciyeyu compare S T yaka pereviryaye chi steki S i T mistyat odni j ti zh elementi v tomu zh poryadku Viznachennya funkcionalnogo stilyu Inshij sposib viznachennya ATD blizhche do duhu funkcionalnogo programuvannya ce rozglyadati kozhen stan strukturi yak okremu sutnist Z ciyeyi tochki zoru bud yaka operaciya yaka zminyuye ATD modelyuyetsya yak matematichna funkciya yaka prijmaye starij stan yak argument i povertaye novij stan yak chastinu rezultatu Na vidminu vid imperativnih operacij ci funkciyi ne mayut pobichnih efektiv Takim chinom poryadok v yakomu voni ocinyuyutsya nesuttyevij i ta zh operaciya zastosovuyetsya do tih zhe argumentiv v tomu chisli i tih zhe vhidnih staniv zavzhdi bude povertati ti zh rezultati i vihidni stani U funkcionalnomu podanni zokrema ne isnuye niyakogo sposobu abo neobhidnosti shob viznachiti abstraktne zminnu z semantikoyu imperativnih zminnih a same z operaciyami fetch i store Zamist togo shob zberigati znachennya v zminnih vin peredaye yih yak argumenti funkciyi Priklad abstraktnij stek funkcionalnij stil Napriklad povne viznachennya abstraktnogo steka u funkcionalnomu stili mozhe vikoristovuvati tri operaciyi push prijmaye stan steka i dovilne znachennya povertaye stan steka top prijmaye stan steka povertaye znachennya pop prijmaye stan steka povertaye stan steka U viznachenni funkcionalnogo stilyu nemaye neobhidnosti v operaciyi stvorennya Spravdi ne isnuye ponyattya ekzemplyar steku Stek staniv mozhna rozglyadati yak potencijni stani yedinoyi strukturi steka a dva stanu steka yaki mistyat odni i ti zh znachennya v tomu zh poryadku vvazhayutsya odnakovimi stanami Cya tochka zoru faktichno vidobrazhaye povedinku deyakih konkretnih realizacij takih yak zv yazani spiski z hesh minusami Zamist operaciyi create viznachennya abstraktnogo steka u funkcionalnomu stili mozhe pripustiti isnuvannya osoblivogo stanu steka porozhnogo steka yakij poznachayetsya specialnim simvolom yak L abo abo viznachiti operaciyu bottom yaka ne prijmaye argumentiv i povertaye cej osoblivij stan steka Zauvazhimo sho aksiomi mayut na uvazi sho push L x L U viznachenni steka u funkcionalnomu stili nemaye potrebi u predikati empty zamist nogo mozhna pereviriti chi ye stek porozhnij shlyahom testuvannya chi dorivnyuye stek L Zvernit uvagu sho ci aksiomi ne viznachayut diyu top s abo pop s yaksho s ne ye stanom steka povertayetsya operaciyeyu push Tak yak operaciya push zalishaye stek ne porozhnim todi ci dvi operaciyi ne viznacheni i otzhe nespromozhni pri s L Z inshogo boku aksiomi i vidsutnist pobichnih efektiv slid sho push s x push t y todi j lishe todi koli x y ta s t Yak i v deyakih inshih galuzyah matematiki prijnyato vvazhati takozh sho stek staniv tilki ti chiye isnuvannya mozhe buti dovedeno z aksiom v kinceve chislo krokiv V prikladi abstraktnogo steku zaznachenij vishe ce pravilo oznachaye sho kozhen stek ce kinceva poslidovnist znachen yaka staye porozhnim stekom L pislya kincevogo chisla viklikiv operaciyi pop Sami po sobi aksiomi ne viklyuchayut isnuvannya neskinchennih stekiv na kotrih operaciyu pop mozhna viklikati neskinchenu kilkist raz shorazu otrimuyuchi inshij stan abo krugovi steki yaki povertayutsya v toj zhe stan pislya kincevogo chisla viklikiv operaciyi pop Zokrema voni ne viklyuchayut stani S taki sho pop s s abo push s x s dlya deyakogo h Odnak tak yak nihto ne mozhe otrimati takij stek staniv iz zadanimi operaciyami voni vvazhayutsya ne isnuyuchimi Chi slid vklyuchati skladnist Krim povedinki z tochki zoru aksiom mozhna takozh vklyuchiti v viznachenni operaciyi ATD yih algoritmichnoyi skladnosti Oleksandr Stepanov dizajner standartnoyi biblioteki shabloniv C vklyucheni garantiyi skladnosti v specifikaciyi STL argumentuyuchi Prichina vvedennya ponyattya abstraktnih tipiv danih bulo dozvoliti vzayemozaminnist programnih moduliv Vi ne mozhete mati zminni moduli yaksho ci moduli ne podilyayut podibnu povedinku skladnosti Yaksho zaminiti odin modul inshim modulem z tiyeyu zhe funkcionalnoyu povedinkoyu ale z riznimi kompromisami skladnosti koristuvach cogo kodu bude nepriyemno zdivovanij Ya mig bi skazati jomu sho nebud sho meni podobayetsya abstrakciyi danih i vin do cih pir ne hotiv bi vikoristovuvati kod Skladnist tverdzhennya mayut buti chastinoyu interfejsu Oleksandr StepanovPerevagi abstraktnih tipiv danihInkapsulyaciya Abstrakciya zobov yazuyetsya sho bud yaka realizaciya ATD maye pevni vlastivosti i zdibnosti znati yih ce vse sho potribno shob vikoristovuvati ob yekt ATD Koristuvach ne potrebuye bud yakih tehnichnih znan pro te yak zdijsnyuyetsya robota nad ATD shob yih vikoristovuvati Lokalizaciya zmin Kod yakij vikoristovuye ob yekt ATD ne potribno bude redaguvati yaksho realizaciya ATD zminilasya Oskilki bud yaki zmini v realizaciyi yak i ranishe povinni vidpovidati interfejsu a tak yak kod z vikoristannyam ob yektu ATD mozhe vidnositisya tilki do vlastivostej i zdibnostej zaznachenih v interfejsi mozhut buti zrobleni zmini v realizaciyi pri comu ne vimagayuchi bud yakih zmin v kodi de vikoristovuyetsya ATD Gnuchkist Rizni varianti realizaciyi ATD mayut vsi ti zh vlastivosti i zdibnosti kotri ekvivalentni i mozhut buti vikoristani yak vzayemozaminni v kodi yakij vikoristovuye ATD Ce daye veliku gnuchkist pri vikoristanni ob yektiv ATD v riznih situaciyah Napriklad rizni realizaciyi ATD mozhut buti bilsh efektivnim v riznih situaciyah mozhna vikoristovuvati kozhen z nih v situaciyi koli vin ye krashim zbilshuyuchi takim chinom zagalnu efektivnist Tipovi operaciyiDeyaki operaciyi yaki chasto vkazani dlya ATD mozhlivo pid inshimi nazvami ye compare s t sho pereviryaye chi ye ekvivalentni v deyakomu sensi dva stani ekzemplyariv hash s yaka obchislyuye deyaki standartni gesh funkciyi zi stanu ekzemplyariv print s abo show s yaka viroblyaye zruchnij dlya chitannya predstavlennya stanu ekzemplyaru U viznachenni ATD v imperativnomu stili takozh mozhlivo znajti create sho daye novij ekzemplyar ATD initialize s sho gotuye novij stvorenij ekzemplyar s dlya podalshih operacij abo skidaye jogo v yakijs pochatkovij stan copy s t sho stavit ekzemplyar s u stan ekvivalentnij stanu ekzemplyara t clone t yakij vikonuye s create copy s t i povertaye s free s abo destroy s sho zvilnyaye pam yat ta inshi resursi kotri vikoristovuyutsya ekzemplyarom s Operaciya free zazvichaj ne aktualna abo nemaye sensu oskilki ATD ce teoretichni ob yekti yaki ne vikoristovuyut pam yat Prote ce mozhe buti neobhidno koli neobhidno proanalizuvati shovishe sho vikoristovuyetsya algoritmom yakij vikoristovuye ATD U comu vipadku potribno dodatkovi aksiomi yaki viznachayut skilki pam yati kozhen ekzemplyar ATD vikoristovuye v zalezhnosti vid jogo stanu i skilki pam yati povertayetsya v pul pri vikoristanni operaciyi free PrikladiDeyaki zagalni ATD yaki doveli svoyu korisnist v najriznomanitnishih dodatkah Kontejner Spisok Mnozhina Multimnozhina tip danih Map asociativnij masiv slovnik en Ob yektnij graf Stek Cherga Cherga z prioritetom Dvobichna cherga Dvostoronnya cherga z prioritetom Kozhen z cih ATD mozhe buti viznachena riznimi sposobami i variantami ne obov yazkovo ekvivalentnimi Napriklad abstraktnij stek mozhe abo ne mozhe mati operaciyu pidrahunku yaka govorit skilki elementiv buli dobavleni i she ne vidaleni Cej vibir robit vidminnist ne tilki dlya svoyih kliyentiv ale i dlya realizaciyi Abstraktnij grafichnij tip danih Rozshirennya ATD dlya komp yuternoyi grafiki bulo zaproponovano v 1979 roci abstraktnij tip grafichnih danih AGDT Vono bulo vvedeno Nadiyeyu Magnenat Telmann i Danielem Telmann AGDT zabezpechuye perevagi ATD zi zruchnostyami dlya pobudovi grafichnih ob yektiv v strukturovanomu viglyadi RealizaciyaRealizaciya ATD oznachaye zabezpechennya odniyeyi proceduri abo funkciyi dlya kozhnoyi abstraktnoyi operaciyi Ekzemplyari ADT predstavleni bud yakoyu konkretnoyu strukturoyu danih yaka manipulyuye cimi procedurami vidpovidno do specifikaciyi ATD Yak pravilo isnuye bagato sposobiv realizuvati toj zhe ATD z vikoristannyam dekilkoh riznih konkretnih struktur danih Tak napriklad abstraktnij stek mozhe buti realizovanij za dopomogoyu zv yazanogo spisku abo masivom Dlya togo shob zapobigti kliyentiv vid zalezhnosti vid realizaciyi ATD chasto upakovanij v viglyadi neprozorogo tipu danih v odnomu abo dekilkoh modulyah chij interfejs mistit tilki pidpis kilkist i tipi parametriv i rezultativ vid operacij Realizaciya modulya a same tila procedur i konkretna struktura danih yaka vikoristovuyetsya todi mozhut buti prihovani vid bilshosti kliyentiv modulya Ce daye mozhlivist zminiti realizaciyu ne zachipayuchi kliyentiv Yaksho realizaciya piddayetsya vplivu vidomo zamist cogo yak prozorij tip danih Pri realizaciyi ATD kozhen ekzemplyar v terminah imperativnogo stilyu abo kozhne stan v terminah funkcionalnogo stilyu yak pravilo predstavlenij deskriptorom yakogos vidu Suchasni ob yektno oriyentovani movi taki yak C i Java pidtrimuyut formu abstraktnih tipiv danih Koli klas vikoristovuyetsya yak tip ce abstraktnij tip yakij vidnositsya do prihovanogo uyavlennya U cij modeli ATD zazvichaj realizuyetsya yak klas i kozhen ekzemplyar ATD yak pravilo ob yekt cogo klasu Interfejs modulya zazvichaj ogoloshuye konstruktori yak zvichajni proceduri i bilshist inshih operacij ATD yak metodi cogo klasu Prote takij pidhid ne legko inkapsulyuvati dekilka reprezentativnih varianti znajdenih v ATD Vona takozh mozhe pidirvati rozshiryuvanosti ob yektno oriyentovanih program U chisto ob yektno oriyentovanoyi programi yaka vikoristovuye interfejsi yak tipi tipi vidnosyatsya do povedinci ne uyavlennyu Priklad realizaciya abstraktnogo steka Yak priklad os realizaciya abstraktnogo steka v movi programuvannya C Imperativnij stil interfejsu Interfejs v imperativnomu stili mozhe buti typedef struct stack Rep stack Rep tip uyavlennya ekzemplyaru steka neprozorij zapis typedef stack Rep stack T tip deskriptor do ekzemplyaru steka neprozorij vkazivnik typedef void stack Item tip znachennya zberezhene v ekzemplyari steka dovilnij adres stack T stack create void stvoryuye novij porozhnij ekzemplyar steka void stack push stack T s stack Item x dodaye element na vershinu steka stack Item stack pop stack T s vidalyaye verhnij element zi steka i povertaye jogo bool stack empty stack T s pereviryaye porozhnij chi stek Cej interfejs mozhe buti vikoristanij v takij sposib include lt stack h gt pidklyuchaye interfejs steka stack T s stack create stvoryuye novij porozhnij ekzemplyar steka int x 17 stack push s amp x dodaye adresu x na vershinu steka void y stack pop s vidalyaye adresu h zi steka i povertaye jogo if stack empty s robit shos yaksho stek porozhnij Cej interfejs mozhe buti realizovanij riznimi sposobami Realizaciya mozhe buti yak zavgodno neefektivna tak yak formalnogo viznachennya ATD vishe ne viznachaye skilki prostoru steka mozhe vikoristovuvatisya i yak dovgo kozhna operaciya povinna zajnyati Vin takozh ne utochnyuye chi prodovzhuye stek stanu s isnuvati pislya vikliku x pop s Na praktici formalne viznachennya povinno buti zaznacheno sho prostir proporcijno kilkosti elementiv zashtovhanih i she ne vidalenih i sho kozhna z operacij vishe povinna zakinchitisya za postijnu kilkist chasu nezalezhno vid ciyeyi kilkosti Dlya vikonannya cih dodatkovih specifikacij realizaciya mozhe vikoristovuvati zv yazanij spisok abo masiv z dinamichnoyu zminoyu rozmiriv razom z dvoma cilimi chislami kilkist elementiv i rozmir masivu Funkcionalnij stil interfejsu Funkcionalnij stil viznachennya ATD ye bilsh pridatnimi dlya funkcionalnih mov programuvannya i navpaki Prote mozhna zabezpechiti interfejs funkcionalnim stilem navit v imperativnij movi programuvannya yak C Napriklad typedef struct stack Rep stack Rep tip uyavlennya stanu steka neprozorij zapis typedef stack Rep stack T tip deskriptor do stanu steka neprozorij vkazivnik typedef void stack Item tip znachennya stanu steka dovilnij adres stack T stack empty void povertaye porozhnye stan steka stack T stack push stack T s stack Item x dodaye element na vershinu stanu steka i povertaye otrimanij stan steka stack T stack pop stack T s vidalyaye verhnij element zi stanu steka i povertaye otrimanij stan steka stack Item stack top stack T s povertaye verhnij element stanu steka Biblioteki ATD Bagato suchasnih mov programuvannya taki yak C i Java postavlyayutsya zi standartnimi bibliotekami yaki realizuyut kilka zagalnih ATD takih yak ti yaki pererahovani vishe Vbudovani abstraktni tipi danih Specifikaciya deyakih mov programuvannya navmisno rozplivchasta pro podannya deyakih vbudovanih tipiv danih viznachayuchi tilki ti operaciyi yaki mozhut buti zrobleni na nih Takim chinom ci tipi mozhna rozglyadati yak vbudovani ATD Prikladami ye masivi v bagatoh scenarnih movah takih yak Awk Lua i Perl yaki mozhna rozglyadati yak realizaciyu abstraktnogo spisku Div takozh en Formalni metodi en Uzagalnenij algebrichnij tip danih F algebra Princip pidstanovki Liskov Teoriya tipiv en Spisok Stek Cherga struktura danih Asociativnij masiv Cherga z prioritetomPrimitkiPorivnyano z predstavlennyam cilih v abstraktnij algebri ZnoskiRudolf Lidl 2004 Abstract Algebra Springer ISBN 81 8128 149 7 Chapter 7 section 40 Hiring Upwork amer 5 travnya 2015 Arhiv originalu za 28 zhovtnya 2016 Procitovano 28 zhovtnya 2016 Stevens Al March 1995 Arhiv originalu za 1 lyutogo 2012 Procitovano 31 sichnya 2015 D Thalmann N Magnenat Thalmann 1979 Design and Implementation of Abstract Graphical Data Types IEEE Proc 3rd International Computer Software and Applications Conference COMPSAC 79 IEEE Chicago USA pp 519 524 Robert Sedgewick 1998 Algorithms in C Addison Wesley ISBN 0 201 31452 5 definition 4 4 Literatura July 1988 PDF ACM Transactions on Programming Languages and Systems 10 3 doi 10 1145 44501 45065 Arhiv originalu PDF za 17 travnya 2017 Procitovano 11 grudnya 2016 Zilles Stephen 1974 Programming with abstract data types Proceedings of the ACM SIGPLAN symposium on Very high level languages s 50 59 doi 10 1145 800233 807045 Dale Nell Walker Henry M 1996 Abstract Data Types Specifications Implementations and Applications Jones amp Bartlett Learning ISBN 978 0 66940000 7 Cya stattya potrebuye dodatkovih posilan na dzherela dlya polipshennya yiyi perevirnosti Bud laska dopomozhit udoskonaliti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Zvernitsya na storinku obgovorennya za poyasnennyami ta dopomozhit vipraviti nedoliki Material bez dzherel mozhe buti piddano sumnivu ta vilucheno berezen 2016