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

Поиск:

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


Бывалый
*


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

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



Цитата(KaraKum @ 3.1.2011,  20:33)
Цитата(mes @  3.1.2011,  21:03 Найти цитируемый пост)
Добавлено через 3 минуты и 9 секунд
Цитата(KaraKum @  3.1.2011,  17:26 Найти цитируемый пост)
"void" переводится как пустота.

то есть если б его назвали бы по другому, то он сразу стал бы типом, а так нет smile

Неверно. Тип "void*" означает, дословно, "указатель на ячейку памяти, где начинаются данные произвольного (неизвестного) типа произвольной длины". В контексте "целочисленная переменная" или "вещественное число" это означает "неизвестность". Вот такие вот пироги...

А в контексте компилятора означает много чего известность.
Как минимум:
1) размер памяти, выделяемой под переменную
2) внутреннее представление ("указатель")
3) множество доп. операций, в которые может входить переменная 
( к примеру нельзя переменной, являющейся указателем на void присвоить
 НЕПОСРЕДСТВЕННО значение типа int)

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


Новичок



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

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



Цитата(mes @  3.1.2011,  20:46 Найти цитируемый пост)
Код

struct A {};
int operator + (A const, int) {
 return 5;
}

int main ()
{
      A a;
      std::cout << (a+5);
//      std::cout << (5+a);
}



оператор не потерял свойство комутативности просто в выражении участвуют операнды для которых не определена верная перегрузка оператора отсюда и ошибка в закоментированном участке кода, которая может быть исправленна использованием outline определения оператора, т.е в качестве свободной функции.

Но не будем о с++.Все ниже написанное это только моё понимание АТД .

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

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

Вот как то так  smile .



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


Бывалый
*


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

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



Цитата(Batbko @ 3.1.2011,  20:34)
IMHO любой полиморфизм, наряду с инкапсуляцией и, в рамка с++ наследованием, есть средства для описания АТД и тесно связаны с самим определением.

Цитата(mes @  3.1.2011,  20:21 Найти цитируемый пост)
если не секрет как ?  можно ссылку перегрузить оператор 

перегрузка оператора никоим образом не позволяет изменить семантику его поведения
так например перегрузка бинарного оператора сложения никогда не заставит перестать сложение быть комутативным.



Цитата(mes @  3.1.2011,  20:03 Найти цитируемый пост)
способ ? ссылку ?
 в общем случае если не проводить параллели с ссылками с++ или какого либо друго ЯП да.

Позволю себе не согласиться.
То что Вы описали - не семантика, а алгебраические свойства операций.
А семантику то как раз поменять можно.

Можно например сделать, чтобы
- для объектов класса Т1 А+В означало действительно сложение в том смысле как мы привыкли
- для объектов класса Т2 А+В означало операцию умножения
--------------------
"Извините! А это ничего, что я говорю в тот момент, когда Вы меня перебиваете?"™ 
PM MAIL   Вверх
mes
Дата 3.1.2011, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Batbko @  3.1.2011,  20:04 Найти цитируемый пост)
оператор не потерял свойство комутативности просто в выражении участвуют операнды для которых не определена верная перегрузка оператора отсюда и ошибка в закоментированном участке кода, 

А кто это решил, что неверная ?! мне именно такое поведение и требовалось.. 
тогда и у потоков операторы >>,<< не правильно перегружены.. не смотряя на то что входят в стандарт smile



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


Бывалый
*


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

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



Цитата(KaraKum @  3.1.2011,  20:35 Найти цитируемый пост)
Нету. И вообще, компьютер с абстракцией не работает. Добро пожаловать в IT. 

Я же просил Вас как человека  smile  
Цитата(ДокторТуамОсес @  3.1.2011,  20:32 Найти цитируемый пост)
Я конечно понимаю, что "краткость - сестра таланта"(с) и прочее, но не могли бы Вы
высказываться более развёрнуто что ли?
А то у меня дома все телепаты в отпуске, а я по короткой обрывочной фразе зачастую не могу
догадаться, что Вы, пардон, имеете в виду.  smile  


А Вы опять всё загадками изъясняетесь.
Каждый Ваш ответ порождает 10 уточняющих вопросов.

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


Опытный
**


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

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



Цитата(ДокторТуамОсес @  3.1.2011,  22:02 Найти цитируемый пост)
1) размер памяти, выделяемой под переменную

Это известно только в момент создания переменной и то если эта переменная создавалась. Указателем на "void" может быть адрес буфера железа (неизвестный размер), параметр для потока (неизвестный размер).

Цитата(ДокторТуамОсес @  3.1.2011,  22:02 Найти цитируемый пост)
2) внутреннее представление ("указатель")

Абсолютно любая переменная является указателем на ячейку памяти.

Цитата(ДокторТуамОсес @  3.1.2011,  22:02 Найти цитируемый пост)
( к примеру нельзя переменной, являющейся указателем на void присвоить
 НЕПОСРЕДСТВЕННО значение типа int)

Можно.

Добавлено через 1 минуту и 38 секунд
Цитата(ДокторТуамОсес @  3.1.2011,  22:10 Найти цитируемый пост)
Каждый Ваш ответ порождает 10 уточняющих вопросов.

Вот именно это я имел в виду под "переворачиванием мировоззрения с ног-на-голову". Звучит слишком громко для такого плёвого дела, но порой некоторые узнают какие-то факты вот с таким лицом:  smile 
PM MAIL WWW   Вверх
ДокторТуамОсес
Дата 3.1.2011, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(KaraKum @  3.1.2011,  20:40 Найти цитируемый пост)
Для того чтобы разобраться в степени понимания этой сути я и показал эквивалентность "typedef" и "define" 

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


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


Новичок



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

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



Цитата(ДокторТуамОсес @  3.1.2011,  21:07 Найти цитируемый пост)
- для объектов класса Т2 А+В означало операцию умножения

но приоритет операции или способ её вызова это не изменит, а будет означать только то что правильной операцией сложения для этих обьектов будет на самом деле их умножение.


Цитата(mes @  3.1.2011,  21:07 Найти цитируемый пост)
А кто это решил, что неверная ?! мне именно такое поведение и требовалось.. 

никто и не решал smile просто не определена операция сложения целого с обьектом класса, от этого комутативность не утеряна и будет сохранена для обьектов этого типа.Возможность получения такой  неоднозначности недостаток ЯП.


Под семантикой я понимаю совокупность правил по которым происходит выполнение операций, а не то что операции должны делать.

Но перегрузки операторов и тому подобные средства, это все элементы конкретного ЯП.





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


Бывалый
*


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

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



Цитата(KaraKum @ 3.1.2011,  20:45)
Похоже в обсуждениях С++ пошли приёмы русского языка.
Выражение
Цитата

перегрузка бинарного оператора сложения никогда не заставит перестать сложение быть комутативным

абсолютно верно и не нужно биться головой об стену в поисках ошибок.

Это верно то верно.
Только вопрос: "А что? Семантика оператора исчерпывается только правилами коммутативности,ассоциативности и приоритета?"  smile

Добавлено через 1 минуту и 41 секунду
Цитата(mes @ 3.1.2011,  20:47)
Цитата(KaraKum @  3.1.2011,  19:45 Найти цитируемый пост)
перегрузка бинарного оператора сложения никогда не заставит перестать сложение быть комутативным

абсолютно верно и не нужно биться головой об стену в поисках ошибок. 

а как же пример, чуть выше этого поста ?

 smile  smile  smile  smile

Добавлено через 6 минут и 26 секунд
Цитата(mes @ 3.1.2011,  20:53)
Код

   auto s = "string";


в общем откуда берется тип у s smile

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


Опытный
**


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

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



Короче, вундеркинды, и kemiisto в их числе со своими отсылками на "в корне неверными суждениями".
Дабы не засорять просторы рунета безосновательным и неконструктивным обсуждением каких-то несуществующих "абстракций" в С++, следует объяснить все "взаимоотношения" между компилятором и пресловутыми "типами переменными". Вот кусочек вселенской мудрости:
Код

//здесь ничего не просиходит в run-tim'e - это просто текстовая информация:
class SomeClass
{
     int someVariable;
     void someFunction();
     int anotherVariable;
};

//здесь происходит выделение памяти в 4 байта:
SomeClass *someClass = new SomeClass;
//здесь совершается отступ в стеке, записывается адрес кода возврата и текущая процессорная команда перепрыгивает на другой участок
someClass->someFunction(); //после вызова функции совершается прыжок по коду возврата - то есть сюда же
//здесь к ячейкам памяти, находящимся со сдвигом в 4 байта от "someClass", прибавляется число 5:
someClass->anotherVariable += 5;


Добавлено @ 21:34
Нет здесь никаких аристотелевских метафизических абстракций.

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


Бывалый
*


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

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



Цитата(mes @ 3.1.2011,  20:55)
Цитата(ДокторТуамОсес @  3.1.2011,  19:53 Найти цитируемый пост)
В приведённом мной примере

никакой тип там не конструируется..

А мне представляется, что конструируется.
Сначала мы из "лексем" [typedef], [int], [*] и [;] "сконструировали тип" P 
А потом из "лексем" [typedef], [*],  [P] и [;] "сконструировали тип" P2
 smile

Добавлено через 4 минуты и 55 секунд
Цитата(KaraKum @ 3.1.2011,  21:13)
Цитата(ДокторТуамОсес @  3.1.2011,  22:02 Найти цитируемый пост)
1) размер памяти, выделяемой под переменную

Это известно только в момент создания переменной и то если эта переменная создавалась. Указателем на "void" может быть адрес буфера железа (неизвестный размер), параметр для потока (неизвестный размер).

И что?

В этом примере:
Код

{
  ...
  char c ;
  std::cin >> c ;
 ...
}

значение переменной c до выполнения программы неизвестно.
Но это вовсе не значит, что у неё нет типа  smile

Добавлено через 8 минут и 23 секунды
Цитата(KaraKum @ 3.1.2011,  21:13)
Цитата(ДокторТуамОсес @  3.1.2011,  22:02 Найти цитируемый пост)
2) внутреннее представление ("указатель")

Абсолютно любая переменная является указателем на ячейку памяти.

Опять загадками говорите?
Вы имеете в виду если рассматривать программу на уровне машинного кода?

Добавлено через 9 минут и 39 секунд
Цитата(KaraKum @ 3.1.2011,  21:13)
Цитата(ДокторТуамОсес @  3.1.2011,  22:02 Найти цитируемый пост)
( к примеру нельзя переменной, являющейся указателем на void присвоить
 НЕПОСРЕДСТВЕННО значение типа int)

Можно.

 smile

Добавлено через 12 минут и 1 секунду
Цитата(KaraKum @ 3.1.2011,  21:13)
Цитата(ДокторТуамОсес @  3.1.2011,  22:10 Найти цитируемый пост)
Каждый Ваш ответ порождает 10 уточняющих вопросов.

Вот именно это я имел в виду под "переворачиванием мировоззрения с ног-на-голову". Звучит слишком громко для такого плёвого дела, но порой некоторые узнают какие-то факты вот с таким лицом:  smile

А Вы не могли вместо "переворачивания мировоззрения с ног-на-голову" просто озвучивать
"факты", которые люди узнают "вот с таким лицом:  smile  "

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


Бывалый
*


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

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



Цитата(Batbko @ 3.1.2011,  21:17)
Цитата(ДокторТуамОсес @  3.1.2011,  21:07 Найти цитируемый пост)
- для объектов класса Т2 А+В означало операцию умножения

но приоритет операции или способ её вызова это не изменит

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

Добавлено через 2 минуты и 11 секунд
Цитата(Batbko @  3.1.2011,  21:17 Найти цитируемый пост)
Под семантикой я понимаю совокупность правил по которым происходит выполнение операций, а не то что операции должны делать.

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


Опытный
**


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

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



Цитата(ДокторТуамОсес @  3.1.2011,  22:34 Найти цитируемый пост)
значение переменной c до выполнения программы неизвестно.

Я сказал размер, а не значение!

Добавлено через 58 секунд
Цитата(ДокторТуамОсес @  3.1.2011,  22:34 Найти цитируемый пост)
А Вы не могли вместо "переворачивания мировоззрения с ног-на-голову" просто озвучивать
"факты

Я их "озвучиваю" - они игнорируются.

Добавлено через 2 минуты и 17 секунд
Цитата(ДокторТуамОсес @  3.1.2011,  22:34 Найти цитируемый пост)
Добавлено через 9 минут и 39 секунд
Цитата(KaraKum @ 3.1.2011,  21:13)
Цитата(ДокторТуамОсес @  3.1.2011,  22:02 Найти цитируемый пост)
( к примеру нельзя переменной, являющейся указателем на void присвоить
 НЕПОСРЕДСТВЕННО значение типа int)

Можно.

 smile

Код

void* whatTheFuckAmIDoingOnThisThread;
int justValue = 5;
whatTheFuckAmIDoingOnThisThread = justValue;


Добавлено через 3 минуты и 27 секунд
Достаточно ли тут НЕПОСРЕДСТВЕННОСТИ? Или чего-то не хватает? Какой-нибудь семантики, аксиоматики, абстрактности, сиплюсплюсности?

Добавлено через 3 минуты и 47 секунд
Или я "в корне не прав"?
PM MAIL WWW   Вверх
ДокторТуамОсес
Дата 3.1.2011, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(KaraKum @  3.1.2011,  21:33 Найти цитируемый пост)
//здесь ничего не просиходит в run-tim'e

Зато в "compile-Time" много чего происходит  smile 
P.S. Всё-таки я обладаю хотя бы в малой степени телепатическими способностями и догадался
по Вашим загадочным фразам, что Вы клоните к тому, что в конечном счёте любая программа это 
не более чем последовательность машинных команд. Но Вы зря на этом пытаетесь меня поймать,
и "в корне перевернуть моё мировоззрение". Я ассемблерщик с более чем 20-ти летним стажем.
Поэтому очень хорошо себя представляю во что превращаются всякие там абстракции
на уровне машинного кода

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


Опытный
**


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

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



Цитата(ДокторТуамОсес @  3.1.2011,  22:58 Найти цитируемый пост)
 в конечном счёте любая программа это 
не более чем последовательность машинных команд

Нет - я такого не хотел сказать и сейчас не говорю.

Это сообщение отредактировал(а) KaraKum - 3.1.2011, 22:04
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.0684 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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