Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "Абстрактный" и "НЕ абстрактный" типы данных, В чём разница? 
:(
    Опции темы
ДокторТуамОсес
Дата 3.1.2011, 13:27 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 242
Регистрация: 8.6.2009

Репутация: -4
Всего: -12



У некоторых авторов книг по C++ встречал такую мысль, что "абстрактный тип данных" - это любой производный (т.е. не базовый) тип, определённый программистом.

Т.е. получается, к примеру:

Код

typedef int* P[12] ;

что тип P - это "абстрактный тип данных"?

Или как?
--------------------
"Извините! А это ничего, что я говорю в тот момент, когда Вы меня перебиваете?"™ 
PM MAIL   Вверх
KaraKum
Дата 3.1.2011, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: 1
Всего: 1



Скорее всего под "абстрактным типом данных" имеются в виду шаблоны.
PM MAIL WWW   Вверх
Dem_max
Дата 3.1.2011, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



это значит определенный пользователем тип данных

Код

typedef int* Car[12] ;



--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
KaraKum
Дата 3.1.2011, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: 1
Всего: 1



А что абстрактного в типах данных, определённых пользователем?
PM MAIL WWW   Вверх
Dem_max
Дата 3.1.2011, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



можно допустим так написать
Код

typedef std:string TString;

typedef MyClass NewType;


вот TString и  NewType будет новым типом пользовательских данных




--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
KaraKum
Дата 3.1.2011, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: 1
Всего: 1



Да - новый. Но ничего абстрактного там нет.
PM MAIL WWW   Вверх
ДокторТуамОсес
Дата 3.1.2011, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 242
Регистрация: 8.6.2009

Репутация: -4
Всего: -12



Цитата(KaraKum @ 3.1.2011,  13:32)
Скорее всего под "абстрактным типом данных" имеются в виду шаблоны.

Я у некоторых авторов книг по C++ и на форумах встречал такую мысль, что, де, "абстрактный тип данных" - это любой производный (т.е. не базовый) тип, определённый программистом.

Вторые пишут, что в C++ "абстрактный тип" - это только классы.

Третии пишут, "абстрактные типы" - это списки, очереди, деревья и т.п.

Четвёртые пишут, что "абстрактный тип" - это вообще может быть любым образом
(хоть с помощью макросов) описанный тип, посредством которого реализуется концепция
"абстракции данных"

Мне ближе всего 4-я точка зрения.
--------------------
"Извините! А это ничего, что я говорю в тот момент, когда Вы меня перебиваете?"™ 
PM MAIL   Вверх
KaraKum
Дата 3.1.2011, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: 1
Всего: 1



Ну, как мы недавно убедились, книги могут быть разные.
PM MAIL WWW   Вверх
kemiisto
Дата 3.1.2011, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 2
Всего: 160



Я как-то писал про это дело.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
ДокторТуамОсес
Дата 3.1.2011, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 242
Регистрация: 8.6.2009

Репутация: -4
Всего: -12



Цитата(KaraKum @ 3.1.2011,  14:29)
А что абстрактного в типах данных, определённых пользователем?

Я читал, что люди, понимающие под "абстрактным типом" вообще любой 
производный тип
,апеллируют к тому, что компилятор изначально ничего про них 
не знает (т.е. они как бы не существуют реально), а пользователь всё равно их может 
использовать в программе (естественно после описания) так же как и базовые типы.
Вообщем, как-то так  smile

Добавлено @ 16:50
Цитата(KaraKum @ 3.1.2011,  16:42)
Ну, как мы недавно убедились, книги могут быть разные.

А как пишут в "правильных" книгах , которые написаны реальными/правильными, живущими по "понятиям" пацанами? smile 
Т.е. какая из приведённых мной выше 4-х точек зрения правильная?

Добавлено @ 16:55
Цитата(KaraKum @ 3.1.2011,  14:29)
А что абстрактного в типах данных, определённых пользователем?

А что "абстрактного" во "встроенных абстрактных типах"? (т.е. типах НЕ определяемых пользователем).
Как я выяснил, существуют языки в которые есть встроенные (т.е. базовые) АТД 

Добавлено @ 16:56
Цитата(ДокторТуамОсес @  3.1.2011,  16:40 Найти цитируемый пост)
"абстрактный тип" - это вообще может быть любым образом
(хоть с помощью макросов) описанный тип, посредством которого реализуется концепция
"абстракции данных"

Но тогда встаёт вопрос, что же такое "абстракция данных"?
Тут тоже есть весьма многочисленные разночтения

Это сообщение отредактировал(а) ДокторТуамОсес - 3.1.2011, 16:59
--------------------
"Извините! А это ничего, что я говорю в тот момент, когда Вы меня перебиваете?"™ 
PM MAIL   Вверх
KaraKum
Дата 3.1.2011, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: 1
Всего: 1



Цитата(ДокторТуамОсес @  3.1.2011,  17:46 Найти цитируемый пост)
А что "абстрактного" во "встроенных абстрактных типах"? (т.е. типах НЕ определяемых пользователем).

В том и дело что ничего.
Среди возможностей самого языка С++, связанных с абстрагированием, я вижу лишь шаблоны - с ними осуществляется работа вне зависимости от того какими конкретно данными (типами) они являются. Обычно в таком случае нужно лишь знать размер данных.

Добавлено через 2 минуты и 41 секунду
Абстракция данных - Бьерн Страуструп
Судя заданному жаргону - это написал "реальный пацан".
PM MAIL WWW   Вверх
ДокторТуамОсес
Дата 3.1.2011, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 242
Регистрация: 8.6.2009

Репутация: -4
Всего: -12



Цитата(ДокторТуамОсес @ 3.1.2011,  16:46)
Цитата(KaraKum @ 3.1.2011,  14:29)
А что абстрактного в типах данных, определённых пользователем?

Я читал, что люди, понимающие под "абстрактным типом" вообще любой 
производный тип
,апеллируют к тому, что компилятор изначально ничего про них 
не знает (т.е. они как бы не существуют реально), а пользователь всё равно их может 
использовать в программе (естественно после описания) так же как и базовые типы.
Вообщем, как-то так  smile

Или ещё к тому, что некоторые типы вообще не "привязаны" ни к какой переменной.

Например коде

Код

typedef int* P ;
typedef P* P2 ;
P2 p = 0; 



не существует переменных типа P и тип P используется
только для построения на его основе других типов.
--------------------
"Извините! А это ничего, что я говорю в тот момент, когда Вы меня перебиваете?"™ 
PM MAIL   Вверх
KaraKum
Дата 3.1.2011, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: 1
Всего: 1



typedef существует лишь для удобства печатания, чтобы каждый раз при объявлении переменной не писать сложные конструкции типа "unsigned long long int", а просто:
Код

typedef unsigned long long int int64
int64 myLongInteger = 18 446 744 073 709 551 616;

И, вообще, это равносильно следующему:
Код

#define int64 unsigned long long int
int64 theSame;

но во втором случае нужно быть осторожным с контекстом.
PM MAIL WWW   Вверх
mes
Дата 3.1.2011, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(ДокторТуамОсес @  3.1.2011,  12:27 Найти цитируемый пост)
У некоторых авторов книг по C++ встречал такую мысль, что "абстрактный тип данных" -

АТД - это не термин C++.. читайте более обобщенные книги smile 

Цитата(ДокторТуамОсес @  3.1.2011,  12:27 Найти цитируемый пост)
Т.е. получается, к примеру:...
что тип P - это "абстрактный тип данных"?

нет, не получается.. 

Цитата(ДокторТуамОсес @  3.1.2011,  15:40 Найти цитируемый пост)
Я у некоторых авторов книг по C++ и на форумах встречал такую мысль, что, де, "абстрактный тип данных" - это любой производный (т.е. не базовый) тип, определённый 
программистом.

нет.. 

Цитата(ДокторТуамОсес @  3.1.2011,  15:40 Найти цитируемый пост)
Вторые пишут, что в C++ "абстрактный тип" - это только классы.

одна из реализаций АТД - это абстрактные классы.. 


Цитата(ДокторТуамОсес @  3.1.2011,  15:40 Найти цитируемый пост)
третии пишут, "абстрактные типы" - это списки, очереди, деревья и т.п.

нет, не так поняли..  при реализации списков, очередей, деревьев, лучше применять "АТД-подход".. 


Цитата(ДокторТуамОсес @  3.1.2011,  15:40 Найти цитируемый пост)
Четвёртые пишут, что "абстрактный тип" - это вообще может быть любым образом
(хоть с помощью макросов) описанный тип, 

да может.. 

Цитата(ДокторТуамОсес @  3.1.2011,  15:40 Найти цитируемый пост)
посредством которого реализуется концепция
"абстракции данных"

ну так .. АТД, это тип реализующий концепцию "абстракции данных" - а вот что это подробно написано в книжках.. только надо выбрать правильные.. 
;)

Добавлено через 1 минуту и 3 секунды
Цитата(ДокторТуамОсес @  3.1.2011,  16:38 Найти цитируемый пост)
Или ещё к тому, что некоторые типы вообще не "привязаны" ни к какой переменной.

при чем тут переменные , если речь о типе ?!  smile 


--------------------
PM MAIL WWW   Вверх
ДокторТуамОсес
Дата 3.1.2011, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 242
Регистрация: 8.6.2009

Репутация: -4
Всего: -12



Цитата(KaraKum @  3.1.2011,  17:19 Найти цитируемый пост)
Среди возможностей самого языка С++, связанных с абстрагированием, я вижу лишь шаблоны

Но это Вы зря.
В с++ много средств, поддерживающих абстракцию: макросы, функции, классы, перегрузка операций,
шаблоны, ....
Ведь абстракция в программировании по сути есть отделение "интерфейса" от "реализации".
Т.е. когда можно использовать ту или иную сущность зная только её интерфейс,
и изменять/выбирать реализацию этой сущности без необходимости менять код, использующий 
эту сущность.

Т.е. абстракция это (ИМХО), если "объяснять на пальцах"(с),
 когда "мухи отдельно, а котлеты отдельно"(с)  smile

Добавлено через 1 минуту и 10 секунд
"Что касается абстракции, то она состоит в отделении ощутимых свойств тел либо от
других их свойств, либо от самих тел, которые ими обладают.
"©  smile 
--------------------
"Извините! А это ничего, что я говорю в тот момент, когда Вы меня перебиваете?"™ 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0608 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.