Абстрактный тип данных Примеры АТД | См. также | Ссылки | НавигацияЛапшин В. А. Абстрактные типы данных в программировании
БитНибблБайтКубитТритТрайтСловоСимвольныйСтроковыйАлгебраический тип данныхобобщённыйКлассТип-произведениеЗаписьКортежСтруктураОбъектОбъединениемеченоеЛогическийНизшийВысшийПолиморфныйФункциональныйПеречисляемыйКоллекцияИсключениеРодМетаклассМонадаСемафорПотокVoid
Типы данныхСтруктуры данныхТеория типов
математическая модельтипов данныхсемантикоймножествопрограммного обеспеченияабстракциифункцийструктурами данныхпрограммированииинтерфейсовинкапсуляцииобъектно-ориентированном программированиисемантикиалгоритмыструктурами данныхсписокмассивадинамического выделения памятимодульности
Абстрактный тип данных
Перейти к навигации
Перейти к поиску
Абстра́ктный тип да́нных (АТД) — это математическая модель для типов данных, где тип данных определяется поведением (семантикой) с точки зрения пользователя данных, а именно в терминах возможных значений, возможных операций над данными этого типа и поведения этих операций.
Формально АТД может быть определен как множество объектов, определяемое списком компонентов (операций, применимых к этим объектам, и их свойств). Вся внутренняя структура такого типа спрятана от разработчика программного обеспечения — в этом и заключается суть абстракции. Абстрактный тип данных определяет набор функций, независимых от конкретной реализации типа, для оперирования его значениями. Конкретные реализации АТД называются структурами данных.
В программировании абстрактные типы данных обычно представляются в виде интерфейсов, которые скрывают соответствующие реализации типов. Программисты работают с абстрактными типами данных исключительно через их интерфейсы, поскольку реализация может в будущем измениться. Такой подход соответствует принципу инкапсуляции в объектно-ориентированном программировании. Сильной стороной этой методики является именно сокрытие реализации. Раз вовне опубликован только интерфейс, то пока структура данных поддерживает этот интерфейс, все программы, работающие с заданной структурой абстрактным типом данных, будут продолжать работать. Разработчики структур данных стараются, не меняя внешнего интерфейса и семантики функций, постепенно дорабатывать реализации, улучшая алгоритмы по скорости, надежности и используемой памяти.
Различие между абстрактными типами данных и структурами данных, которые реализуют абстрактные типы, можно пояснить на следующем примере. Абстрактный тип данных список может быть реализован при помощи массива или линейного списка, с использованием различных методов динамического выделения памяти. Однако каждая реализация определяет один и тот же набор функций, который должен работать одинаково (по результату, а не по скорости) для всех реализаций.
Абстрактные типы данных позволяют достичь модульности программных продуктов и иметь несколько альтернативных взаимозаменяемых реализаций отдельного модуля.
Примеры АТД |
- Список
- Стек
- Очередь
- Ассоциативный массив
- Очередь с приоритетом
См. также |
- Интерфейс программирования приложений
- Объектно-ориентированное программирование
Ссылки |
- Лапшин В. А. Абстрактные типы данных в программировании
Для улучшения этой статьи по информационным технологиям желательно: |
Категории:
- Типы данных
- Структуры данных
- Теория типов
(window.RLQ=window.RLQ||[]).push(function()mw.config.set("wgPageParseReport":"limitreport":"cputime":"0.116","walltime":"0.178","ppvisitednodes":"value":599,"limit":1000000,"ppgeneratednodes":"value":0,"limit":1500000,"postexpandincludesize":"value":35279,"limit":2097152,"templateargumentsize":"value":179,"limit":2097152,"expansiondepth":"value":15,"limit":40,"expensivefunctioncount":"value":3,"limit":500,"unstrip-depth":"value":0,"limit":20,"unstrip-size":"value":0,"limit":5000000,"entityaccesscount":"value":1,"limit":400,"timingprofile":["100.00% 143.291 1 -total"," 71.25% 102.090 1 Шаблон:Rq"," 65.53% 93.898 1 Шаблон:Ambox"," 29.09% 41.690 16 Шаблон:Rq/"," 28.68% 41.091 1 Шаблон:Типы_данных"," 25.97% 37.213 1 Шаблон:Навигационная_таблица"," 16.86% 24.158 1 Шаблон:Rq/sources"," 15.28% 21.902 1 Шаблон:Нет_источника_(сортировка_по_типу)"," 8.01% 11.483 2 Шаблон:Сортировка:_по_странам"," 6.15% 8.807 1 Шаблон:Rq/stub"],"scribunto":"limitreport-timeusage":"value":"0.033","limit":"10.000","limitreport-memusage":"value":1266572,"limit":52428800,"cachereport":"origin":"mw1326","timestamp":"20190307120813","ttl":2592000,"transientcontent":false););"@context":"https://schema.org","@type":"Article","name":"u0410u0431u0441u0442u0440u0430u043au0442u043du044bu0439 u0442u0438u043f u0434u0430u043du043du044bu0445","url":"https://ru.wikipedia.org/wiki/%D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%82%D0%BD%D1%8B%D0%B9_%D1%82%D0%B8%D0%BF_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85","sameAs":"http://www.wikidata.org/entity/Q827335","mainEntity":"http://www.wikidata.org/entity/Q827335","author":"@type":"Organization","name":"Contributors to Wikimedia projects","publisher":"@type":"Organization","name":"u0424u043eu043du0434 u0412u0438u043au0438u043cu0435u0434u0438u0430","logo":"@type":"ImageObject","url":"https://www.wikimedia.org/static/images/wmf-hor-googpub.png","datePublished":"2005-12-27T08:01:06Z","dateModified":"2017-08-15T14:03:31Z","headline":"u0442u0438u043f u0434u0430u043du043du044bu0445, u043au043eu0442u043eu0440u044bu0439 u043fu0440u0435u0434u043eu0441u0442u0430u0432u043bu044fu0435u0442 u0434u043bu044f u0440u0430u0431u043eu0442u044b u0441 u044du043bu0435u043cu0435u043du0442u0430u043cu0438 u044du0442u043eu0433u043e u0442u0438u043fu0430 u043eu043fu0440u0435u0434u0435u043bu0451u043du043du044bu0439 u043du0430u0431u043eu0440 u0444u0443u043du043au0446u0438u0439, u0430 u0442u0430u043au0436u0435 u0432u043eu0437u043cu043eu0436u043du043eu0441u0442u044c u0441u043eu0437u0434u0430u0432u0430u0442u044c u044du043bu0435u043cu0435u043du0442u044b u044du0442u043eu0433u043e u0442u0438u043fu0430 u043fu0440u0438 u043fu043eu043cu043eu0449u0438 u0441u043fu0435u0446u0438u0430u043bu044cu043du044bu0445 u0444u0443u043du043au0446u0438u0439"(window.RLQ=window.RLQ||[]).push(function()mw.config.set("wgBackendResponseTime":135,"wgHostname":"mw1275"););