Форум: "Основная";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];
ВнизКласс объекта Найти похожие ветки
← →
Kos[UFO] © (2006-08-19 02:34) [0]Господа программисты, с одним человеком который считает семя хакером у меня возник спор:
Что такое КЛАСС?
Этот уважаемый человек твердит, что класс это указатель. Тем самым опровергая, какое либо отношение методов и свойств класса к понятию класса. Что, по моему мнению, полный бред.
Я считаю:
Класс объекта или просто класс – это специальный тип данных, что описывает свойства и методы объекта. Можно и по другому, но точно не указатель.
Рассудите нас пожалуйста честно и справедливо.
← →
KilkennyCat © (2006-08-19 03:09) [1]Рассуждаю.
Честно и справедливо.
Вы - неправы.
Почему?
Потому что Вы не в состоянии:
1) Прочитать правила этого форума и задать вопрос в соответствующей ветке.
2) Найти определение термина в сети интернет.
3) Спорите с человеком, считающим себя хакером.
← →
Джо © (2006-08-19 03:10) [2]> Этот уважаемый человек твердит, что класс это указатель.
В общем, таки-да, в определенном смысле можно сказать, что это есть указатель.
← →
Kos[UFO] © (2006-08-19 03:44) [3]2KilkennyCat:
1) Почему не в том? Там написано: ОБЩИЕ ВОПРОСЫ. Разве это не общий вопрос? Очень даже в том форуме я задаю вопрос.
2) И это я в состоянии. Я нашел в трех местах! Но этот уважаемый человек настаивает на своем. Вот я и пишу сюда в надежде услышать здравые рассуждения от опытных программистов.
3) А почему нельзя спорить с такими людьми. Он же не на столько глуп, чтобы не воспринимать информацию. Что вы хотите сказать.
Кстати в справки BDS2006 написано:
A class, or class type, defines a structure consisting of fields, methods, and properties. Instances of a class type are called objects.
И ни как не указатель! Не так ли KilkennyCat?
← →
KilkennyCat © (2006-08-19 04:00) [4]> Не так ли KilkennyCat?
Так. По всем пунктам.
← →
Джо © (2006-08-19 04:25) [5]> Kos[UFO] ©
if TMyClass <> nil then
ShowMessageFmt ("%x",[Integer(TMyClass)]);
← →
Kos[UFO] © (2006-08-19 04:59) [6]2Джо:
Ну да мы получим некий адрес. Я даже знаю на что этот указатель. Но это не дает права утверждать, что класс это указатель. Потому, что если принять это определение - то методы, свойства и другая информация о классе не имеют к нему отношения, что хотя бы определению противоречит. А весь класс это каких то 4 байта, получается:(
2KilkennyCat:
Это вопрос здравого рассуждения. А я не ламер, если вы пытаетесь сказать это.
← →
KilkennyCat © (2006-08-19 08:37) [7]> Kos[UFO] © (19.08.06 04:59)
> А я не ламер, если вы пытаетесь сказать это.
Вам показалось. В [4] я действительно согласился с Вами, по всем пунктам.
← →
default © (2006-08-19 09:07) [8]класс это чёртёж объекта
в соответствие с ним вылупляются в жизнь новые объекты
если смотреть уровень реализации, то, например, в том же Turbo Pascal
объекты представляются непосредственно, а не через ссылки на них
← →
default © (2006-08-19 09:09) [9]в C#, например, структуры являются некоторыми специальными классами представленными непосредственно(в состоянии unboxing)
← →
DprYg © (2006-08-19 09:47) [10]В отличие от BP7 в Delphi нет необходимости при объявлении класса создавать тип-указатель явно. Он неявно происходит от предка. А при ссылке на экземпляр Delphi просто автоматически разыменовывает указатель. Так что ответ на вопрос зависит от того, в каком смысле мы используем термин "класс".
← →
DrPass © (2006-08-19 10:24) [11]
> Kos[UFO] ©
Класс - это структура в памяти приложения, объединяющая код и данные, с которыми этот код работает. Никоим образом не указатель. Указателем является переменная, которая на этот класс указывает (сорри за тавтологию)
← →
DprYg © (2006-08-19 11:22) [12]Так что, можно сделать вывод, что "класс" вообще - не указатель. А этот один человек вообще - не хакер.
P.S. Кстати, я несколько раз встречался с разными определениями слова "хакер". Одни под ним подразумевают того, кто делает что-то очень плохое, другие - крутого программиста. Вот так :)
← →
palva © (2006-08-19 11:31) [13]DprYg © (19.08.06 11:22) [12]
Хакер это тот, кто использует класс (точнее экземпляр класса) как указатель, и при этом тащится, поскольку узнал про это недавно.
← →
Плохиш © (2006-08-19 11:48) [14]
> Я нашел в трех местах! Но этот уважаемый человек настаивает
> на своем. Вот я и пишу сюда в надежде услышать здравые рассуждения
> от опытных программистов.
И ваш "хакер" сразу посыпит голову пеплом, убъётся головой ап стену, одновременно выстрелив себе в голову?
← →
Пусик © (2006-08-19 13:47) [15]Класс - специальная структура, описывающая данные и правила работы с ними. Никакого отношения к указателям.
> Kos[UFO] © (19.08.06 02:34)
"Один человек" (впрочем как и ты) путает объекты как экземпляры некого класса и сами классы.
При создании экземпляра класса также нет никакой необходимости создавать явную ссылку на этот экземпляр. Явная ссылка на объект(экземпляр класса) нужна только в том случае, если необходимо обращаться непосредственно к нему позже при выполнении программы.
← →
Пусик © (2006-08-19 13:48) [16]
> И ваш "хакер" сразу посыпит голову пеплом, убъётся головой
> ап стену, одновременно выстрелив себе в голову?
Он просто удавится от твоего остроумия.
← →
Юрий Зотов © (2006-08-19 17:16) [17]Логически, класс - это тип. То есть, информация для компилятора.
Физически, класс - это константа, содержащая адрес VMT. То есть, указатель.
Если рассматривать класс именно с точки зрения хакера, для него гораздо важнее второе.
Для хакера класс - это прежде всего указатель, содержащий адрес почти недокументированной структуры, из которой, пользуясь почти недокументированными методами можно вытащить ценную и почти недокументированную низкоуровневую информацию.
← →
Сервисный инженер (2006-08-19 17:59) [18]> [17] Юрий Зотов © (19.08.06 17:16)
ну а для меня класс, равно как и прочее, это просто намагниченность на блине винта, или пупырышки на компакте.
← →
Юрий Зотов © (2006-08-19 18:04) [19]> Сервисный инженер (19.08.06 17:59) [18]
Действительно. Поэтому в следуюший раз, когда мы будем говорить о ВАШЕМ взгляде на класс - вот тогда и поговорим о намагниченности и пупырышках.
Но пока что, в ЭТОЙ ветке, мы говорим о другом. Сабж прочтите.
← →
default © (2006-08-19 18:22) [20]Юрий Зотов © (19.08.06 17:16) [17]
"Физически, класс - это константа, содержащая адрес VMT. "
в сабже указано про Delphi?
мы говорим вообщем
допустим иерархия классов имеет только обычные(неперекрываемые)
методы, VMT и не пахнет
← →
Юрий Зотов © (2006-08-19 19:07) [21]> default © (19.08.06 18:22) [20]
> в сабже указано про Delphi?
"Про Delphi" указано в названии форума. Этого мало?
> мы говорим вообщем
Можно, конечно, говорить и "вобщем", но в силу несколько различающихся объектных моделей и (особенно!) их реализаций (что, собственно, больше всего и интересует хакера, о точке зрения которого тут речь и идет), это будет разговор ни о чем. От участия в таком разговоре я, с вашего позволения, воздержусь.
> VMT и не пахнет
Загляните в System.pas - думаю, удивитесь. Оказывается, VMT - это далеко не только виртуальные методы. Так что она все равно есть - даже если нет ни одного виртуального метода. По крайней мере, в VCL это так.
← →
Джо © (2006-08-19 19:11) [22]> [17] Юрий Зотов © (19.08.06 17:16)
> Физически, класс - это константа, содержащая адрес VMT.
> То есть, указатель.
Ну вот, хоть один человек со мной солидарен.
← →
Юрий Зотов © (2006-08-19 19:22) [23]> Джо © (19.08.06 19:11) [22]
Думаю, что не один. Можно заглянуть в сырцы и убедиться, что как минимум, с нами солидарна еще и команда разработчиков Delphi. А как максимум - очевидно, все, кто знаком с реализацией ее объектной модели.
Так что "нас" - тыщи... правда, "их" все равно намного больше.
:о)
← →
tesseract © (2006-08-19 19:31) [24]> [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:52) [25]> [24] tesseract © (19.08.06 19:31)
> Если судить по посту, фиговый из Вас инженер. "Класс" во
> первых не на винте, а в памяти. Во-вторых запись на винчестере
> сильно "модулирована" и на "пупыршки" не тянет.
фиговый или нет - не Вам судить, учитывая количество информации, на основании которой Вы умудрились сделать вывод.
если Ваши классы усегда в памяти - поздравляю.
про пупырышки на винте вообще не говорилось, "пост прочтите" (с).
Как сильно модулирована запись - мне пофиг. Я упростил модель. Но Вы можете придраться, что и пупырышки совсем не пупырышки.
> [21] Юрий Зотов © (19.08.06 19:07)
> "Про Delphi" указано в названии форума. Этого мало?
Почему только мне тогда замечание?
← →
Юрий Зотов © (2006-08-19 19:55) [26]> Сервисный инженер (19.08.06 19:52) [25]
> Почему только мне тогда замечание?
Извините, но Вы читаете невнимательно. Оно как раз не к Вам относилось.
← →
tesseract © (2006-08-19 19:57) [27]> если Ваши классы усегда в памяти - поздравляю.
Класс не находящийся в памяти, не существует, ибо не создан. Является частью файла, т.е. частью куска озаглавленной информации.
← →
default © (2006-08-19 20:02) [28]Юрий Зотов © (19.08.06 19:07) [21]
я знаю, что в VMT в Delphi напихано ещё всякой всячины и эта VMT есть потому и у всех
но я смотрел на VMT в её прямом назначении, обеспечить косвенный вызов методов(полиморфизм), а то что туда разработчики Delphi напихали это уже не прямое назначение VMT
а вообще я могу всё назвать указателем!(следую аналогии с классом)
могу сказать, что дерево - это 4 байтовый поинтер! матрица - поинтер! почему кто-то спросит, скажу так ак указывает на область памяти где размещены элементы матрицы:)и тд это идеологический бред
← →
tesseract © (2006-08-19 20:05) [29]> [28] default © (19.08.06 20:02)
Согласен, но не pointer, а область памяти.
← →
default © (2006-08-19 20:12) [30]кстати, а если я разыменую указатель на класс? и буду работать с ним непосредственно, определив подходящий тип записи
это уже будет не класс? или тоже класс?(то тогда надо изменять ваше определение класса:))
← →
Джо © (2006-08-19 20:13) [31]> [24] tesseract © (19.08.06 19:31)
> Класс - это вид записи, содержащий
> ссылку на методы работы с данными:-)
Вполне можно и так сказать.
А вообще, ИМХО, сабжевый вопрос неразрешим потому, что изначально не был оговорен уровень абстракции. И каждый поэтому волен выбирать любой. А уж степеней абстракции в этом вопросе немало, даже если ограничиться только Delphi & VCL :)
← →
Юрий Зотов © (2006-08-19 20:13) [32]> default © (19.08.06 20:02) [28]
> это уже не прямое назначение VMT
Какая разница? Хоть прямое, хоть кривое - VMT есть, и все. Такая реализация.
> матрица - поинтер! почему кто-то спросит, скажу так как указывает на
> область памяти где размещены элементы матрицы:)
type
TMatrix = array[10, 10] of integer;
Никакой памяти не выделяется, а идентификатор TMatrix никуда не указывает - то есть, никаким указателем не является.
type
TMyClass = class
end;
Выделяется память под VMT и другую информацию о классе, а идентификатор TMyClass является константой, содержащей адрес VMT - то есть, является указателем.
Есть разница, не так ли?
← →
tesseract © (2006-08-19 20:14) [33]> [30] default © (19.08.06 20:12)
Вы кому?
← →
Юрий Зотов © (2006-08-19 20:17) [34]> default © (19.08.06 20:12) [30]
Низкоуровневые мехнизмы VCL примерно это и делают. Именно потому, что указатель - он и в африке указатель, хоть классом его называй, хоть как.
← →
Юрий Зотов © (2006-08-19 20:22) [35]> Джо © (19.08.06 20:13) [31]
> изначально не был оговорен уровень абстракции.
Почему не был? Был. Речь идет о точке зрения хакера. А у этих ребят все вполне конкретно. Работа такая.
Машинный код - он ведь совсем не абстрактен, в нем все наши абстракции сводятся всего лишь к косвенной адресации.
← →
default © (2006-08-19 20:25) [36]Юрий Зотов © (19.08.06 20:13) [32]
есть, но я не совсем о том
"сабжевый вопрос неразрешим потому, что изначально не был оговорен уровень абстракции. И каждый поэтому волен выбирать любой."
поэтому, на этом думаю и остановимся:)
tesseract © (19.08.06 20:14) [33]
фантазии вслух:)
← →
default © (2006-08-19 20:37) [37]Юрий Зотов © (19.08.06 17:16) [17]
"класс - это константа, содержащая адрес VMT. То есть, указатель."
идейно правильно говорить, что адрес VMT определяет класс, а не является классом(хоть можно указатель на этом основании приравнять на практике к классу - это условность, хоть и нарушение идеи класса)
точно также можно говорить, что структура данных на которую указывает адрес VMT(то есть сама VMT) определяет класс и опять же на этом основании приравнять PNeedRecord(VMTPointer)^ к классу - на практике это можно, но идеологически это неверно
← →
tesseract © (2006-08-19 20:42) [38]> идейно правильно говорить, что адрес VMT определяет класс,
>
А поля объекта, типа, значения не имеют? Без них VMT - кучка ненужного хлама, вспоминаем каноническое определение инкапсуляции.
← →
default © (2006-08-19 20:47) [39]я к тому, что между множеством указателей на VMT(и собственно VMT естественно) и множеством классов в приложении существует взаимно-однозначное отображение
одно определяет другое и наоборот
только поэтому можно говорить о указателе(или VMT напрямую) имею ввиду класс и наоборот, но идейно мы понимаем, что класс и указатель вещи не имеющие ничего общего
← →
Kos[UFO] © (2006-08-19 21:57) [40]Пусик
>Класс - специальная структура, описывающая данные и правила работы с ними. >Никакого отношения к указателям.
Да здравствует царствованье разума!
default
>мы понимаем, что класс и указатель вещи не имеющие ничего общего
Очень здравое и логически правильное мнение
tesseract
>> идейно правильно говорить, что адрес VMT определяет класс,
>>
>А поля объекта, типа, значения не имеют? Без них VMT - кучка ненужного
> хлама, вспоминаем каноническое определение инкапсуляции.
Вот это я и пытался сказать хакеру.
Юрий Зотов
>класс - это константа, содержащая адрес VMT. То есть, указатель.
Если класс это константа - то получается у меня на винчестере сидят 80 миллиардов таких классов. Я могу написать какую-то цыфру из 4 байт на бумаге и это тоже будет класс!
Вы чествуете алогизм в ваших утверждениях?
Куда вы дели всю остальную информацию о классе?
И где вообще вы такое прочитали?
DprYg
>Так что, можно сделать вывод, что "класс" вообще - не указатель. А этот
> один человек вообще - не хакер.
:)
Джо
>> [17] Юрий Зотов © (19.08.06 17:16)
>> Физически, класс - это константа, содержащая адрес VMT.
>> То есть, указатель.
>Ну вот, хоть один человек со мной солидарен.
А с каких это пор физика не подлежит законам логики?
А если говорить о том, что можно получить взяв класс как адрес то:
var
aClass:TClass;
p:pointer;
begin
aClass:= form1.ClassType;
p:= TClass;
То p будет указывать на метод QueryInterface, а не на VMT!
← →
Мефисто (2006-08-19 22:24) [41]
> Kos[UFO] © (19.08.06 21:57) [40]
> То p будет указывать на метод QueryInterface, а не на VMT!
QueryInterface - а собственно откуда?
← →
tesseract © (2006-08-19 22:37) [42]> То p будет указывать на метод QueryInterface, а не на VMT!
Так, новая стадия флуда - почему класс в Делфи содержит методы COM-объекта :-)
← →
Юрий Зотов © (2006-08-19 23:58) [43]> p будет указывать на метод QueryInterface, а не на VMT!
Нет, именно на VMT. А уж там по смещению ноль содержится адрес метода QueryInterface. Косвенная у него будет адресация, не прямая.
← →
McSimm © (2006-08-20 00:44) [44]
> Если класс это константа - то получается у меня на винчестере
> сидят 80 миллиардов таких классов. Я могу написать какую-
> то цыфру из 4 байт на бумаге и это тоже будет класс!
> Вы чествуете алогизм в ваших утверждениях?
Вы чувствуете демагогию в ваших словах ?
Любой класс можно рассматривать как указатель. Но
Не любой указатель это класс.
(а уж представить себе цифру из 4х байт я вообще затруднился :)
← →
Германн © (2006-08-20 01:01) [45]
> McSimm © (20.08.06 00:44) [44]
>
> Любой класс можно рассматривать как указатель. Но
> Не любой указатель это класс.
>
> (а уж представить себе цифру из 4х байт я вообще затруднился
> :)
С первым утвеждением согласен на все 100! Имхо - одна из лучших формулировок в ветке.
Со вторым - категорически НЕТ! В оригинале то было "Я могу написать какую-то цыфру из 4 байт"! Найди одно отличие! :-)
← →
Kos[UFO] © (2006-08-20 04:39) [46]2McSimm & Германн:
Вы хотели сказать, что в определенный момент времени на определенной машине можно однозначно идентифицировать класс по некоему указателю. Все это прекрасно понимают. Но нельзя пользоваться этим для определения понятия класса при любом уровне абстракти.
В моих словах нет ни какой демагогии.
PS: McSimm, я говрю о определении слова
← →
Sergey Masloff (2006-08-20 09:12) [47]Kos[UFO] © (20.08.06 04:39) [46]
>Но нельзя пользоваться этим для определения понятия класса при любом >уровне
Очень даже можно если мы говорим о РЕАЛИЗАЦИИ класса в Delphi. Насколько я понимаю, изначальный ваш спор был с человеком который считает себя хакером а не профессором-лингвистом. Вы б ему сразу сообщили что желаете спорить о интерпретации смысла слов а не о внутренних структурах реализующих абстрактные концепции. Он бы с вами и спорить не стал.
← →
Anatoly Podgoretsky © (2006-08-20 11:59) [48]С хакером спорить не надо, для него все остальные ламеры.
← →
Palladin © (2006-08-21 12:13) [49]
> Kos[UFO] ©
Есть понятие (теория) класса и реализация.
В теории класс конечно же не указатель.
В рамках реализации ООП в Delphi (да и не только в Delphi) сам класс является указателем.
По поводу разных точек зрения см. Юрий Зотов © (19.08.06 17:16) [17]
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];
Память: 0.6 MB
Время: 0.012 c