![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Класс объекта
Kos[UFO] © (2006-08-19 02:34:00)Господа программисты, с одним человеком который считает семя хакером у меня возник спор:
Что такое КЛАСС?
Этот уважаемый человек твердит, что класс это указатель. Тем самым опровергая, какое либо отношение методов и свойств класса к понятию класса. Что, по моему мнению, полный бред.
Я считаю:
Класс объекта или просто класс – это специальный тип данных, что описывает свойства и методы объекта. Можно и по другому, но точно не указатель.
Рассудите нас пожалуйста честно и справедливо.
tesseract (2006-08-19 20:05:00) [21]> [28] default © (19.08.06 20:02)
Согласен, но не pointer, а область памяти.
default (2006-08-19 20:02:00) [22]Юрий Зотов © (19.08.06 19:07) [21]
я знаю, что в VMT в Delphi напихано ещё всякой всячины и эта VMT есть потому и у всех
но я смотрел на VMT в её прямом назначении, обеспечить косвенный вызов методов(полиморфизм), а то что туда разработчики Delphi напихали это уже не прямое назначение VMT
а вообще я могу всё назвать указателем!(следую аналогии с классом)
могу сказать, что дерево - это 4 байтовый поинтер! матрица - поинтер! почему кто-то спросит, скажу так ак указывает на область памяти где размещены элементы матрицы:)и тд это идеологический бред
tesseract (2006-08-19 19:57:00) [23]> если Ваши классы усегда в памяти - поздравляю.
Класс не находящийся в памяти, не существует, ибо не создан. Является частью файла, т.е. частью куска озаглавленной информации.
Юрий Зотов (2006-08-19 19:55:00) [24]> Сервисный инженер (19.08.06 19:52) [25]
> Почему только мне тогда замечание?
Извините, но Вы читаете невнимательно. Оно как раз не к Вам относилось.
Сервисный инженер (2006-08-19 19:52:00) [25]> [24] tesseract © (19.08.06 19:31)
> Если судить по посту, фиговый из Вас инженер. "Класс" во
> первых не на винте, а в памяти. Во-вторых запись на винчестере
> сильно "модулирована" и на "пупыршки" не тянет.
фиговый или нет - не Вам судить, учитывая количество информации, на основании которой Вы умудрились сделать вывод.
если Ваши классы усегда в памяти - поздравляю.
про пупырышки на винте вообще не говорилось, "пост прочтите" (с).
Как сильно модулирована запись - мне пофиг. Я упростил модель. Но Вы можете придраться, что и пупырышки совсем не пупырышки.
> [21] Юрий Зотов © (19.08.06 19:07)
> "Про Delphi" указано в названии форума. Этого мало?
Почему только мне тогда замечание?
tesseract (2006-08-19 19:31:00) [26]> [18] Сервисный инженер (19.08.06 17:59)
Если судить по посту, фиговый из Вас инженер. "Класс" во первых не на винте, а в памяти. Во-вторых запись на винчестере сильно "модулирована" и на "пупыршки" не тянет.
> [20] default © (19.08.06 18:22)
Ну надо бы было указать, что статических классов в Delphi не бывает.
> VMT и не пахнет
гм, давно хотел выяснить данный вопрос.
> [22] Джо © (19.08.06 19:11)
Я с другой стороны смотрю. Класс - это вид записи, содержащий ссылку на методы работы с данными:-)
Юрий Зотов (2006-08-19 19:22:00) [27]> Джо © (19.08.06 19:11) [22]
Думаю, что не один. Можно заглянуть в сырцы и убедиться, что как минимум, с нами солидарна еще и команда разработчиков Delphi. А как максимум - очевидно, все, кто знаком с реализацией ее объектной модели.
Так что "нас" - тыщи... правда, "их" все равно намного больше.
:о)
Джо (2006-08-19 19:11:00) [28]> [17] Юрий Зотов © (19.08.06 17:16)
> Физически, класс - это константа, содержащая адрес VMT.
> То есть, указатель.
Ну вот, хоть один человек со мной солидарен.
Юрий Зотов (2006-08-19 19:07:00) [29]> default © (19.08.06 18:22) [20]
> в сабже указано про Delphi?
"Про Delphi" указано в названии форума. Этого мало?
> мы говорим вообщем
Можно, конечно, говорить и "вобщем", но в силу несколько различающихся объектных моделей и (особенно!) их реализаций (что, собственно, больше всего и интересует хакера, о точке зрения которого тут речь и идет), это будет разговор ни о чем. От участия в такомразговоре я, с вашего позволения, воздержусь.
> VMT и не пахнет
Загляните в System.pas - думаю, удивитесь. Оказывается, VMT - это далеко не только виртуальные методы. Так что она все равно есть - даже если нет ни одного виртуального метода. По крайней мере, в VCL это так.
default (2006-08-19 18:22:00) [30]Юрий Зотов © (19.08.06 17:16) [17]
"Физически, класс - это константа, содержащая адрес VMT. "
в сабже указано про Delphi?
мы говорим вообщем
допустим иерархия классов имеет только обычные(неперекрываемые)
методы, VMT и не пахнет
Юрий Зотов (2006-08-19 18:04:00) [31]> Сервисный инженер (19.08.06 17:59) [18]
Действительно. Поэтому в следуюший раз, когда мы будем говорить о ВАШЕМ взгляде на класс - вот тогда и поговорим о намагниченности и пупырышках.
Но пока что, в ЭТОЙ ветке, мы говорим о другом. Сабж прочтите.
Сервисный инженер (2006-08-19 17:59:00) [32]> [17] Юрий Зотов © (19.08.06 17:16)
ну а для меня класс, равно как и прочее, это просто намагниченность на блине винта, или пупырышки на компакте.
Юрий Зотов (2006-08-19 17:16:00) [33]Логически, класс - это тип. То есть, информация для компилятора.
Физически, класс - это константа, содержащая адрес VMT. То есть, указатель.
Если рассматривать класс именно с точки зрения хакера, для него гораздо важнее второе.
Для хакеракласс - это прежде всегоуказатель, содержащий адрес почти недокументированной структуры, из которой, пользуясь почти недокументированными методами можно вытащить ценную и почти недокументированную низкоуровневую информацию.
Пусик (2006-08-19 13:48:00) [34]
> И ваш "хакер" сразу посыпит голову пеплом, убъётся головой
> ап стену, одновременно выстрелив себе в голову?
Он просто удавится от твоего остроумия.
Пусик (2006-08-19 13:47:00) [35]Класс - специальная структура, описывающая данные и правила работы с ними. Никакого отношения к указателям.
> Kos[UFO] © (19.08.06 02:34)
"Один человек" (впрочем как и ты) путает объекты как экземпляры некого класса и сами классы.
При создании экземпляра класса также нет никакой необходимости создавать явную ссылку на этот экземпляр. Явная ссылка на объект(экземпляр класса) нужна только в том случае, если необходимо обращаться непосредственно к нему позже при выполнении программы.
Плохиш (2006-08-19 11:48:00) [36]
> Я нашел в трех местах! Но этот уважаемый человек настаивает
> на своем. Вот я и пишу сюда в надежде услышать здравые рассуждения
> от опытных программистов.
И ваш "хакер" сразу посыпит голову пеплом, убъётся головой ап стену, одновременно выстрелив себе в голову?
palva (2006-08-19 11:31:00) [37]DprYg © (19.08.06 11:22) [12]
Хакер это тот, кто использует класс (точнее экземпляр класса) как указатель, и при этом тащится, поскольку узнал про это недавно.
DprYg (2006-08-19 11:22:00) [38]Так что, можно сделать вывод, что "класс" вообще - не указатель. А этот один человек вообще - не хакер.
P.S. Кстати, я несколько раз встречался с разными определениями слова "хакер". Одни под ним подразумевают того, кто делает что-то очень плохое, другие - крутого программиста. Вот так :)
DrPass (2006-08-19 10:24:00) [39]
> Kos[UFO] ©
Класс - это структура в памяти приложения, объединяющая код и данные, с которыми этот код работает. Никоим образом не указатель. Указателем является переменная, которая на этот класс указывает (сорри за тавтологию)
DprYg (2006-08-19 09:47:00) [40]В отличие от BP7 в Delphi нет необходимости при объявлении класса создавать тип-указатель явно. Он неявно происходит от предка. А при ссылке на экземпляр Delphi просто автоматически разыменовывает указатель. Так что ответ на вопрос зависит от того, в каком смысле мы используем термин "класс".