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

Поиск:

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


Новичок



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

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



IMHO абстрактный тип данных, тот который определяет какие операции могут выполняться над экземплярами этого типа но не предоставляет конкретной реализации этих операций, только семантику.
Т.е в контексте с++ это любой класс имеющий хотя бы один чисто виртуальный метод.
PM MAIL   Вверх
KaraKum
Дата 3.1.2011, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Здесь, скорее всего, идёт речь про общие принципы ООП, а не конкретно С++.
PM MAIL WWW   Вверх
ДокторТуамОсес
Дата 3.1.2011, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(KaraKum @ 3.1.2011,  17:43)
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;

но во втором случае нужно быть осторожным с контекстом.

Я же Вам привёл пример (хоть несколько корявый, но тем не менее), что
когда с помощью typedef вводятся идентификаторы типов,
которые ВООБЩЕ не используются при "объявлениях переменной",
а используются только для конструирования других типов smile 
--------------------
"Извините! А это ничего, что я говорю в тот момент, когда Вы меня перебиваете?"™ 
PM MAIL   Вверх
KaraKum
Дата 3.1.2011, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


Бывалый
*


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

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



Цитата(mes @  3.1.2011,  17:49 Найти цитируемый пост)
при чем тут переменные , если речь о типе ?!  smile  

А что такое "тип"? Ведь "тип" - это сокращённое обозначение термина "тип переменной".
А тип переменной определяет:
1) Множество значений, которые может принимать переменная
2) Множество доп. операций/функций, в которых переменная может выступать операндом
3) Внутреннее представление текущего значения переменной в памяти

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


Опытный
**


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

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



"Тип" для С++ - это информация о том сколько байт в памяти занимает переменная, созданная как этот тип, а также какие действия выполнять при стандартных операциях (операторы "+", "-", "*", ...).
Для структур и классов (в С++ это одно и тоже кроме "public") это ещё информация о том где в сегменте кода искать функции-элементы классов.
Всё остальное от лукавого...

Добавлено через 2 минуты и 58 секунд
Вот так, например, можно к строке прибавить число 5:
Код

char* pureString = "I will be increased by five! Oh God!";
(*(int*)pureString) += 5;


Добавлено через 3 минуты и 48 секунд
Это чтобы развеять непонятные предрассудки вроде "привязка типа к переменной" и т.д....
PM MAIL WWW   Вверх
ДокторТуамОсес
Дата 3.1.2011, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

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

Просто я опустил (для краткости) выделенные слова:
Изначально у меня в голове фраза звучала так: 
"У некоторых авторов книг, статей и монографий по C++, 
другим ЯВУ и по программированию вообще ..."
Но я решил абстрагироваться от выделенных слов  smile

Добавлено через 4 минуты и 3 секунды
Цитата(Batbko @  3.1.2011,  17:54 Найти цитируемый пост)
IMHO абстрактный тип данных, тот который определяет какие операции могут выполняться над экземплярами этого типа но не предоставляет конкретной реализации этих операций, только семантику.

Ваше ИМХО весьма близко к моему ИМХО  smile 

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


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


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

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



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

как это конструирование типов ?  в контексте С++.. 




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


Бывалый
*


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

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



Цитата(KaraKum @  3.1.2011,  17:59 Найти цитируемый пост)
Цитата(ДокторТуамОсес @  3.1.2011,  17:57 Найти цитируемый пост)
Я же Вам привёл пример (хоть несколько корявый, но тем не менее), что
когда с помощью typedef вводятся идентификаторы типов,
которые ВООБЩЕ не используются при "объявлениях переменной",
а используются только для конструирования других типов smile  

Ну и что? Нет разницы. 

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

Так как можно установить прямые связи между реальными (базовыми) типами
и кусками кода компилятора, за них отвечающими.
А для абстрактных типов такой прямой связи нет.

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


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


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

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



Цитата(ДокторТуамОсес @  3.1.2011,  17:03 Найти цитируемый пост)
А что такое "тип"? Ведь "тип" - это сокращённое обозначение термина "тип переменной"

ух как.. а почему именно переменной,а не постоянной ? smile

Добавлено через 1 минуту и 5 секунд
Цитата(ДокторТуамОсес @  3.1.2011,  17:03 Найти цитируемый пост)
Как видите во всех 3-х пунктах определения типа фигурирует слово "переменная"    

Ну так это Вы просто неправильно сформулировали.. больше ничего "полезного" не вижу smile



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


Бывалый
*


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

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



Цитата(KaraKum @  3.1.2011,  18:04 Найти цитируемый пост)
"Тип" для С++ - это информация о том сколько байт в памяти занимает переменная

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


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


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

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



Цитата(KaraKum @  3.1.2011,  17:04 Найти цитируемый пост)
ип" для С++ - это информация о том сколько байт в памяти занимает переменная, созданная как этот тип, а также какие действия выполнять при стандартных операциях (операторы "+", "-", "*", ...).

а при нестандартных операциях, чем определяется ?



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


Опытный
**


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

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



Цитата(ДокторТуамОсес @  3.1.2011,  19:18 Найти цитируемый пост)
"абстрактный тип данных" - это любой производный (т.е. не базовый) тип, определённый программистом.

Нет такого подхода.


Цитата(ДокторТуамОсес @  3.1.2011,  19:18 Найти цитируемый пост)
Так как можно установить прямые связи между реальными (базовыми) типами
и кусками кода компилятора, за них отвечающими.

Не существует "кусков кода компилятора" ибо не существует "кода компилятора".
PM MAIL WWW   Вверх
mes
Дата 3.1.2011, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(ДокторТуамОсес @  3.1.2011,  17:20 Найти цитируемый пост)
Вот видите? Опять всплыло слово "переменная"   
Что и требовалось доказать: что есть прямая связь между понятием "тип" и понятием "переменная" 

все селедки - рыбы, но не все рыбы селедки.. ©
так что судить по всплывшей селедке о всех рыбах, как минимум не корректно .. 




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


Опытный
**


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

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



Цитата(ДокторТуамОсес @  3.1.2011,  19:20 Найти цитируемый пост)
Что и требовалось доказать: что есть прямая связь между понятием "тип" и понятием "переменная" 

Вот так можно создать "переменную" без типа:
Код

void* variable = malloc(4);

PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0599 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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