Здравствуйте, ramasha, Вы писали:
SM>> Существуют также объекты старого стиля (object), на которые распространяется многое из вышесказанного, но все-таки не все. R>По поводу "новых" и "старых" стилей, интересно : What is New in the Delphi Compiler — Danny Thorpe
R> -Records don't have inheritance, i.e. no VMT. R> -Records can implement interfaces in .NET but not in Win32.
В 2006-м Delphi пообещали сделать методы для записей под Win32..
Re[6]: Программирование на языке Delphi. Глава 3.
От:
Аноним
Дата:
29.11.05 19:11
Оценка:
Здравствуйте, Slicer [Mirkwood], Вы писали:
SM>Здравствуйте, ekamaloff, Вы писали:
E>>
Object types are supported for backward compatibility only. Their use is not recommended.
SM>Тогда посыпаю голову пеплом. Вот лопухи, record до C++-ного класса так и не дорастили по возможностям, а существующую альтернативу объявили deprecated
Это не недоработка, объектная модель была полностью пересмотрена. Было решено отказаться от value-type объектов. И правильно, иначе теряются все преимущества объектов (расширение типа, виртуальные методы и т.д.). Представьте ситуацию, что объявляется массив из value-type объектов. Вы можете добавить в массив объект производного класса? Вы можете записать такой объект в файл (как вы записываете запись)? Кстати, на платформе .NET value-type объекты отсутствуют. Чувствуется одна и та же рука
Здравствуйте, Slicer [Mirkwood], Вы писали:
SM>Здравствуйте, ekamaloff, Вы писали:
E>>
Object types are supported for backward compatibility only. Their use is not recommended.
SM>Тогда посыпаю голову пеплом. Вот лопухи, record до C++-ного класса так и не дорастили по возможностям, а существующую альтернативу объявили deprecated
Самое интересное что Object types существуют аж с Dephi 1 и отлично работают. Я например встречал обертку
над GDI+ сделанную с использованием этих типов. Типы Point, Color итд сделаны как object (с служебными методами),
их можно размещать с стеке и не возиться с созданием\удалением.
Hello Аноним, you wrote:
> Это не недоработка, объектная модель была полностью пересмотрена. Было решено отказаться от value-type объектов. И правильно, иначе теряются все преимущества объектов (расширение типа, виртуальные методы и т.д.)
Да ну?
Тогда от куда в Борланд Паскале виртуальные методы?
И наследование там тоже было.
> Представьте ситуацию, что объявляется массив из value-type объектов. Вы можете добавить в массив объект производного класса?
Я вместо этого объявлю массив указателей на объекты. И все у меня получится.
Hello Аноним, you wrote:
> Это не недоработка, объектная модель была полностью пересмотрена. Было решено отказаться от value-type объектов. И правильно, иначе теряются все преимущества объектов (расширение типа, виртуальные методы и т.д.)
Да ну?
Тогда от куда в Борланд Паскале виртуальные методы?
И наследование там тоже было.
> Представьте ситуацию, что объявляется массив из value-type объектов. Вы можете добавить в массив объект производного класса?
Я вместо этого объявлю массив указателей на объекты. И все у меня получится.
Hello Аноним, you wrote:
> Это не недоработка, объектная модель была полностью пересмотрена. Было решено отказаться от value-type объектов. И правильно, иначе теряются все преимущества объектов (расширение типа, виртуальные методы и т.д.)
Да ну?
Тогда от куда в Борланд Паскале виртуальные методы?
И наследование там тоже было.
> Представьте ситуацию, что объявляется массив из value-type объектов. Вы можете добавить в массив объект производного класса?
Я вместо этого объявлю массив указателей на объекты. И все у меня получится.
Hello Аноним, you wrote:
> Это не недоработка, объектная модель была полностью пересмотрена. Было решено отказаться от value-type объектов. И правильно, иначе теряются все преимущества объектов (расширение типа, виртуальные методы и т.д.)
Да ну?
Тогда от куда в Борланд Паскале виртуальные методы?
И наследование там тоже было.
> Представьте ситуацию, что объявляется массив из value-type объектов. Вы можете добавить в массив объект производного класса?
Я вместо этого объявлю массив указателей на объекты. И все у меня получится.
Здравствуйте, Аноним, Вы писали:
А> Кстати, на платформе .NET value-type объекты отсутствуют. Чувствуется одна и та же рука
Советую получше ознакомиться с платформой .NET Ключевое слово "value types". Тамошние структуры допускают наследование (хотя полиморфизм ограничен) и инкапсуляцию (могут содержать вместе с данными и методы). Как и old-style objects. Чего часто и не хватает в дельийских record'ах. Имхо, это недоработка. Если бы в дельфях отказались от old-объектов, но улучшили структуры, я бы не жаловался. А так — от одной альтернативы призывают воздерживаться, а другую не обеспечивают.
Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Здравствуйте, Аноним, Вы писали:
А>Это хорошо известно. Все-таки речь шла не о структурах, а о class instances. Ключевой момент — наличие VMT среди полей объекта.
Которое как раз не всегда желательно. Ну и плюс хранение objects в "boxed"-виде, как записей.
Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Здравствуйте, ramasha, Вы писали:
R>-Records don't have inheritance, i.e. no VMT.
Нет VMT <> нет наследования. Правда, "нет VMT" + "нет интерфейсов" = "нет полиморфизма", но наследование уже имевшихся в предке методов все еще возможно. Как фактически обстоит дело в D2006, не знаю.
Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Здравствуйте, Slicer [Mirkwood], Вы писали:
R>>-Records don't have inheritance, i.e. no VMT. SM>Нет VMT <> нет наследования.
Действительно, я это упустил.
Я перевел так: Записи не наследуются т.е. нет VMT. Если я правильно перевел, непонятно почему Danny так написал ?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Программирование на языке Delphi. Глава 3.
От:
Аноним
Дата:
02.12.05 17:05
Оценка:
Здравствуйте, Denis_TST, Вы писали:
D_T>Здравствуйте, Slicer [Mirkwood], Вы писали:
SM>>Здравствуйте, ekamaloff, Вы писали:
E>>>
Object types are supported for backward compatibility only. Their use is not recommended.
SM>>Тогда посыпаю голову пеплом. Вот лопухи, record до C++-ного класса так и не дорастили по возможностям, а существующую альтернативу объявили deprecated D_T>Самое интересное что Object types существуют аж с Dephi 1 и отлично работают. Я например встречал обертку D_T>над GDI+ сделанную с использованием этих типов. Типы Point, Color итд сделаны как object (с служебными методами), D_T>их можно размещать с стеке и не возиться с созданием\удалением.
D_T>Почему их похоронили совершенно не понятно
Старая модель объектов нарушала концептуальную целостность языка программирования.
var
X, Y: T;
begin
...
X := Y;
...
end;
В том случае, если X и Y — value-type objects, непонятно, как должен сработать оператор присваивания (например, не понятно, должно ли выполниться копирование указателя VMT). Проектировщики языка сделали ошибку, но у них хватило смелости ее признать и исправить. Это стало возможным благодаря тому, что не существовало стандарта на язык Borland Pascal (иногда отсутствие стандарта играет положительную роль).
Здравствуйте, Аноним, Вы писали:
А>Старая модель объектов нарушала концептуальную целостность языка программирования.
А>var А> X, Y: T; А>begin А> ... А> X := Y; А> ... А>end;
А>В том случае, если X и Y — value-type objects, непонятно, как должен сработать оператор присваивания (например, не понятно, должно ли выполниться копирование указателя VMT).
Но позвольте — эта операция, тем не менее, выполнялась четко определенным образом Причем присуща она не только BP, но и C++...
Впрочем, разговор ушел в сторону. Предлагаю отделить ветку и отправить в holy wars или еще куда. Факт тот, что борманы уже объявили это дело deprecated, а после драки кулаками не машут.
Slicer
Специалист — это варвар, невежество которого не всесторонне :)