Понятие абстрактного типа данных

177
18 апреля 2019, 14:40

К сожалению, не смог найти на просторах глобальной сети подходящего для меня объяснения этого понятия. Когда заходит речь об абстрактных типах данных (АТД), то многие путают их с абстрактными классами (речь идёт о программистах из сообщества языка программирования Java), что совершенно не одно и то же. Для меня крайне важно понимать такие базовые понятия, как АТД, так как они являются фундаментальными и из них вытекают такие ключевые концепции ООП, как класс. Ведь если начать разбираться, то любой класс в Java является абстрактным типом данных, поставляемым с полной или частичной реализацией.

Из того, что мне удалось понять, под АТД подразумевается некоторое абстрактное множество данных и допустимых операций на них. Но это чересчур размытая формулировка, которая не даёт полного представления о данном понятии. Если следовать ей, то можно приравнять АТД к интерфейсам (хоть интерфейс и является в общем случае АТД, но это, отнюдь, не взаимозаменяемые понятия).

В общем, если можно, то объясните что же это такое на каких-нибудь относительно простеньких примерах. Буду всем крайне благодарен!

Answer 1

Абстрактный тип данных это скорее математическое и где-то даже философское понятие.

Есть такая историческая байка

Однажды ученики древнегреческого философа Сократа завели диспут на тему что такое человек, Сократ выслушав все мнения учеников высказал свою знаменитую сентенцию:

Человек - это птица на двух ногах без перьев

Один из учеников, не будь дураком, желая посрамить философа, тут же притащил ощипанную курицу, Сократ презрительно осмотрев курицу выдал:

забыл добавить, с плоскими ногтями

К чему это я. К тому что в данном случае философ был прав, поскольку он давал определение понятию через его свойства/операции. АТД и есть в данном случае понятие определяемое через его операции - это некая модель.

Например, что такое птицы - птицы это некие существа, которые могут летать. В смысле программирования, если множество выполняет операцию летать - значит это птица, ну или в смысле Java:

class Птица implements Летающее {
}

С точки зрения программирования абстрактный класс является реализацией АТД (одной из реализаций).

Например

АТД - стек. Стек это модель данных, в котором элементы, организованы по принципу LIFO, то есть данные можно или вытащить верхний или протолкнуть следующий.

В программировании Stack абстрактный класс с двумя методами push()/pop()

READ ALSO
Что такое LayoutInflater.inflate() в Android?

Что такое LayoutInflater.inflate() в Android?

Смотрел туториал по разработке приложения на Андроид и в теме ArrayAdapter, ListView такой код

146
Зачем нужен массив Class[]

Зачем нужен массив Class[]

К примеру я создал массив

150
Передача нужного URL на WebView

Передача нужного URL на WebView

У меня есть несколько кнопок находящихся на фрагменте и один WebView находящийся на активитиФункция этих кнопок в моём представлении в том чтобы...

183