А>Авторы: А>Артем Голубев
А>Аннотация: А>Описание нестандартных, с точки зрения ООП, особенностей Delphi
а в чем особонность то? ну грязный хак! нормальные люди если им не нужны переменные класса пишут class function и не вводят никого в заблуждение!
то что внутрях Self переприсваиваешь, так у меня после включения оптимизатора тоже есть такие строки (ну не можем мы от него отказаться).
вобщем статьи нет, но врядли я ее буду сильно ждать.
в двух словах:
класс — это список функций ассоциированный с именем класса (на стадии компиляции)
экземпляр класса — это указатель на начало данных класса
если тебе не нужны данные — то какая тебе разница внутри функции куда указывает Self!
Best regards,
Oleg A. Bachin
Re: Нельзя, но можно в Delphi, или аномалии Delphi и почему
АГ>Авторы: АГ>Артем Голубев
АГ>Аннотация: АГ>Описание нестандартных, с точки зрения ООП, особенностей Delphi
ты всего лишь создал объект в статической памяти и использовал его. это допустимо и было еще в 7-ом турбо паскале. ничего нового здесь нет и в турбопаскалевских учебниках расписан весь этот механизм.
--
Каратаев Владимир.
Re[2]: Нельзя, но можно в Delphi, или аномалии Delphi и поче
>ты всего лишь создал объект в статической памяти
Как ты себе это представляешь с class? Object-объекты (старого стиля) можно разместить в статической памяти — но никак не объекты нового стиля (class).
> это допустимо и было еще в 7-ом турбо паскале. ничего нового здесь нет и в турбопаскалевских учебниках расписан весь этот механизм.
Угу, только в 7м паскале не было объектов нового стиля.
Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re: Нельзя, но можно в Delphi, или аномалии Delphi и почему
Я бы сказал, крайне неудачное название, из-за чего и идут наезды на статью По сути, речь идет не о каких-то аномалиях (то, что расписано в хелпе, на мой взгляд, уже не аномалия, если только это явление не является абсолютно уникальным среди ОО-языков). Речь идет о пояснении реализации объектов в Delphi: выделении памяти, вызове методов и т.п. По-хорошему, следовало бы так статью и назвать и дать более полное раскрытие этой темы в смысле реализации именно в Delphi (где расположена VMT и с чем ее едят, чем dynamic отличается от virtual, какие различия у объектов старого и нового стиля, как берется интерфейс от объекта, почему, хотя VMT совместима по внутреннему формату с таблицей методов интерфейса и наследование идет только от одного класса, интерфейсный указатель от объекта может отличаться от адреса объекта — и т.д. и т.п.). Только про все это уже в разных местах написано, пусть даже везде понемногу, — не знаю, стоит ли огород городить.
АГ>Аннотация: АГ>Описание нестандартных, с точки зрения ООП, особенностей Delphi
Так-таки и с точки зрения ООП? С точки зрения ООП все в порядке. Видимость внутри модуля — неявный Friend, который уже можно считать наполовину входящим в современные представления об ООП. А уж вызов метода несозданного объекта — никакое ООП не помешает тебе прострелить себе ногу, если очень захочешь
Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re[3]: Нельзя, но можно в Delphi, или аномалии Delphi и поче
SM>Как ты себе это представляешь с class? Object-объекты (старого стиля) можно разместить в статической памяти — но никак не объекты нового стиля (class).
Поправка Разумеется, извратом можно — через перекрытие NewInstance, например. А простым созданием — нельзя.
Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re: Нельзя, но можно в Delphi, или аномалии Delphi и почему
Здравствуйте, Артем Голубев, Вы писали:
АГ>Получается, что все методы в объекте – это почти методы классов (Class methods, в терминологии Delphi), за исключением параметра Self! Т. е. разница между ними только в синтаксисе вызова и в неявном параметре.
Я конечно могу ошибаться, но если мне не изменяет память, то Self для class методов указывает на метакласс.
Re[2]: Нельзя, но можно в Delphi, или аномалии Delphi и поче
АГ>>Авторы: АГ>>Артем Голубев
АГ>>Аннотация: АГ>>Описание нестандартных, с точки зрения ООП, особенностей Delphi
_>ты всего лишь создал объект в статической памяти и использовал его. это допустимо и было еще в 7-ом турбо паскале. ничего нового здесь нет и в турбопаскалевских учебниках расписан весь этот механизм.
а что, придумали механизмы как в делфях на стеке объекты создавать?
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Best regards,
Oleg A. Bachin
Re: Нельзя, но можно в Delphi, или аномалии Delphi и почему
АГ>Авторы: АГ>Артем Голубев
АГ>Аннотация: АГ>Описание нестандартных, с точки зрения ООП, особенностей Delphi
Книги читать нужно автору.
Согласно стандартам работает Делфи.
К написанию статей автора не допускать!
Re: Нельзя, но можно в Delphi, или аномалии Delphi и почему
От:
Аноним
Дата:
22.06.05 18:10
Оценка:
Доброго времени суток!
Хотелось бы обратиться к авторам предыдущих комментариев: имхо, вы напрасно так наезжаете на автора. Человек нашел любопытный факт, я, например, этого не знал... Другое дело, что этот факт если и интересен, то только с теоретической точки зрения, я что-то сильно сомневаюсь, что такая ситуация встретится на практике (вызов метода несозданного объекта) — если объявил объектную переменную, то сразу же пиши соответствующие Create/Free, это по-моему уже рефлекс.
Re[2]: Нельзя, но можно в Delphi, или аномалии Delphi и поче
Здравствуйте, <Аноним>, Вы писали:
А>Доброго времени суток!
А>Хотелось бы обратиться к авторам предыдущих комментариев: имхо, вы напрасно так наезжаете на автора. Человек нашел любопытный факт, я, например, этого не знал... Другое дело, что этот факт если и интересен, то только с теоретической точки зрения, я что-то сильно сомневаюсь, что такая ситуация встретится на практике (вызов метода несозданного объекта) — если объявил объектную переменную, то сразу же пиши соответствующие Create/Free, это по-моему уже рефлекс.
есть реальное применение и я об этом уже писал здесь. просто
1. это серьезная вещь, а автов ее излагал довольно таки по-детски
2. тема не раскрыта даже на половину
3. нет никаких ограничений (а их валом!!!!).
и т.д...
я так понимаю, что статья написана методом научного тыка — потому и такое название. в реальности, изучив немного основы, все становится на свои места и появляются ньюансы.
поясню. автор нигде не написал что это должна быть статический метод. хорошо, я возьму виртуальный... что имеем?
а имеем вот что: во время компиляции было определено что это у меня пятый метод. значит я должен взять виртуальную таблицу методов, взять пятый и его вызвать. если же он nil, то берем его из предка и т.д. остается одна мелочь — определить класс созданного объекта. именно СОЗДАННОГО, а не задекларированного. берем 4 байта перед Self — они содержат указатель на наш класс. упс, обломс... 0 — 4 прядли содержит указатель на то что хотел автор. и это не последний ньюанс.
PS давно хотел написать нормальную статью по этому поводу, но нет времени, а сейчас еще и херней нагрузили, сорри.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Best regards,
Oleg A. Bachin
Re[3]: Нельзя, но можно в Delphi, или аномалии Delphi и поче
в догонку...
читать статью крайне не рекомендуется! автор просто не знает теории, не знает терминологии и не понимает основ.
чего стоит хотябы:
Теперь давайте сфокусируемся на методе класса:
.............
Он содержит одну локальную переменную, память под которую опять же выделяется при компиляции класса!
это ж бред! при какой компиляции выделяется память!? неужели можно допускать статьи от людей не отличающих класс от инстанса!?
уж и не знаю куда смотрит уважаема редакция чтоб такое пропустить еще и в печать.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Best regards,
Oleg A. Bachin
Re[4]: Нельзя, но можно в Delphi, или аномалии Delphi и поче
Здравствуйте, Odi$$ey, Вы писали:
OE>Здравствуйте, Oleg A. Bachin, Вы писали:
OAB>>уж и не знаю куда смотрит уважаема редакция чтоб такое пропустить еще и в печать.
OE>должны же у нас быть хоть какие-то недостатки
так может тогда форум переименовать humor-near_delphi?
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Best regards,
Oleg A. Bachin
Re[5]: Нельзя, но можно в Delphi, или аномалии Delphi и поче