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

Поиск:

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


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


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

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



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

тут два варианта либо Вы не правильно  поняли, что имели ввиду стороники, либо сами стороники  - выбирайте кто не прав сами smile



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


Опытный
**


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

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



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

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

Какие нестандартные операции?
Я знаю только сложение и деление.

Добавлено через 41 секунду
Ой, сравнение ещё забыл и сдвиг.
PM MAIL WWW   Вверх
mes
Дата 3.1.2011, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(KaraKum @  3.1.2011,  17:23 Найти цитируемый пост)
Вот так можно создать "переменную" без типа:

она с типом  - указатель на void .. smile 



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


Бывалый
*


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

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



Цитата(mes @  3.1.2011,  18:18 Найти цитируемый пост)
ух как.. а почему именно переменной,а не постоянной ? smile

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


Опытный
**


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

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



Цитата(mes @ 3.1.2011,  19:25)
Цитата(KaraKum @  3.1.2011,  17:23 Найти цитируемый пост)
Вот так можно создать "переменную" без типа:

она с типом  - указатель на void .. smile

"void" переводится как пустота. Хотя тип указателя, конечно, присутствует - его можно сложить, поделить и даже подвигать  smile 
PM MAIL WWW   Вверх
ДокторТуамОсес
Дата 3.1.2011, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

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

Ну тогда дайте определение понятия "Тип" (в контексте C++) не используя 
понятия "переменная" (и его синонимов !!! ) smile

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

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

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


Опытный
**


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

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



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

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

Ну тогда дайте определение понятия "Тип" (в контексте C++) не используя 
понятия "переменная" (и его синонимов !!! ) smile

Ну так я же дал: "количество байт в памяти и адреса функций в сегменте кода" - сколько синонимов "переменной" я употребил?
PM MAIL WWW   Вверх
kemiisto
Дата 3.1.2011, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



Цитата(KaraKum @  3.1.2011,  16:28 Найти цитируемый пост)
Ну так я же дал: "количество байт в памяти и адреса функций в сегменте кода" - сколько синонимов "переменной" я употребил?

Это в корне неверное определение. 

Даже в Педивикии очень ничего 
Цитата
Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям и, возможно, способ реализации хранения значений и выполнения операций.


Это сообщение отредактировал(а) kemiisto - 3.1.2011, 18:31


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


Опытный
**


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

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



Цитата(kemiisto @ 3.1.2011,  19:30)
Цитата(KaraKum @  3.1.2011,  16:28 Найти цитируемый пост)
Ну так я же дал: "количество байт в памяти и адреса функций в сегменте кода" - сколько синонимов "переменной" я употребил?

Это в корне неверное определение. 

Даже в Педивикии очень ничего 
Цитата
Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям и, возможно, способ реализации хранения значений и выполнения операций.

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


Бывалый
*


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

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



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

Согласен.
Но в "строгой теории" говорят, что ещё нужно указать "аксиомы, задающие свойства этих функций"(с)

Т.е. мало описать что, де, есть операция '+','-','*','/'.
Надо ещё указать "аксиомы", которым эти операции подчиняются.
К примеру, что А + B = B + A

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

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

void* variable = malloc(4);

Как это "без типа".
У неё есть тип "указатель на void".
И ТОЛЬКО благодаря наличию у переменной типа компилятор знает:
1) Какое внутреннее представление в памяти имеет переменная (в частности её sizeof)
2) В каких операциях/функциях можно юзать эту переменную как операнд
3) Множество доп. значений этой переменной

Повторяю, понятие "тип" тесно связано с понятием "переменная"

Добавлено через 6 минут и 55 секунд
Цитата(Batbko @  3.1.2011,  18:41 Найти цитируемый пост)
Не успеваю за нитью разговора ибо биланй модем :( 

Дык я аналогично.
На "джЫ Эп Эр Эс"-е  сижу 
Отключите скрипты, картинки и т.п.
Мне таким образом удалось снизить размер загружаемой страницы с 300..500кБ до 5..7кБ  smile 
--------------------
"Извините! А это ничего, что я говорю в тот момент, когда Вы меня перебиваете?"™ 
PM MAIL   Вверх
Batbko
Дата 3.1.2011, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не успеваю за нитью разговора ибо биланй модем :( но :
Шаблоны позволяют абстрагироваться от конкретного типа данных, но не от реализации и предоставляют возможность создавать обобщённые типы, а абстрактные типы, как Я считаю, должны давать возможность абстрагироваться от способа работы с данными, т.е от реализации.

Хотя все зависит от чего собираешься абстрагироваться smile, если, например, от способа определения типа данных то и шаблоны и typedef вполне подходящий инструмент но ни одно из этих средств не позволяет получить абстракный тип данных. 
К слову об определении типа данных, если не городить сложных определений, то это совокупность струтуры данных и операций возможных над этими данными, переменные, а тем более переменные с++ тут совсем ни при чеё. Переменная это способ обьявить именованную ссылку на экземпляр типа данных.
PM MAIL   Вверх
Batbko
Дата 3.1.2011, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(ДокторТуамОсес @  3.1.2011,  18:41 Найти цитируемый пост)
Надо ещё указать "аксиомы", которым эти операции подчиняются.К примеру, что А + B = B + A


Эту семантику определяет конкретная реализация средства для описания абстрактных типов.

В случае компилятора с++ семантика поведения операторов, такая как коммутативность или приоритет, заранее определена в компиляторе и пользователь не имеет средст её изменить, что и делает её аксиомой. С функциями та же история - есть четкие правила, описываемые при задании сигнатуры функции.


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


Бывалый
*


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

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



Цитата(Batbko @  3.1.2011,  18:41 Найти цитируемый пост)
а абстрактные типы, как Я считаю, должны давать возможность абстрагироваться от способа работы с данными, т.е от реализации.

Ну да.
ИМХО механизм абстрактных типов данных должен позволять описывать типы данных
только через описание интерфейсов допустимых операций над данными данного типа
 (простите за тавтологию) и свойств этих операций.

Т.е. к примеру как-то так (здесь я исп. синтаксис некоего абстр. языка, а не C++):

Код

type T {
  operator + ( x, y) ; // описали абстрактную операцию
  x + y = y + x ;    // Описали свойство операции
}


Добавлено через 10 минут и 49 секунд
Чёта форум что-ли глючит?
Мой ответ Batbko как-то оказался выше его сообщения  smile 
--------------------
"Извините! А это ничего, что я говорю в тот момент, когда Вы меня перебиваете?"™ 
PM MAIL   Вверх
ДокторТуамОсес
Дата 3.1.2011, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Batbko @ 3.1.2011,  18:51)
Цитата(ДокторТуамОсес @  3.1.2011,  18:41 Найти цитируемый пост)
Надо ещё указать "аксиомы", которым эти операции подчиняются.К примеру, что А + B = B + A


Эту семантику определяет конкретная реализация средства для описания абстрактных типов.

В случае компилятора с++ семантика поведения операторов, такая как коммутативность или приоритет, заранее определена в компиляторе и пользователь не имеет средст её изменить, что и делает её аксиомой. С функциями та же история - есть четкие правила, описываемые при задании сигнатуры функции.

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


Опытный
**


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

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



Для компилятора нет понятия "абстрактных типов данных".
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.0604 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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